Bygg programtillegg for Copilot Cowork

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:

  1. Installer CLI (krever versjon 1.1.12 eller nyere):

    npm install -g @microsoft/m365agentstoolkit-cli
    
  2. Kontroller versjonen:

    atk --version
    
  3. Importer 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 name i frontmatter. Dette misforholdet er den vanligste årsaken til feil med ferdigheter.
  • Feltene i programtilleggoppføringer description bø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.md teller 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_price ikke getData
  • 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 OAuthPluginVault eller Dynamic Client Registration i stedet, eller gjør et endepunkt tilgjengelig som godtar None.

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:

  1. Installere @microsoft/m365agentstoolkit-cli fra npm:

    npm install -g @microsoft/m365agentstoolkit-cli
    
  2. Kontroller installasjonen ved å kjøre:

    atk --version
    
  3. Autentiser med Microsoft 365-jobbkontoen din:

    atk auth login
    
  4. Logg på jobbkontoen din og installer agentpakken. Bytt ut filstien med plasseringen til ZIP-pakken:

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

    En vellykket installasjon returnerer utdata som inneholder en TitleId og AppId for kontoen din.

  5. 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:

  1. Åpne >Administrer apper>Last opp egendefinert app.
  2. Velg ellipseknappen (...) >Legg til agent.
  3. Last opp filen til .zip-pakken.
  4. Å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_law til ...»
  • 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.md filer. Bruk agentConnectors med 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-Agent er til stede i hver forespørsel, inkludert tools/list og tools/call. Hvis du styrer eller tilordner per forespørsel, bruk denne toppteksten.
  • clientInfosendes bare under initialize-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.