Merk
Tilgang til denne siden krever autorisasjon. Du kan prøve å logge på eller endre kataloger.
Tilgang til denne siden krever autorisasjon. Du kan prøve å endre kataloger.
Microsoft Copilot Cowork støtter utvidbarhet gjennom M365-apppakker – den samme distribusjonsmekanismen som brukes av Teams-apper, Copilot-agenter og Office-tillegg. Du kan utvide Cowork med:
- Kompetanser: Instruksbaserte arbeidsflyter som lærer Cowork ny domeneekspertise, for eksempel økonomisk analyse, juridiske undersøkelser eller HR-arbeidsflyter.
- Koblinger: Eksterne servere som gir Cowork tilgang til eksterne datakilder og API-er.
Begge er pakket sammen i en standard Microsoft 365-apppakke og distribuert gjennom Microsoft 365-appbutikken.
Viktig!
Informasjonsbarrierer (IB) i Microsoft Purview støttes for øyeblikket ikke for administrasjon og deling av programtillegg eller ferdigheter. I leiere der IB er aktivert, blokkeres opplasting av innebygde kunnskapsfiler på leiernivå. Dette hindrer at berørte pluginer og skills blir lastet opp eller publisert.
Microsoft oppretter eller vedlikeholder ikke noen vedvarende indekser, kunnskapsgrafer (inkludert Microsoft Graph) eller databaser som inkluderer ISV-innhold, enten via kravlesøk, skraping, høsting, masseeksport, importering eller på noen annen måte (via API, MCP-server eller på annen måte). Microsoft kan midlertidig behandle ISV-innhold etter behov for å svare på brukerens sanntidsspørring, men beholder ikke ISV-innhold utover varigheten av denne økten. Etter skriftlig forespørsel fra ISV sletter Microsoft alt ISV-innhold i sin besittelse eller kontroll innen 10 virkedager og sertifiserer slik sletting skriftlig. Mer informasjon i databeskyttelse for bedrifter i Microsoft Copilot og Microsoft Copilot Chat.
Dette bygger du
Et Cowork-tillegg er en .zip-pakke som inneholder:
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
Kompetanser bruker den åpne standarden Agent Skills – det samme formatet som støttes av Claude Code, Visual Studio Code Copilot, Gemini CLI, Cursor, JetBrains Junie og 30+ andre KI-verktøy.
Velg startpunkt
Bygg programtillegget ditt med wiqd CLI. CLI oppretter pakkestrukturen og holder manifest.json og skill-mappene dine synkronisert. Den kjører også plattformens egne valideringsregler før du laster opp, og deretter klargjør og deler resultatet. CLI-en er i forhåndsvisning, så kommandoene og utdataene som genereres, kan endres før den blir allment tilgjengelig. Alt den genererer er en vanlig Microsoft 365-apppakke, så du kan fortsatt åpne, redigere og versjonsbehandle filene direkte.
Bygg pakken manuelt bare når du ikke kan installere verktøy, eller når du bygger din egen pipeline for pakking. I så fall er referansen for pakkeformatet i denne artikkelen det du trenger – den beskriver nøyaktig hva wiqd produserer.
| Utgangspunkt | Gjør dette | Tid til første pakke |
|---|---|---|
| Jeg starter fra bunnen av | Bygg en plugin-modul med wiqd | ca. 10 minutter |
| Jeg har et eksisterende Claude Code-programtillegg | Konverter den | omtrent 5 minutter |
| Jeg kan ikke installere verktøy, eller jeg skripter min egen emballasje | Sette sammen en pakke for hånd | ca. 30 minutter |
Bygg en plugin-modul med wiqd
wiqd CLI gjennomfører den samme livssyklusen som du ellers ville utført manuelt – opprett, legg til funksjoner, valider, klargjør, pakk og del. Pakken som produseres, oppfyller allerede valideringsreglene i denne artikkelen.
Trinn 1: Installer wiqd og logg på
Installer wiqd CLI ved å følge wiqd-installasjonsveiledningen, som dekker Windows, macOS og Linux. Logg deretter på Microsoft 365-leieren du utvikler mot, fordi både klargjøring og deling påvirker leieren din:
wiqd auth login --interactive
Installasjonsprogrammet registrerer også et programtillegg for GitHub Copilot CLI, så du kan styre den samme livssyklusen gjennom samtaler. Du kan for eksempel si Opprett en frittstående plugin kalt Triage Helper eller Valider pluginen min. Den samtalebaserte flyten kjører de samme kommandoene som denne delen. Bruk kommandoene direkte når du skripter en pipeline eller vil ha reproduserbar, ikke-interaktiv automatisering.
Trinn 2: Stillabrett programtillegget og legg til funksjoner
Opprett programtilleggbeholderen, og legg deretter til funksjonene du trenger i valgfri kombinasjon:
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 oppretter et skjelett for appPackage/skills/contract-analysis/SKILL.md og registrerer det i agentSkills[].
add connector skriver agentConnectors[]-oppføringen. Begge kommandoer håndhever plattformens navngivnings- og størrelsesgrenser før det skrives, slik at en mappenavnfeil eller et id som er for langt aldri når manifestet.
Skriv ferdighetslogikken din i den genererte SKILL.md. Grensene for frontmatter-feltene, modellen for progressiv lasting og grensene for følgefiler er de samme som beskrives i Trinn 1: Opprett din første skill og Trinn 2: Legg til referansemateriell (valgfritt).
Viktig!
wiqd plugin create låser pakken til manifestVersion: "1.29", mens de manuelt skrevne eksemplene i denne artikkelen bruker 1.28. Forskjellen er viktig for koblingsprogrammer. Ved 1.28 kreves mcpToolDescription, og filen det navngir, må være i ZIP-arkivet. I 1.29 er agentConnectors[]-oppføringer kun URL-er, og mcpToolDescription er valgfri, så en wiqd-generert pakke utløser aldri den opplastingsfeilen. wiqd støtter ennå ikke oppsett av koblingsautentisering – konfigurer det direkte som beskrevet i Støttede autentiseringstyper.
Trinn 3: Valider mens du bygger
Valider fortløpende i stedet for å sette sammen en pakke og håpe at opplastingen går gjennom:
wiqd plugin validate
wiqd plugin validate --mode deep
validate er den frakoblede statiske kontrollen over overflaten til den deklarative agenten. Et programtillegg kun for kompetanser eller kun for koblinger består kontrollen uten at det er noe å sjekke, noe som er forventet – det er en sjekk av byggeløkken din, ikke for fullstendig dekning.
validate --mode deep pakker pluginen først og validerer deretter den bygde .zip mot det samme appvalideringsbiblioteket som opplastingen bruker. Det er her ASKILL-kodene og koblingsreglene dukker opp.
Trinn 4: Klargjør, pakk og del
Kjør disse tre kommandoene i rekkefølge:
wiqd plugin provision
wiqd plugin package
wiqd plugin share --scope users --email you@contoso.com
Kjør provision først fordi den skriver miljøfilen som package og share begge er avhengige av. Bruk --scope users til å dele med personer du lister, eller --scope tenant til å dele med alle i organisasjonen. Uansett vises programtillegget i Delt med meg under Cowork>Kilder & ferdigheter>Programtillegg. Hvis du vil føre den opp i delen Discover i stedet, må en administrator laste opp pakken. Mer informasjon i Trinn 8: Publiser til leier. Hvis du vil fjerne det som ble opprettet av provision, kjører du wiqd plugin delete --env local --yes.
Innsending til den offentlige butikken er fortsatt en manuell prosess i Partner Center. Mer informasjon i Trinn 9: Publiser til offentligheten.
Ta med et plugin til et annet vertsprogram
Hvis du vil bruke ferdighetene dine i Claude Code, Cursor eller en annen vert for Agent Skills, må du eksportere prosjektet i stedet for å kopiere mapper for hånd:
wiqd plugin export --format claude-plugin
export Standard til --format open-plugin og godtar cursor-pluginogså. Den oppretter en ukomprimert katalog under <path>/export/<format>.
Importer et eksisterende tillegg
Hvis du allerede har en Claude Code-utvidelse med ferdigheter og MCP-servere, har du to konverteringsalternativer. Ruten du velger avhenger av om du planlegger å fortsette å utvikle plugin-en eller bare sende det du har.
| Mål | Bruk |
|---|---|
| Fortsett å utvikle, validere og publisere tilleggsprogrammet fra Microsoft 365 | wiqd plugin import |
Lag en publiserbar .zip fra en eksisterende Claude-plugin med en gang |
Skriptet for konvertering |
Importer med wiqd
wiqd plugin importgjenkjenner en Open Plugin-, Claude-plugin- eller Cursor plugin-kilde og produserer et wiqd-plugin-prosjekt fra den. Det importerte programtillegget inngår i samme livssyklus som et programtillegg du opprettet 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 kreves bare ved første import av programtillegg. Hvis kilden kom fra en tidligere wiqd plugin export, inneholder metadataene for rundtur dem allerede.
Viktig!
Et importert prosjekt støtter bare den skrivebeskyttede delen av livssyklusen —wiqd plugin validate, show, og list. De kan ennå ikke pakkes, provisjoneres eller deles fordi importen ikke oppretter de lokale distribusjonsfilene som kreves i disse trinnene. Dette er et registrert avvik. Sjekk wiqd CLI-referansen for å se gjeldende status. Hvis du trenger en publiserbar pakke i dag, kan du bruke konverteringsskriptet.
Konverter ved hjelp av konverteringsskriptet
Konverteringsskriptet oversetter en Claude-plugin direkte til en publiserbar M365-pakke:
Installer CLI (krever versjon 1.1.12 eller nyere):
npm install -g @microsoft/m365agentstoolkit-cliKontroller versjonen:
atk --versionImporter programtillegget:
atk import openplugin --path ./my-claude-plugin --output ./my-plugin-project \ --privacy-url https://contoso.com/privacy \ --terms-url https://contoso.com/terms
Kommandoen leser pluginens .claude-plugin/plugin.json (eller .cursor-plugin/plugin.json), .mcp.json og skills/-katalog, og oppretter deretter et Agents Toolkit-prosjekt som inneholder appPackage/manifest.json, ferdighetene dine og genererte ikoner.
Du må inkludere --privacy-url og --terms-url fordi plugin-manifester ikke har tilsvarende felt, og Microsoft 365-manifestet krever begge.
Note
atk import openplugin finner et plugin-manifest i en katalog med punktumprefiks—.claude-plugin/plugin.json, .cursor-plugin/plugin.json eller .plugin/plugin.json—sammen med en .mcp.json.
Spesifikasjonen for Agent Plugins 1.0.0 plasserer manifestet på et toppnivå plugin.json og MCP-konfigurasjonen på mcp.json. Hvis du vil importere et programtillegg som følger 1.0.0-oppsettet, flytter du manifestet til .plugin/plugin.json og endrer navnet mcp.json til .mcp.json.
Pakk resultatet til et opplastbart .zip:
cd my-plugin-project
atk package --manifest-file ./appPackage/manifest.json \
--output-package-file ./appPackage/build/appPackage.zip \
--output-folder ./appPackage/build
Note
atk import openplugin Genererer et devPreview manifest. Manifesteksemplene andre steder i denne artikkelen målskjema v1.28. Hvis du publiserer gjennom en kanal som krever v1.28, oppdater manifestVersion og $schema i den genererte appPackage/manifest.json
Det som importeres
| Programtilleggartefakt | Tilsvarende M365 | Merknader |
|---|---|---|
.claude-plugin/plugin.json |
manifest.json |
Navn, beskrivelse og utviklerfelt tilordnet. GUID autogenerert (deterministisk UUID v5) |
skills/*/SKILL.md |
agentSkills[] Oppføringer + skills/ mappe |
Kopiert ordrett – identisk format |
.mcp.json servere |
agentConnectors[] oppføringer |
URL- og godkjenningstype automatisk oppdaget |
color.png / outline.png |
Ikoner i pakke | Brukes hvis den finnes. Hvis plassholdere genereres hvis de mangler |
Viktig!
For hver kobling som importeres fra .mcp.json, er den genererte authorization.referenceId en plassholder avledet fra programtillegget og servernavnet. Erstatt den med den faktiske OAuth-klientregistrerings-ID-en før du publiserer. Mer informasjon i Støttede auth-typer.
Det som ikke er konvertert
Følgende funksjoner for Claude-plugin-modulen støttes ennå ikke i Microsoft 365-manifestet:
| Claude programtilleggfunksjon | Status |
|---|---|
commands/ (slash-kommandoer) |
Støttes ennå ikke |
agents/ (underagenter) |
Støttes ennå ikke |
hooks/ (hendelsesbehandlere) |
Støttes ennå ikke |
settings.json |
Gjelder ikke |
bin/ (kjørbare filer) |
Gjelder ikke |
Importalternativer
| Alternativ | Description |
|---|---|
--path, -p |
Påkrevd. Tilleggskatalog som inneholder .claude-plugin/plugin.json, .cursor-plugin/plugin.json eller .plugin/plugin.json |
--output, -o |
Målprosjektmappe (standard: ./<plugin-name>) |
--privacy-url |
developer.privacyUrl for det genererte manifestet |
--terms-url |
developer.termsOfUseUrl for det genererte manifestet |
--website-url |
developer.websiteUrl. Faller tilbake til homepage, deretter author.url |
--app-id |
Overstyr den deterministisk UUID v5 som er generert for manifestet id |
--default-auth-type |
Auto (standard), None, OAuthPluginVault, eller ApiKeyPluginVault |
Automatisk gjenkjenning av autentiseringstype:
| Kilde | Standard autentiseringstype | Årsak |
|---|---|---|
| Eksterne HTTPS-nettadresser | OAuthPluginVault |
De fleste eksterne API-er trenger godkjenning |
localhost og ikke-HTTPS URL-adresser |
None |
Lokale utvikligsservere |
Hvis automatisk gjenkjenning ikke samsvarer med oppsettet, kan du bruke --default-auth-type til å overstyre den.
Eksporter tilbake til en katalog for programtillegg
Hvis du vil flytte et Agents Toolkit-prosjekt tilbake til en katalog for programtillegg, for eksempel hvis du vil holde et Claude Code-programtillegg og en Cowork-pakke synkronisert, kan du brukeatk export openplugin:
atk export openplugin --path ./my-plugin-project \
--output ./my-claude-plugin --manifest-kind claude-plugin
| Alternativ | Description |
|---|---|
--path, -p |
Påkrevd. Prosjektmappen for Agents Toolkit som inneholder appPackage/manifest.json |
--output, -o |
Katalog for målprogramtillegget (standard: ./<plugin-name>-openplugin) |
--manifest-kind |
open-plugin (standard, skriver .plugin/plugin.json), claude-plugineller cursor-plugin |
Eksportering skriver en x-microsoft-365-agents-toolkit blokk inn i det genererte plugin.json. Denne blokken bærer manifestet id, utvikler-URL-er og koblingsinnstillinger, slik at en senere atk import openplugin kan kjøres frem og tilbake uten behov for --privacy-url eller --terms-url igjen.
Note
Blokken x-microsoft-365-agents-toolkit er spesifikk for Agents Toolkit, og standardtypen open-plugin skriver manifestet til .plugin/plugin.json.
Agent Plugins 1.0.0 bruker et toppnivå plugin.json og bærer klientspesifikke data under en extensions nøkkel med et navneområde for omvendt domene, slik at andre klienter ignorerer denne blokkeringen i stedet for å handle på den. Når målet er Claude Code eller Cursor, bruker du --manifest-kind claude-plugin eller cursor-plugin.
Eldre versjon: PowerShell-konverteringsskript
Før støtte for import av programtillegg ble lagt til i atk, brukte konverteringen et PowerShell-skript bare for Windows, som fortsatt er tilgjengelig som konverteringsskript:
.\Convert-ClaudePluginToMOS3.ps1 -PluginPath ./my-claude-plugin -OutputPath ./output
Bruk atk import openplugin i stedet. Den er på tvers av plattformer, støtter Cursor så vel som Claude Code-kilder, og kan eksportere tilbake til en plugin-katalog.
Sette sammen en pakke for hånd
Denne delen er referansen til pakkeformatet: den beskriver nøyaktig hva Build a plugin with wiqd genererer, felt for felt. Følg det fra ende til annen når du ikke kan installere utviklingsverktøy, eller når du bygger ditt eget pakkeforløp. Bruk den som referanse når du trenger å forstå eller feilsøke en generert pakke.
Trinn 1: Opprett din første ferdighet
En kompetanse er en mappe som inneholder en SKILL.md fil. Opprett følgende mappestruktur:
my-extension/
└── skills/
└── contract-analysis/
└── SKILL.md
Skriv SKILL.md med YAML-frontmateriale og en Markdown-tekst:
---
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 frontmatter-felter
Obligatoriske felt:
| Felt | Begrensninger | Description |
|---|---|---|
name |
1–64 tegn, kebab-store og små bokstaver | Kompetanse-ID – må samsvare nøyaktig med mappenavnet |
description |
1–1024 tegn | Når du bør bruke denne ferdigheten – inkluder utløseruttrykk |
Viktig!
- Mappenavnet må samsvare med feltet
namei frontmatter. Dette misforholdet er den vanligste årsaken til feil med ferdigheter. - Feltene i programtilleggoppføringer
descriptionbør ikke inneholde handlingsoppfordringer som henviser brukere til eksterne markedsplasser for å kjøpe abonnementer.
| Mappebane |
name-felt |
Gyldig? | Hvorfor |
|---|---|---|---|
skills/contract-analysis/SKILL.md |
contract-analysis |
Yes | Mappe og navn samsvarer |
skills/contract-analysis/SKILL.md |
ContractAnalysis |
No | Navnet bruker PascalCase i stedet for mappe med samsvarende navn |
skills/my-skill/SKILL.md |
contract-analysis |
No | Mappen er my-skill , men navnet er contract-analysis |
Navneregler (kebab-case): Bruk bare små alfanumeriske tegn og bindestreker. Ikke bruk sammenhengende bindestreker, og ikke bruk foranstilte eller etterfølgende bindestreker.
| Eksempel | Gyldig? | Problem |
|---|---|---|
bond-relative-value |
Yes | Små bokstaver med bindestreker |
fx-carry-trade |
Yes | Små bokstaver med bindestreker |
email |
Yes | Ett ord, ingen bindestreker er nødvendige |
Bond_Relative_Value |
No | Understreker og store bokstaver |
--my-skill-- |
No | Foranstilte og etterfølgende bindestreker |
my--skill |
No | Påfølgende bindestreker |
Trinn 2: Legg til referansemateriell (valgfritt)
For komplekse ferdigheter kan du holde hovedinnholdet SKILL.md slankt og flytte detaljert innhold til underkataloger. Disse ekstra filene er tilleggsfiler. Ferdigheten laster disse inn når det trengs.
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
Begrensninger for tilknyttede filer
Hver kompetanse kan inneholde opptil 20 tilknyttede filer (alle filer bortsett fra SKILL.md). Følgende grenser gjelder per kompetanser:
| Grense | Verdi |
|---|---|
| Maksimalt antall tilknyttede filer | 20 |
| Maksimum størrelse for hver tilknyttet fil | 5 MB |
| Maksimal total companion-størrelse | 10 MB |
| Tidsavbrudd ved nedlasting (alle tilknyttede enheter) | 15 sekunder |
Regler for tilhørende fil
Filbaner for følgefiler må følge disse reglene:
- Bruk bare relative stier (ingen absolutte stier).
- Ingen sti-traversering (
..segmenter). - Ingen omvendte skråstreker eller nullbyte i filnavn.
- Ingen skjulte filer (navn som begynner med
.). - Ingen reserverte navn i Windows (
CON,PRN,AUX,NUL,COM1–COM9,LPT1–LPT9). - Selve filen
SKILL.mdteller ikke som en tilhørende fil. - Filnavn må bruke trygge tegn: alfanumeriske tegn, bindestreker, understreker, punktumer, mellomrom og
!.
For å holde kontekstvinduet effektivt, laster systemet skills i tre lag:
| Lag | Når den lastes inn | Målstørrelse |
|---|---|---|
Forstoff (name + description) |
Alltid – ved oppstart | ~100 tokener |
SKILL.md brødtekst |
Når kompetansen utløses | Mindre enn 5 000 tokens (1 500-2 000 ord) |
Referanser (references/) |
På forespørsel fra agenten | Ubegrenset |
Skripter (scripts/) |
Kjørt, ikke lastet inn i kontekst | Ikke tilgjengelig |
Referer eksplisitt til underkatalogene i SKILL.md slik at agenten vet at de finnes:
## 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
Trinn 3: Legg til en kobling (valgfritt)
Hvis utvidelsen trenger tilgang til eksterne data, kan du legge til en ekstern MCP-server. Dette trinnet er valgfritt. Pakker med bare kompetanser fungerer bra for instruks-baserte arbeidsflyter.
Tips
Hvis serveren din styrer synligheten av verktøy etter klient eller tilskriver innkommende trafikk, gå til Identifiser Cowork-trafikk til serveren for klientidentiteten Cowork presenterer.
Note
Egendefinerte programtillegg støttes ikke i Cowork på mobil.
Koblingskrav
| Forutsetninger | Detaljer |
|---|---|
| Transport | Strømmbar HTTP (HTTPS påkrevd, TLS 1.2+) |
| Protokoll | JSON-RPC 2.0-meldingsformat |
| Verktøyidentifisering | Støtt tools/list for dynamisk oppdagelse (anbefales) |
| Verktøykjøring | Støtt tools/call for påkalling |
| Tilgjengelighet | SLA med 99,9 % oppetid anbefales for Store-publiserte apper |
| Responstid | Mindre enn 30 sekunder per verktøykall |
Retningslinjer for verktøyutforming
-
Ett verktøy per handling for små API-er (færre enn 15 operasjoner):
search_case_law,get_ruling,cite_precedent -
Søk + utfør etter store API-er (50+ operasjoner):
search_actions+execute_action -
Beskrivende navn:
get_bond_priceikkegetData - Rike inndataskjemaer: Inkluder en beskrivelse for hver parameter – dette er det agenten leser
- Strukturerte utdata: Returner JSON som agenten kan formatere for brukeren
-
Filinndata: Hvis du vil godta en fil fra brukerens arbeidsområde, deklarerer du parameteren med
contentEncoding: base64. Mer informasjon i Godta filer fra Cowork-arbeidsområdet.
Beskriv verktøyene for koblingen din (mcpToolDescription)
En remoteMcpServer kobling kan eventuelt inneholde et mcpToolDescription-objekt. Når den nestede egenskapen dens er angitt, peker den på file JSON-fil for verktøybeskrivelse som du pakker i .zip og refererer til med en relativ sti fra pakkeroten. Cowork oppdager verktøy dynamisk fra MCP-serveren din og bruker ikke denne filen, 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 inkluderer mcpToolDescription, beskriver den refererte filen (for eksempel tools/contoso-legal-tools.json) verktøyene som koblingen eksponerer, og må være med i ZIP-pakken. Inkluder den sammen med manifest.json og skills/-mappen når du pakker plugin-modulen.
Tips
Dette kravet gjelder for manifestversjon 1.28. Pakker som wiqd plugin create genererer, retter seg mot 1.29, der agentConnectors[]-oppføringene kun inneholder URL-er, mcpToolDescription er valgfri, og det ikke finnes noen fil med verktøybeskrivelse som kan glemmes.
Støttede autentiseringstyper
| Autentiseringstype | Når skal brukes | Brukeropplevelse |
|---|---|---|
None |
Offentlige eller anonyme API-er, interne tjenester | Gjennomsiktig – ingen autentiseringsforespørsel |
OAuthPluginVault |
OAuth 2.0 APIer (anbefalt for produksjon) | En bruker fullfører OAuth-samtykke én gang |
ApiKeyPluginVault |
API-nøkkelbaserte tjenester | Bruker oppgir nøkkelen én gang |
Note
- Støtte for API-nøkkelautentisering er ikke tilgjengelig i Cowork ennå.
- Hvis MCP-serveren din krever en API-nøkkel, bruk
OAuthPluginVaulteller Dynamic Client Registration i stedet, eller gjør et endepunkt tilgjengelig som godtarNone.
For OAuthPluginVault og ApiKeyPluginVault viser referenceId til legitimasjon som er lagret i Microsoft Enterprise Token Store – hemmeligheter vises aldri i manifest- eller skill-filer.
referenceId-verdien er registrerings-ID-en for OAuth-klienten som du oppretter når du registrerer en OAuth-klient med Agents Toolkit.
Viktig!
Når du registrerer OAuth-klienten, setter du organisasjonsbruk til Enhver Microsoft 365-organisasjon for å sikre at programtillegget fungerer på tvers av leiere.
MCP-godkjenning
Hvis du vil bruke OAuth eller ApiKey for autentisering, kan du se Konfigurer autentisering for MCP- og API-plugins i agenter i Microsoft 365 Copilot for oppsett og konfigurasjonsdetaljer.
Dynamisk klientregistrering
Hvis MCP-serveren din støtter Dynamic Client Registration (DCR), kan du utelate en authentication konfigurasjon fra koblingsdefinisjonen, og Cowork oppretter automatisk en OAuth-klient på vegne av programtillegget.
Note
Å utelate konfigurasjonen authentication støttes kun i Cowork. Det støttes ikke i Copilot Chat. Hvis programtillegg-modulen også må fungere i Copilot Chat, konfigurer OAuthPluginVault godkjenning som beskrevet i Støttede godkjenningstyper.
Du kan utelate objektet authorization helt. Konfigurer nettadressen for MCP-serveren, og Cowork tar seg av OAuth-klienten:
"remoteMcpServer": {
"mcpServerUrl": "https://api.contoso.com/legal/mcp"
}
Trinn 4: Opprette manifestet
Opprett manifest.json i pakkeroten. Eksemplet bruker manifestversjon 1.28. wiqd plugin create låser til 1.29 i stedet, der koblingsoppføringer bare er URL-adresser.
{
"$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 legge til en koblingsapp, må du ta med 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 koblingskonfigurasjonen skal referenceId være OAuth-registrerings-ID-en. Hvis du tar med mcpToolDescription, må den file peke til en JSON-fil med verktøybeskrivelse som er inkludert i ZIP-pakken.
Viktig!
Manifestskjemaet v1.28 er strengt: Det settes additionalProperties: false på roten, slik at alle felt som ikke er definert i skjemaet, blir forkastet. Felter som er gyldige i standard Teams-appmanifester, for eksempel packageName, gjør at opplastingen mislykkes med en feilmelding som Property 'packageName' has not been defined and the schema does not allow additional properties. Inkluder bare feltene som vises her.
Trinn 5: Legg til ikoner
Opprett to PNG-ikoner:
| Ikon | Størrelse | Formål |
|---|---|---|
color.png |
192×192 piksler | Appikon i full farge som vises i appbutikk og appliste |
outline.png |
32×32 piksler | Ensfarget omrissikon for kompakte visninger |
Hvis du ikke har ikoner ennå, genererer atk import openplugin ensfargede plassholdere. Bytt dem ut før innsending til appbutikken.
Trinn 6: Pakk
Opprett en ZIP-fil med alt innhold på rotnivå. (wiqd plugin package gir samme struktur etter 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 tilkobling inkluderer mcpToolDescription, inkluder JSON-filen med verktøybeskrivelsen som den refererer til. Pakker som ikke bruker mcpToolDescription, inkludert pakker kun med ferdigheter, trenger 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/
Bruker Microsoft 365 Agents Toolkit
atk package --manifest-file ./appPackage/manifest.json \
--output-package-file ./appPackage/build/appPackage.zip \
--output-folder ./appPackage/build
Trinn 7: Test
Hvis du vil teste appen, kan du laste opp app-pakken til Teams som beskrevet i Last opp appen til Teams.
Hvis du bygde tilleggsprogrammet med wiqd, kjør wiqd plugin provision i stedet – den registrerer tilleggsprogrammet for leieren din for deg. For personlig testing av en pakke som er satt sammen for hånd, installer appen ved sideinnlasting ved å bruke kommandolinjegrensesnittet til Microsoft 365 Agents Toolkit:
Installere
@microsoft/m365agentstoolkit-clifranpm:npm install -g @microsoft/m365agentstoolkit-cliKontroller installasjonen ved å kjøre:
atk --versionAutentiser med Microsoft 365-jobbkontoen din:
atk auth loginLogg på jobbkontoen din og installer agentpakken. Bytt ut filstien med plasseringen til ZIP-pakken:
atk install --file-path "C:/Users/myuser/myPackage.zip" --scope PersonalEn vellykket installasjon returnerer utdata som inneholder en
TitleIdogAppIdfor kontoen din.Lagre disse ID-ene for senere bruk når du oppdaterer eller avinstallerer.
Mer informasjon i kommandolinjegrensesnittet for Microsoft 365 Agents Toolkit.
Trinn 8: Publiser til leier
Last opp pakken i administrasjonssenteret for å vise programtillegget i Oppdage-delen, hvor alle i organisasjonen kan finne det:
- Åpne >Administrer apper>Last opp egendefinert app.
- Velg ellipseknappen (...) >Legg til agent.
- Last opp filen til
.zip-pakken. - Åpne Cowork>Kilder og ferdigheter>Programtillegg. Utvidelsen vises i delen Oppdage.
wiqd plugin share plasserer tillegget i Delt med meg i stedet for Oppdag. Bruk den til testing og for målrettet utrulling til bestemte personer. Opplasting i administrasjonssenteret er det som gjør at et programtillegg vises slik at det kan oppdages.
Trinn 9: Publiser til offentligheten
For programtillegg som er ment for offentlig distribusjon, kan du sende inn programtillegget til Microsoft 365 App Store via Partnersenter. Les mer i Publiser agenter for Microsoft 365 Copilot.
Teste en kobling mot en lokal MCP-server
Koblinger krever en HTTPSmcpServerUrl. Hvis du vil teste en server som kjører på maskinen, må du eksponere den over en offentlig HTTPS-nettadresse.
Utviklertunneler tilbyr et relé som terminerer TLS for deg.
devtunnel port create <tunnel> -p <port> --protocol http
Viktig!
Bruk --protocol http, ikke https. Flagget --protocol beskriver den lokale tjenesten tunnelen videresender til, ikke nettadressen for den offentlige tunnelen. De fleste lokale MCP-servere snakker vanlig HTTP, så hvis du angir --protocol https mens serveren serverer HTTP, returnerer hver forespørsel gjennom tunnelen en 502 feil. Videresendingen avslutter TLS og betjener den offentlige nettadressen over HTTPS uavhengig av dette flagget.
Feilsøking
| Symptom | Årsak | Løs |
|---|---|---|
Hver tunnelert forespørsel returneres 502 og den lokale serveren leser HTTP |
devtunnel port create ble kjørt med --protocol https |
Gjenskap porten med --protocol http |
Tunnelerte forespørsler returnerer 502 på macOS selv om den lokale serveren kjører |
Serveren er bundet til 0.0.0.0 (bare IPv4), men tunnelen kobler til localhost, som løses til ::1 (IPv6) først |
Bind serveren til :: slik at den godtar både IPv4- og IPv6-tilkoblinger |
Opplasting mislykkes ved Property '<field>' has not been defined and the schema does not allow additional properties |
Manifestet inneholder et felt som v1.28-skjemaet ikke tillater (for eksempel: packageName) |
Fjern feltet. v1.28-skjemaet bruker additionalProperties: false |
Pakkemønstre
Velg mønsteret som passer til utvidelsen din:
Bare kompetanser (ingen kobling)
Best for spørsmålsbaserte arbeidsflyter, dokumentanalyse og skrivehjelp.
my-skills-pack.zip
├── manifest.json # agentSkills only, no agentConnectors
├── color.png
├── outline.png
└── skills/
├── skill-one/SKILL.md
└── skill-two/SKILL.md
Kompetanser + ekstern tilkobling
Best egnet for dataanalyse, API-integrasjoner og bedriftssystemer.
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 kobling (ingen tilpassede kompetanser)
Bruk dette alternativet for datakilder som Coworks innebygde ferdigheter allerede kan bruke.
my-connector.zip
├── manifest.json # agentConnectors only, no agentSkills
├── color.png
├── outline.png
└── tools/ # Tool-description file(s) for mcpToolDescription (optional)
└── my-connector.json
Importert Claude Code eller Cursor-programtillegg
Bruk dette alternativet for eksisterende programtillegg i Claude-økosystemet som er laget for Cowork. Hvis du vil fortsette å utvikle plugin-modulen i Microsoft 365, kan du importere den:
wiqd plugin import --path ./claude-plugin --privacy-url https://contoso.com/privacy --terms-url https://contoso.com/terms
For å produsere en publiserbar fil fra .zip programtillegget slik det ser ut i dag, bruk konverteringsskriptet:
atk import openplugin --path ./claude-plugin --output ./my-plugin-project \
--privacy-url https://contoso.com/privacy \
--terms-url https://contoso.com/terms
Beste praksis for ferdighetsredigering
Følg disse retningslinjene for å opprette kompetanser som aktiveres på en pålitelig måte og gir konsistente resultater.
Skriv effektive beskrivelser
Feltet description bestemmer når agenten aktiverer kompetansen din. Vær spesifikk:
# 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 arbeidsflyter
- Vær spesifikk i beskrivelsen. Inkluder utløseruttrykk: «Brukes når brukeren ber om å...» Denne beskrivelsen er hvordan agenten avgjør hvilken ferdighet som skal aktiveres.
- Struktur som en arbeidsflyt. Nummerer trinnene. Hvert trinn skal tilordnes til en konkret handling (lese en fil, kalle et verktøy, generere utdata).
- Definer utdataformat: Vis den nøyaktige strukturen til tabellen, listen eller dokumentet som brukerne kan forvente. Denne definisjonen forbedrer konsistensen dramatisk.
-
Referanseverktøy ved navn. Hvis ferdighetene dine avhenger av koblingsverktøy, navngi dem eksplisitt: «Bruk verktøyet
search_case_lawtil ...» -
Hold hovedfilen SKILL.md slank. Flytt detaljert referansemateriale til underkatalogen
references/. Ferdighetsinnholdet bør være workflowen, ikke et leksikon.
Unngå vanlige feil
-
Ikke bygg inn hemmeligheter i
SKILL.mdfiler. BrukagentConnectorsmed godkjenning for API-legitimasjon. - Ikke dupliser innebygde funksjoner. Sjekk listen over innebygde ferdigheter før du begynner å bygge.
- Ikke gjør ferdighetene for brede. «Gjør alt med juridiske dokumenter» er dårligere enn spesifikke ferdigheter for «kontraktsanalyse», «uttrekking av klausuler» og «rettskildesøk».
- Ikke hardkod filbaner eller systemkommandoer. Funksjoner skal kunne brukes på tvers av miljøer.
-
Ikke legg alt i SKILL.md. Hvis brødteksten overstiger ~3 000 ord, flytt detaljert innhold til
references/.
Valideringsregler
Når du sender inn pakken din, validerer plattformen den på flere nivåer. Rett disse feilene før du sender inn for å unngå at den blir avvist.
Hvis du vil fange dem mens du bygger i stedet for på opplastingstidspunktet, kan du kjøre wiqd plugin validate --mode deep. Denne kommandoen pakker programtillegget og kjører de samme reglene lokalt. Les mer i Trinn 3: Bekreft mens du bygger.
Validering på manifestnivå
| Kode | Regel | Alvorlighetsgraden |
|---|---|---|
| ASKILL-M001 |
folder kreves på hver agentSkills oppføring |
Feil |
| ASKILL-M002 |
agentSkills tabell kan ha opptil 20 elementer |
Feil |
| ASKILL-M003 |
folder banen kan inneholde opptil 256 tegn |
Feil |
Validering på pakkenivå
| Kode | Regel | Vanlig feilretting | Alvorlighetsgraden |
|---|---|---|---|
| ASKILL-P001 | Mappen som det refereres til i manifestet, finnes i ZIP | Sjekk ZIP-strukturen din | Feil |
| ASKILL-P002 | Mappen inneholder en SKILL.md fil |
Legg til manglende SKILL.md |
Feil |
| ASKILL-P003 |
SKILL.md har gyldig YAML-frontmatter mellom --- skilletegn |
Rett YAML-syntaksen | Feil |
| ASKILL-P004 | Frontmatter inkluderer name felt |
Legg name: til frontmatter |
Feil |
| ASKILL-P005 | Frontmatter inkluderer description felt |
Legg description: til frontmatter |
Feil |
| ASKILL-P006 |
name stemmer overens med mappenavnet (siste stisegment) |
Gi nytt navn til mappen eller reparer name: |
Feil |
| ASKILL-P007 |
name is kebab-case |
Bruk my-skill, ikke MySkill eller my_skill |
Feil |
| ASKILL-P008 | Ingen dupliserte folder verdier i arrayet |
Fjern duplikater | Feil |
Kontaktvalidering
| Regel | Alvorlighetsgraden |
|---|---|
Hver kontakt krever en id og displayName |
Feil |
Alle kobling id-verdier må være unike i manifestet |
Feil |
Nøyaktig én av plugin eller remoteMcpServer |
Feil |
mcpServerUrl må være et gyldig HTTPS URL |
Feil |
Hvis mcpToolDescription finnes, må file-en finnes i ZIP-filen |
Feil |
authorization.referenceId Obligatorisk med mindre type er None |
Feil |
authorization.referenceId må ikke være til stede når typen er None |
Feil |
Validering av tilleggsfil
Portalen validerer følgefiler (referansemateriale, skript og andre filer sammen med SKILL.md) på opplastings- og synkroniseringstidspunktet:
| Regel | Alvorlighetsgraden |
|---|---|
Maksimalt 20 tilknyttede filer per ferdighet (unntatt SKILL.md) |
Feil |
| Hver ledsagerfil må være 5 MB eller mindre | Feil |
| Totalt antall companion-filer må være 10 MB eller mindre per kompetanse | Feil |
| Filbaner må være relative (ingen absolutte baner) | Feil |
Ingen sti-traverseringssegmenter (..). |
Feil |
| Ingen omvendte skråstreker eller nullbyte i filnavn | Feil |
Ingen skjulte filer (navn som begynner med .) |
Feil |
Ingen reserverte navn i Windows (CON, PRN, AUX, NUL, COM1–COM9, LPT1–LPT9) |
Feil |
Filnavn må bare bruke sikre tegn (alfanumeriske tegn, bindestreker, understrekingstegn, prikker, mellomrom, !) |
Feil |
Kryssplattformkompatibilitet
Ferdigheter bruker den åpne standarden Agentferdigheter. De samme SKILL.md filene fungerer på tvers av flere KI-verktøy:
| Plattform | Kompatibilitet |
|---|---|
| Claude Code | Fullstendig samme SKILL.md format |
| Claude.ai-prosjekter | Full-skills kan lastes opp som prosjektfiler |
| VS Code / GitHub Copilot | Full-Agent-kompetanser som støttes i agentmodus |
| Gemini CLI | Full-Agent-kompetanser støttes |
| JetBrains Junie | Full-Agent-kompetanser støttes |
| OpenAI Codex | Full-Agent-kompetanser støttes |
| Markøren | Full-Agent-kompetanser støttes |
Hvis du utvikler kompetanser for både Claude Code og Copilot Cowork, kan du utvikle programtillegget med wiqd. Kjør wiqd plugin export --format claude-plugin deretter for å produsere Claude-kodeoppsettet. Hvis du heller vil starte fra Claude Code-plugin-strukturen – det er det supersettet – er oppsettet:
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)
Deretter tar du det til Microsoft 365 når du er klar til å publisere til Microsoft 365 App Store, enten med wiqd plugin import eller med konverteringsskriptet:
atk import openplugin --path ./my-plugin --output ./my-plugin-project \
--privacy-url https://contoso.com/privacy \
--terms-url https://contoso.com/terms
MCP-behandling av merknader og bekreftelser
Copilot Cowork leser standard-MCP-objektet annotations for verktøyene serveren returnerer fra tools/list, og bruker det til å avgjøre om et verktøykall trenger brukerbekreftelse og hvilken etikett som skal vises i instruksen.
Tilgjengelige felt
| Felt | Type | Effekt |
|---|---|---|
readOnlyHint |
bool |
false: bekreftelse kreves før verktøyet kjøres. |
destructiveHint |
bool |
true: bekreftelse kreves før verktøyet kjøres. |
title |
streng | Leselig etikett som vises i bekreftelsesdialogen. Faller tilbake til verktøynavnet når det ikke er til stede. |
Regler for bekreftelse
Bekreftelse kreves hvis readOnlyHint == false eller destructiveHint == true.
Alle verktøy må ha spesifiserte sikkerhetsanmerkninger. Verktøy uten merknader behandles som destruktive og krever bekreftelse. Finn ut mer i MCP-skjemareferansen.
MCP-eksempler
En destruktiv handling med en vennlig etikett:
{
"name": "send_email",
"description": "Send an email message.",
"annotations": {
"title": "Send Email",
"destructiveHint": true
},
"inputSchema": { ... }
}
En trygg leseoperasjon som kjører automatisk:
{
"name": "search_docs",
"annotations": {
"title": "Search Documents",
"readOnlyHint": true
}
}
Hva er tilgjengelig nå
- Microsoft-verktøy (Graph, Dataverse og andre) er underlagt Coworks innebygde policy, uavhengig av annotasjoner.
- For MCP-servere som ikke er fra Microsoft, innføres bekreftelse basert på merknader gradvis. Angivelse av hint nå er fremoverkompatibel, og bekreftelsesmeldinger vises etter hvert som utrullingen utvides uten at det kreves utviklerendringer.
Godta filer fra Cowork-arbeidsområdet
Et koblingsverktøy kan hente en fil fra brukerens Cowork-økt som inndata – et dokument brukeren har lagt ved, et e-postvedlegg som Cowork har lagret, eller en fil som et tidligere trinn har produsert. Angi parameteren med det standardiserte JSON Schema-nøkkelordet contentEncoding: base64, så håndterer Cowork resten. Det kreves ingen Microsoft-spesifikk skjemautvidelse, og serverens API endres heller ikke.
Cowork finner arbeidsområdefilen og base64-koder den før den kaller serveren din, slik at filbyte aldri kommer inn i agentens kontekst. Agenten ser og returnerer kun filbaner i arbeidsområdet.
Note
Ikke be agenten base64-kode en fil selv og lime inn blobben i et verktøykall. Denne fremgangsmåten laster inn hele filen i modellens kontekst og avhenger av modellen som reproduserer bloben nøyaktig. Det ser ut til å fungere på små testfiler, men mislykkes på faktiske filer.
Deklarere en filparameter
En strengegenskap med contentEncoding: base64 gjenkjennes som en filinndata:
{
"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 matrise av slike strenger gjenkjennes også, for verktøy som godtar flere filer:
"attachments": {
"type": "array",
"items": { "type": "string", "contentEncoding": "base64" },
"description": "Receipt images to attach to the expense line."
}
Hva agenten ser
For filparametere som er deklarert på øverste nivå i inputSchema.properties, erstatter Cowork dem i det modellrettede skjemaet med én enkelt direct_attachment_file_paths matrise – den samme parameteren som Coworks innebygde verktøy bruker, slik at agenten allerede vet hvordan den skal fylle den ut. Schemaet ovenfor blir presentert 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 verktøyet deklarerer mer enn én filparameter på øverste nivå, slås alle sammen til den ene direct_attachment_file_paths-matrisen. Ved anropstid vifter Cowork de løste filene tilbake til de opprinnelige parameternavnene i deklarasjonsrekkefølge.
Nestede filparametere
Agenten støtter en filparameter nestet inni et objekt eller en array med objekter. Agenten håndterer denne parameteren på en annen måte: I stedet for å kollapse den, skriver agenten den om på stedet til en banestreng på den opprinnelige plasseringen. Denne fremgangsmåten bevarer tilknytningen mellom en fil og dens sideordnede felt. Du får for eksempel én kvittering per utgiftslinje:
"line_items": {
"type": "array",
"items": {
"type": "object",
"properties": {
"amount": { "type": "number" },
"receipt": { "type": "string", "contentEncoding": "base64" }
}
}
}
Agenten fyller ut line_items[].receipt med en arbeidsområdebane, og Cowork erstatter hver bane med base64-innhold på stedet før Cowork videresender kallet.
Nestingen krysses til en dybde på fire nivåer under toppen av inputSchema.
$ref pekere følges ikke – definer filparametere innebygd i stedet for bak en $ref.
Hva serveren mottar
Serveren mottar en ordinær tools/call med de opprinnelige parameternavnene utfylt med base64-kodet innhold:
{
"method": "tools/call",
"params": {
"name": "analyze_contract",
"arguments": {
"document": "JVBERi0xLjQKJcfsj6IKNSAwIG9iago8PC9MZW5...",
"jurisdiction": "US"
}
}
}
Serveren trenger ikke å vite at agenten brukte et banebasert grensesnitt, og verktøy som ikke deklarerer contentEncoding: base64 parametere, påvirkes ikke.
Grenser
| Grense | Verdi |
|---|---|
| Files per verktøykall | 8 |
| Størrelse per fil | 150 MiB |
| Samlet størrelse for hvert verktøykall | 150 MiB |
| Filparametere for array per verktøy | 1 (kombiner den med et hvilket som helst antall skalarfilparametere) |
| Maksimal nestedybde | 4 nivåer under toppen av inputSchema |
Et kall som overskrider filantallet eller en størrelsesgrense, mislykkes med en verktøyfeil og når aldri serveren din. Dimensjoner API-en og dens tidsavbrudd med 150 MiB-taket i tankene: base64 blåser opp nyttelasten med omtrent en tredjedel over raw-filstørrelsen, og det kodede innholdet sendes i JSON-RPC-forespørselsteksten.
Anbefalinger
- Beskriv parameteren for en menneskelig leser. Agenten bruker beskrivelsen til å bestemme hvilken parameter filen hører til. For eksempel fungerer
"The signed contract PDF to analyze"bedre enn"file". - Angi formatene du godtar i parameterbeskrivelsen. Cowork videresender det brukeren legger ved. Valider innholdstypen på din side, og returner en klar verktøyfeil hvis den ikke kan brukes.
- Angi annotasjoner. Et verktøy som mottar en fil og behandler den, er vanligvis ikke skrivebeskyttet, så det ber om bekreftelse. Les mer om MCP-merknad og bekreftelsesadministrasjon.
- Behold filparametere inline. En parameter bak en
$ref, eller nestet dypere enn fire nivåer, skrives ikke om. Serveren vil motta en streng som angir en bane når den forventer innhold. - Deklarer maksimalt én array-filparameter per verktøy. Med to eller flere filer kan ikke Cowork avgjøre hvilken fil som hører til i hvilket array, og kallet mislykkes med en verktøyfeil. Bruk én tabell, eller flere skalarparametere, eller en blanding av skalarer og én tabell.
- Forvent et nøyaktig antall på verktøy som bare støtter skalarer. Hvis verktøyet bare deklarerer skalarfilparametere, må antallet filer agenten sender videre, samsvare med tallet som er deklarert. Merk valgfrie filparametere tydelig i beskrivelsene, slik at agenten ikke oppgir for få eller for mange.
Note
Denne mekanismen går forut for Model Context Protocols eget filinndataarbeid, som standardiseres av MCP File Uploads Working Group. Cowork kan legge til støtte for den standardiserte formen for deklarative filinndata når dette blir tilgjengelig. Kontrakten contentEncoding: base64 som beskrives her, fortsetter å fungere.
Identifiser Cowork-trafikk til serveren din
Hvis MCP-serveren styrer synligheten av verktøy per klient, eller du vil tilskrive trafikken den mottar, kan du gjenkjenne forespørsler som kommer fra Cowork. Cowork presenterer en stabil programvareprofil på to kanaler:
| Kanal | Hvor den vises | Verdi |
|---|---|---|
User-Agent forespørselshode |
Hver utgående forespørsel Cowork sender til serveren din | copilot-cowork/1.0 |
clientInfo i MCP-håndtrykket initialize |
Kun initialize-forespørselen |
{ "name": "copilot-cowork", "version": "<version>" } |
Samsvar på prefikset copilot-cowork
Samsvar med copilot-coworkprefikset, uten skille mellom store og små bokstaver, på en av de to kanalene. Ikke samsvar nøyaktig med strengen copilot-cowork/1.0 eller en bestemt clientInfo.version. Versjonen følger kontrakten for klientidentitet og forventes å endres; et prefikssamsvar sørger for at gaten fungerer på tvers av versjonsøkninger.
# Correct: case-insensitive prefix match
copilot-cowork
# Incorrect: exact match breaks when the version changes
copilot-cowork/1.0
Velg riktig kanal for porten din
De to kanalene har forskjellige omfang, så baser valget på den som samsvarer med hvordan serveren håndhever gate:
- Toppteksten
User-Agenter til stede i hver forespørsel, inkluderttools/listogtools/call. Hvis du styrer eller tilordner per forespørsel, bruk denne toppteksten. -
clientInfosendes bare underinitialize-handtrykket. Hvis du styrer per økt på tilkoblingstidspunktet, kan du lese det der, men det gjentas ikke ved senere forespørsler.
Hva som inngår i identiteten og ikke inngår i den
Identiteten angir bare programvaren. Det er likt for alle Cowork-brukere og -tilkoblinger, og det bærer aldri brukeridentitet. Brukeridentiteten forblir i autorisasjonsflyten som defineres i autentiseringskonfigurasjonen for koblingen.
| Identiteten inkluderer | Identiteten inkluderer ikke |
|---|---|
Et stabilt programvarenavn (copilot-cowork) og en kontraktsversjon |
Enhver leier, bruker, økt eller samtaleidentifikator |
| Den samme verdien for hver forespørsel og hver tilkobling | En kvalifikator per tilkobling |
Siden det ikke finnes noen kvalifikator per connector, kan du for øyeblikket ikke bruke denne identiteten til å finne ut hvilken connector som gjorde et kall, eller til å skille et publisert Microsoft-programtillegg fra en sideloadet server som peker til samme URL-adresse. Hvis du trenger denne distinksjonen, kan du håndheve den gjennom koblingens autorisasjonskonfigurasjon i stedet for klientidentiteten.
Vanlige spørsmål
Kan jeg bruke ferdigheter fra M365-pakken i Claude Code?
Ja. Ferdighetsmappene inneholder standard Agent-ferdigheter. Kjør wiqd plugin export --format claude-plugin for å produsere Claude Code-oppsettet, eller kopier skill-mappene til .claude/skills/ i et hvilket som helst Claude Code-prosjekt.
Trenger jeg en fjernkobling?
Antall Pakker med bare kompetanser fungerer bra for instruks-baserte arbeidsflyter. Koblinger er bare nødvendig når skill krever direkte data fra et eksternt system.
Hvordan skiller tilleggsferdigheter seg fra innebygde ferdigheter?
Pluginkompetanser vises med kilde "package" i API-en. De kan ikke overstyre innebygde ferdigheter med samme navn. Admin-distribuerte pakker viser isAdminDeployed: true.
Kan IT-administratorer kontrollere hvilke programtillegg som er tilgjengelige?
Ja. Standard M365-administrasjonskontroller gjelder: tillatelses-/blokkeringslister på leiernivå, administratorstyrte distribusjoner og samsvarspolicyer.
Hva skjer hvis et programtillegg tilbakekalles?
I den neste synkroniseringssyklusen fjernes kompetanser og koblinger fra den pakken fra brukerens økt. Aktive samtaler blir ikke avbrutt, men nye økter har ikke pakkefunksjonalitet.
Hva er maksimalt antall ferdigheter per pakke?
Tjue (20) ferdigheter (per ASKILL-M002). For koblinger er grensen 10 per pakke.
Kan kompetanser henvise til koblingsverktøy i samme pakke?
Ja, og det burde de. Nevn verktøyene eksplisitt i SKILL.md-arbeidsflyten (for eksempel, "Bruk search_case_law-verktøyet til å ..."). Agenten kobler disse til under kjøring.
Kan programtilleggets verktøy ta imot filer fra arbeidsområdet i Cowork?
Ja. Deklarer verktøyparameteren med contentEncoding: base64, så løser Cowork brukerens arbeidsområdefil til base64-innhold før den kaller serveren din. Modellen sender filbaner, ikke filinnhold, slik at store filer ikke opptar plass i modellens kontekst. For detaljer om erklæringer og begrensninger kan du lese mer i Godta filer fra Cowork-arbeidsområdet.
Hvordan genererer jeg en deterministisk GUID for pakken min?
wiqd plugin create genererer og fester app-ID-en for deg. Konverteringsskriptet bruker UUID v5 (SHA-1-basert) fra plugin-navnet ditt, så å kjøre konverteringen to ganger gir samme GUID. For manuell emballasje, bruk en hvilken som helst GUID-generator. Sørg for å holde den stabil på tvers av versjoner.
Hvilken manifestversjon bør jeg sikte mot?
Mål 1,29 hvis du bygger med wiqd, som låser den versjonen for deg. I 1.29 inneholder agentConnectors[] oppføringer bare URL-er, og mcpToolDescription er valgfri. De håndskrevne eksemplene i denne artikkelen bruker 1.28, der mcpToolDescription kreves, og filen det refererer til må være i ZIP-filen.
atk import openplugin bruker UUID v5 (SHA-1-basert) fra plugin-navnet ditt. Å kjøre importen to ganger gir samme GUID. Hvis du vil angi dine egne, oppgir du --app-id. For manuell emballasje, bruk en hvilken som helst GUID-generator. Sørg for å holde den stabil på tvers av versjoner.