Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Microsoft Copilot Cowork podporuje rozšiřitelnost prostřednictvím balíčků aplikací M365 – stejný distribuční mechanismus, který používají aplikace Teams, agenti Copilotu a doplňky Office. Cowork můžete rozšířit o:
- Dovednosti: Pracovní postupy založené na pokynech, které učí společnost Cowork novým odborným znalostem, jako je finanční analýza, právní výzkum nebo pracovní postupy v oblasti lidských zdrojů.
- Konektory: Vzdálené servery, které umožňují Coworku přístup k externím zdrojům dat a rozhraním API.
Oba jsou součástí standardního balíčku aplikací Microsoft 365 a distribuovány prostřednictvím obchodu Microsoft 365 App Store.
Important
Informační bariéry Microsoft Purview (IB) se v současné době nepodporují pro správu a sdílení modulů plug-in nebo dovedností. V tenantech, ve kterých je IB povolená, se nahrávání vložených souborů znalostní báze blokuje na úrovni tenanta. Tím se zabrání nahrání nebo publikování dotčených pluginů a dovedností.
Společnost Microsoft nevytváří ani neudržuje žádný trvalý index, znalostní graf (včetně Microsoft Graphu) ani databázi, která by obsahovala obsah ISV, ať už procházením, scrapingem, harvestingem, hromadným exportem, ingestováním nebo jakoukoli jinou metodou (prostřednictvím rozhraní API, serveru MCP nebo jinak). Microsoft může obsah ISV dočasně zpracovat, aby reagoval na dotaz uživatele v reálném čase, ale nezachovává obsah ISV nad rámec doby trvání této relace. Na základě písemné žádosti ISV Microsoft do 10 pracovních dnů vymaže veškerý obsah ISV, který má k dispozici nebo pod kontrolou, a jeho vymazání písemně potvrdí. Další informace o ochraně podnikových dat v Microsoft Copilot a Microsoft Copilot Chat.
Co budete vytvářet
Zásuvný modul Cowork je balíček, který .zip obsahuje:
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
Dovednosti používají open-standard Agent Skills – stejný formát, který podporuje Claude Code, Visual Studio Code Copilot, Gemini CLI, Cursor, JetBrains Junie a více než 30 dalších nástrojů AI.
Výběr výchozího bodu
Vytvořte si plugin pomocí wiqd CLI. Rozhraní příkazového řádku vygeneruje balíček a udržuje manifest.json a složky vašich skillů v synchronizovaném stavu. Před nahráním také spustí vlastní ověřovací pravidla platformy a pak nasadí a sdílí výsledek. CLI je v předběžné verzi, takže jeho příkazy a generovaný výstup se mohou před obecnou dostupností změnit. Všechno, co vygeneruje, je běžný balíček aplikace Microsoft 365, takže soubory můžete rovnou otevírat, upravovat a verzovat.
Balíček sestavte ručně pouze tehdy, když nemůžete nainstalovat nástroje nebo když vytváříte vlastní pipeline pro vytváření balíčků. V takovém případě je právě reference k formátu balíčku v tomto článku to, co potřebujete — přesně popisuje, co wiqd vytváří.
| Výchozí bod | Udělej to | Čas do prvního balíčku |
|---|---|---|
| Začínám od nuly | Vytvořit plugin ve wiqd | asi 10 minut |
| Už mám plugin Claude Code | Převeďte ho | asi 5 minut |
| Nemůžu nainstalovat tooling nebo píšu si vlastní skripty pro balení | Sestavit balíček ručně | asi 30 minut |
Vytvořte modul plug-in pomocí wiqd
Rozhraní příkazového řádku wiqd má stejný životní cyklus, jaký jinak provádíte ručně – vytvářet, přidávat schopnosti, ověřovat, zřizovat, balit a sdílet. Balíček, který vytvoří, už splňuje ověřovací pravidla v tomto článku.
Krok 1: Nainstalujte wiqd a přihlaste se
Nainstalujte wiqd CLI podle instalační příručky wiqd, která pokrývá Windows, macOS a Linux. Pak se přihlaste k tenantovi Microsoftu 365, pro nějž vyvíjíte, protože zřizování i sdílení obojí pracuje s vaším tenantem:
wiqd auth login --interactive
Instalační program také zaregistruje modul plug-in rozhraní příkazového řádku GitHub Copilot, abyste mohli stejný životní cyklus řídit pomocí konverzačního rozhraní. Můžete například říct Vytvořte samostatný plugin s názvem Triage Helper nebo Ověřte můj plugin. Konverzační cesta spustí stejné příkazy jako tento oddíl. Příkazy můžete použít přímo při skriptování kanálu nebo pokud chcete reprodukovatelnou neinteraktivní automatizaci.
Krok 2: Vytvořit základní strukturu pluginu a přidat možnosti
Vytvořte kontejner pluginu a pak přidejte jakékoli funkce, které potřebujete, v libovolné kombinaci:
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 lešení appPackage/skills/contract-analysis/SKILL.md a zaregistruje jej v agentSkills[].
add connector zapíše položku agentConnectors[]. Oba příkazy před zápisem uplatňují omezení platformy pro názvy a velikost, takže se neshoda názvu složky ani příliš dlouhý název id nikdy nezapíší do manifestu.
Do vygenerované SKILL.mdtabulky napište logiku svých dovedností. Pole v hlavičce metadat, model postupného načítání a limity doprovodných souborů jsou stejné jako ty, které jsou popsány v Krok 1: Vytvoření první dovednosti a Krok 2: Přidání referenčních materiálů (volitelné).
Important
wiqd plugin create připne balíček na manifestVersion: "1.29", zatímco ručně vytvořené příklady v tomto článku používají 1.28. Rozdíl je u konektorů důležitý. Při hodnotě 1.28 je mcpToolDescription povinné a soubor, který označuje, musí být v archivu ZIP. Ve verzi 1.29 jsou položky agentConnectors[] pouze adresy URL a mcpToolDescription je volitelné, takže balíček vygenerovaný wiqd nikdy nenarazí na toto selhání nahrávání. WIQD zatím nepodporuje ověřování konektorů – nakonfigurujte ho přímo, jak je popsáno v tématu Podporované typy ověřování.
Krok 3: Ověřujte během sestavování
Průběžně ověřujte místo sestavování balíčku a doufání, že nahrání proběhne úspěšně:
wiqd plugin validate
wiqd plugin validate --mode deep
validate je offline statická kontrola rozhraní deklarativního agenta. Plugin obsahující pouze dovednosti nebo pouze konektory touto kontrolou projde, protože v něm není co kontrolovat, což je očekávané — jde o kontrolu vaší smyčky sestavení, nikoli o úplné pokrytí.
validate --mode deep nejprve zabalí modul plug-in a pak ověří vytvořený .zip ve stejné knihovně pro ověřování aplikací, kterou používá nahrávání. To je místo, kde se objevují kódy ASKILL a pravidla konektorů.
Krok 4: Zřízení, balení a sdílení
Spusťte tyto tři příkazy v uvedeném pořadí:
wiqd plugin provision
wiqd plugin package
wiqd plugin share --scope users --email you@contoso.com
Spusťte provision jako první, protože zapisuje soubor prostředí, na kterém jsou závislé package i share. Pomocí --scope users můžete sdílet obsah s lidmi, které uvedete, nebo pomocí --scope tenant se všemi ve vaší organizaci. V každém případě se plugin zobrazí v Sdílené se mnou v části Cowork>Zdroje a dovednosti>Pluginy. Pokud ho má správce místo toho uvést v sekci Discover, nahraje balíček. Další informace najdete v kroku 8: Publikujte do svého tenanta. Pokud chcete odebrat to, co vytvořil provision, spusťte wiqd plugin delete --env local --yes.
Odeslání do veřejného obchodu je v Partner Center stále ruční proces. Další informace najdete v kroku 9: Publikování pro veřejnost.
Přenést plugin na jiného hostitele
Chcete-li použít své Skills v Claude Code, Cursor nebo jakémkoli jiném hostiteli Agent Skills, exportujte projekt místo ručního kopírování složek:
wiqd plugin export --format claude-plugin
export má jako výchozí hodnotu --format open-plugin a přijímá také cursor-plugin. Zapíše nekomprimovaný adresář pod <path>/export/<format>.
Importovat existující plugin
Pokud již máte plugin Claude Code s dovednostmi a servery MCP, máte dva způsoby převodu. Cesta, kterou zvolíte, závisí na tom, zda plánujete pokračovat ve vývoji pluginu, nebo jen vydat to, co máte.
| Cíl | Použít |
|---|---|
| Pokračujte ve vývoji, ověřování a publikování modulu plug-in pro Microsoft 365 | wiqd plugin import |
Vytvořte publikovatelný výstup .zip z existujícího pluginu Claude hned |
Převodní skript |
Import pomocí wiqd
wiqd plugin import rozpozná zdroj pluginu Open Plugin, pluginu Claude nebo pluginu Cursor a vytvoří z něj projekt pluginu wiqd. Importovaný modul plug-in prochází stejným životním cyklem jako modul plug-in, který jste vytvořili pomocí wiqd plugin create:
wiqd plugin import --path ./my-claude-plugin --privacy-url https://contoso.com/privacy --terms-url https://contoso.com/terms
--privacy-url a --terms-url jsou vyžadovány pouze při prvním importu plug-inu. Pokud zdroj pocházel z dřívějšího wiqd plugin export, metadata zpáteční cesty je již obsahují.
Important
Importovaný projekt podporuje jen tu část životního cyklu, která je určena pouze ke čtení – wiqd plugin validate, show a list. Zatím se nedá zabalit, zprovoznit ani sdílet, protože import nevytvoří strukturu souborů pro místní nasazení, které tyto kroky vyžadují. Jedná se o sledovanou mezeru v pokrytí. Aktuální stav najdete v referenčních informacích k rozhraní příkazového řádku wiqd. Pokud dnes potřebujete publikovatelný balíček, použijte převodní skript.
Převeďte pomocí převodního skriptu
Převodní skript převádí plugin Claude přímo na balíček M365 připravený k publikování:
Nainstalujte rozhraní příkazového řádku (vyžaduje verzi 1.1.12 nebo novější):
npm install -g @microsoft/m365agentstoolkit-cliOvěřte verzi:
atk --versionImportujte svůj plugin:
atk import openplugin --path ./my-claude-plugin --output ./my-plugin-project \ --privacy-url https://contoso.com/privacy \ --terms-url https://contoso.com/terms
Příkaz přečte adresář .claude-plugin/plugin.json (nebo .cursor-plugin/plugin.json) vašeho modulu plug-in, .mcp.json a adresář skills/ a poté vygeneruje projekt sady nástrojů pro agenty obsahující appPackage/manifest.json, vaše dovednosti a vygenerované ikony.
Musíte zahrnout --privacy-url a --terms-url protože manifesty modulu plug-in nemají ekvivalentní pole a manifest Microsoft 365 vyžaduje obojí.
Note
atk import openplugin Vyhledá manifest pluginu v adresáři s názvem začínajícím tečkou—.claude-plugin/plugin.json, .cursor-plugin/plugin.json nebo .plugin/plugin.json—vedle .mcp.json. Specifikace Agent Plugins 1.0.0 umisťuje manifest do umístění plugin.json a konfiguraci MCP na mcp.json. Chcete-li importovat modul plug-in, který dodržuje rozložení 1.0.0, přesuňte jeho manifest do .plugin/plugin.json a přejmenujte mcp.json na .mcp.json.
Zabalte výsledek do souboru pro nahrání .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
devPreview generuje manifest. Příklady manifestů v jiných částech tohoto článku jsou určeny pro schéma verze 1.28. Pokud publikujete prostřednictvím kanálu, který vyžaduje verzi 1.28, aktualizujte manifestVersion a $schema v vygenerovaném appPackage/manifest.json.
Co se importuje
| Artefakt zásuvného modulu | Ekvivalent M365 | Notes |
|---|---|---|
.claude-plugin/plugin.json |
manifest.json |
Namapovaná pole názvu, popisu a vývojáře; automaticky vygenerovaný identifikátor GUID (deterministický UUID v5) |
skills/*/SKILL.md |
agentSkills[] položek + skills/ složek |
Doslovně zkopírované – identický formát |
.mcp.json servery |
agentConnectors[] Položky |
Automaticky zjištěna adresa URL a typ ověřování. |
color.png / outline.png |
Ikony v balíčku | Používá se, pokud je k dispozici; Zástupné symboly vygenerované, pokud chybí |
Important
Pro každý konektor importovaný z .mcp.json se vygeneruje zástupný symbol authorization.referenceId odvozený od modulu plug-in a názvu serveru. Před publikováním ho nahraďte skutečným ID registrace klienta OAuth. Další informace najdete v tématu Podporované typy ověřování.
Co není převedeno
Následující funkce modulu plug-in Claude zatím nejsou v manifestu Microsoft 365 podporované:
| Funkce pluginu Claude | Status |
|---|---|
commands/ (příkazy se lomítkem) |
Zatím není podporováno. |
agents/ (podřízení agenti) |
Zatím není podporováno. |
hooks/ (obslužné procedury událostí) |
Zatím není podporováno. |
settings.json |
Nelze použít |
bin/ (spustitelné soubory) |
Nelze použít |
Možnosti importu
| Option | Description |
|---|---|
--path, -p |
Required. Adresář modulu plug-in obsahující .claude-plugin/plugin.json, .cursor-plugin/plugin.jsonnebo .plugin/plugin.json |
--output, -o |
Cílová složka projektu (výchozí: ./<plugin-name>) |
--privacy-url |
developer.privacyUrl pro vygenerovaný soubor manifestu |
--terms-url |
developer.termsOfUseUrl pro vygenerovaný manifest |
--website-url |
developer.websiteUrl. Použije se homepage, pak author.url |
--app-id |
Přepište deterministický identifikátor UUID v5 vygenerovaný pro manifest id |
--default-auth-type |
Auto (výchozí), None, OAuthPluginVaultnebo ApiKeyPluginVault |
Automatické zjištění typu ověřování:
| Source | Výchozí typ ověřování | Reason |
|---|---|---|
| Externí adresy URL protokolu HTTPS | OAuthPluginVault |
Většina vzdálených rozhraní API potřebuje autentizaci |
localhost a adresy URL jiné než HTTPS |
None |
Lokální vývojové servery |
Pokud automatické rozpoznání neodpovídá vašemu nastavení, použijte --default-auth-type k jeho přepsání.
Export zpět do adresáře pluginů
Chcete-li přesunout projektu sady Agents Toolkit zpět do adresáře modulu plug-in – například za účelem synchronizace modulu plug-in Claude Code a balíčku Cowork – použijte atk export openplugin:
atk export openplugin --path ./my-plugin-project \
--output ./my-claude-plugin --manifest-kind claude-plugin
| Option | Description |
|---|---|
--path, -p |
Required. Složka projektu Agents Toolkit obsahující appPackage/manifest.json |
--output, -o |
Cílový adresář pluginu (výchozí: ./<plugin-name>-openplugin) |
--manifest-kind |
open-plugin (výchozí, zapíše .plugin/plugin.json), claude-pluginnebo cursor-plugin |
Export zapíše x-microsoft-365-agents-toolkit blok do vygenerovaného plugin.json. Tento blok nese manifest id, adresy URL pro vývojáře a nastavení konektoru, takže lze později provést obousměrný převod pomocí atk import openplugin bez nutnosti --privacy-url nebo --terms-url znovu.
Note
Blok x-microsoft-365-agents-toolkit je specifický pro Agents Toolkit a výchozí open-plugin druh zapisuje manifest do .plugin/plugin.json.
Agent Plugins 1.0.0 používá kořenový element plugin.json a nese data specifická pro klienta pod klíčem extensions s oborem názvů reverzní domény, takže ostatní klienti tento blok spíše ignorují, než aby na něj reagovali. Pokud je vaším cílem Claude kód nebo kurzor, použijte --manifest-kind claude-plugin or cursor-plugin.
Legacy: Konverzní skript PowerShellu
Předtím, než atk podporoval import pluginů, se ke konverzi používal skript PowerShellu pouze pro Windows, který je stále k dispozici jako skript pro konverzi:
.\Convert-ClaudePluginToMOS3.ps1 -PluginPath ./my-claude-plugin -OutputPath ./output
Místo toho použijte atk import openplugin. Je multiplatformní, podporuje zdroje Cursor i Claude Code a může exportovat zpět do adresáře pluginů.
Sestavte balíček ručně
Tato část je referencí k formátu balíčku: přesně popisuje, co Build a plugin with wiqd generuje, pole po poli. Projděte si tento postup od začátku do konce, pokud nemůžete nainstalovat potřebné nástroje nebo si vytváříte vlastní pipeline pro vytváření balíčků. Použijte jej jako referenční materiál, když potřebujete pochopit vygenerovaný balíček nebo jej ladit.
Krok 1: Vytvořte si svou první dovednost
Dovednost je složka, která obsahuje soubor SKILL.md. Vytvořte následující strukturu složek:
my-extension/
└── skills/
└── contract-analysis/
└── SKILL.md
Napište SKILL.md pomocí YAML frontmatteru a textu Markdownu:
---
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 |
Pole frontmatter v SKILL.md
Povinná pole:
| Pole | Constraints | Description |
|---|---|---|
name |
1–64 znaků, kebab-case | Identifikátor dovednosti - musí se přesně shodovat s názvem složky |
description |
1–1024 znaků | Kdy použít tuto dovednost – uveďte spouštěcí fráze |
Important
- Název složky se musí shodovat s polem
namev frontmatteru. Tento nesoulad je nejčastější příčinou selhání dovedností. - Pole výpisu
descriptionpluginů by neměla obsahovat výzvy k akci, které uživatele nasměrují na externí tržiště, aby si mohli koupit předplatné.
| Cesta ke složce |
name Pole |
Je to platné? | Proč |
|---|---|---|---|
skills/contract-analysis/SKILL.md |
contract-analysis |
Yes | Složka a název se shodují |
skills/contract-analysis/SKILL.md |
ContractAnalysis |
No | Název používá PascalCase místo toho, aby odpovídal složce. |
skills/my-skill/SKILL.md |
contract-analysis |
No | Složka je my-skill , ale název je contract-analysis |
Pravidla pojmenovávání (kebab-case): Používejte pouze malá alfanumerická písmena a spojovníky. Nepoužívejte po sobě jdoucí pomlčky ani pomlčky na začátku ani na konci.
| Example | Je to platné? | Issue |
|---|---|---|
bond-relative-value |
Yes | Malá písmena s pomlčkami |
fx-carry-trade |
Yes | Malá písmena se spojovníky |
email |
Yes | Jedno slovo, pomlčky nejsou potřeba |
Bond_Relative_Value |
No | Podtržítka a velká písmena |
--my-skill-- |
No | Počáteční a koncové spojovníky |
my--skill |
No | Po sobě jdoucí pomlčky |
Krok 2: Přidejte referenční materiály (volitelné)
Pro komplexní dovednosti ponechte hlavní SKILL.md co nejjednodušší a přesuňte podrobný obsah do podadresářů. Tyto soubory navíc jsou doprovodné soubory. Dovednost načte, když je to potřeba.
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
Limity doprovodných souborů
Každá dovednost může obsahovat až 20 doprovodných souborů (jakýkoli soubor jiný než SKILL.md). Pro každou dovednost platí následující limity:
| Limit | Value |
|---|---|
| Maximální doprovodné soubory | 20 |
| Maximální velikost jednoho doprovodného souboru | 5 megabajtů |
| Maximální celková velikost společníka | 10 MB |
| Vypršení časového limitu stahování (všichni společníci) | 15 sekund |
Pravidla pro doprovodné soubory
Cesty k doprovodným souborům musí splňovat tato pravidla:
- Používejte pouze relativní cesty (ne absolutní).
- Žádný průchod adresářovou strukturou (
..segmenty). - V názvech souborů se nevyskytují zpětná lomítka ani bajty null.
- Žádné skryté soubory (názvy začínající na
.). - Žádné vyhrazené názvy systému Windows (
CON,PRN,AUX,COM1,NUL–COM9,LPT1–LPT9). - Samotný soubor
SKILL.mdse nepočítá jako doprovodný soubor. - Názvy souborů musí obsahovat bezpečné znaky: alfanumerické znaky, pomlčky, podtržítka, tečky, mezery a
!.
Aby bylo kontextové okno efektivní, systém načte dovednosti ve třech vrstvách:
| Vrstva | Po načtení | Cílová velikost |
|---|---|---|
Frontmatter (name + description) |
Vždy - při spuštění | ~100 žetonů |
SKILL.md text zprávy |
Při aktivaci schopnosti | Méně než 5 000 tokenů (1 500–2 000 slov) |
Odkazy (references/) |
Na vyžádání agentem | Unlimited |
Skripty (scripts/) |
Spuštěno, nenačteno do kontextu | N/A |
Explicitně SKILL.md odkazujte na podadresáře, aby agent věděl, že existují:
## 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
Krok 3: Přidejte konektor (volitelné)
Pokud vaše rozšíření potřebuje přístup k externím datům, přidejte vzdálený server MCP. Tento krok je volitelný. Balíčky obsahující jen dovednosti jsou vhodné pro pracovní postupy založené na výzvách.
Tip
Pokud váš server řídí viditelnost nástroje podle klienta nebo přiřazuje příchozí provoz, přejděte na Identifikace provozu Coworku na vašem serveru k identitě klienta, kterou Cowork předává.
Note
Vlastní moduly plug-in nejsou v aplikaci Cowork na mobilním zařízení podporovány.
Požadavky konektoru
| Requirement | Detaily |
|---|---|
| Transport | Streamovatelný HTTP (vyžaduje se HTTPS, TLS 1.2+) |
| Protocol | Formát zprávy JSON-RPC 2.0 |
| Objevování nástrojů | Podpora pro tools/list dynamické zjišťování (doporučeno) |
| Spouštění nástroje | Podpora tools/call pro volání |
| Availability | Pro aplikace publikované ve Store se doporučuje SLA s dostupností 99,9 %. |
| Doba odezvy | Méně než 30 sekund na jedno volání nástroje |
Pokyny pro návrh nástrojů
-
Jeden nástroj na akci pro malá rozhraní API (méně než 15 operací):
search_case_law,get_ruling,cite_precedent -
Hledání + spouštění velkých rozhraní API (50+ operací):
search_actions+execute_action -
Popisné názvy:
get_bond_pricenegetData - Schémata s bohatými vstupy: Zahrňte popis každého parametru – to je to, co agent čte
- Strukturovaný výstup: Vrátí JSON, který může agent naformátovat pro uživatele
-
Vstupy souborů: Pokud chcete přijmout soubor z pracovního prostoru uživatele, deklarujte parametr pomocí
contentEncoding: base64. Další informace najdete v článku Přijímat soubory z pracovního prostoru Cowork.
Popište nástroje konektoru (mcpToolDescription)
Spojnice remoteMcpServer může volitelně obsahovat mcpToolDescription objekt. Pokud je k dispozici, její vnořená file vlastnost odkazuje na soubor JSON s popisem nástroje, který zabalíte uvnitř .zip a odkazujete na něj relativní cestou z kořene balíčku. Cowork dynamicky zjišťuje nástroje z vašeho MCP serveru a nepoužívá tento soubor, i když je přítomen.
"remoteMcpServer": {
"mcpServerUrl": "https://api.contoso.com/legal/mcp",
"mcpToolDescription": {
"file": "./tools/contoso-legal-tools.json"
},
"authorization": {
"type": "OAuthPluginVault",
"referenceId": "A1bC2dE3fH4iJ5kL6mN7oP8qR9sT0u"
}
}
Pokud zahrnete mcpToolDescription, odkazovaný soubor (například tools/contoso-legal-tools.json) popisuje nástroje, které konektor zpřístupňuje, a musí být přítomen v balíčku ZIP. Při zabalení modulu plug-in jej zahrňte vedle své manifest.json složky a skills/ složka.
Tip
Tento požadavek platí pro manifest verze 1.28. Balíčky, které generuje wiqd plugin create, cílí na verzi 1.29, v níž položky agentConnectors[] obsahují pouze adresu URL, mcpToolDescription je volitelné a není tu žádný soubor s popisem nástroje, na který by se dalo zapomenout.
Podporované typy ověřování
| Typ ověřování | Kdy ho použít | Uživatelské prostředí |
|---|---|---|
None |
Veřejná nebo anonymní rozhraní API, interní služby | Transparentní – žádná výzva k ověření |
OAuthPluginVault |
Rozhraní API OAuth 2.0 (doporučená pro produkční nasazení) | Uživatel dokončí souhlas s OAuth pouze jednou |
ApiKeyPluginVault |
Služby založené na klíčích API | Uživatel zadá klíč pouze jednou |
Note
- Podpora ověřování pomocí klíče API zatím není v aplikaci Cowork dostupná.
- Pokud váš server MCP vyžaduje klíč API, použijte
OAuthPluginVaultmísto toho nebo Dynamická registrace klienta nebo zpřístupněte koncový bod, který akceptujeNone.
Pro OAuthPluginVault a ApiKeyPluginVaultreferenceId odkazuje na přihlašovací údaje uložené v úložišti tokenů Microsoft Enterprise – tajné údaje se nikdy nezobrazují v souborech manifestu nebo skillů. Hodnota referenceId je ID registrace klienta OAuth, které vytvoříte při registraci klienta OAuth pomocí Agents Toolkit.
Important
Při registraci klienta OAuth nastavte možnost použití podle organizace na Jakákoli organizace Microsoft 365, aby váš modul plug-in fungoval napříč tenanty.
Ověřování MCP
Pokud chcete pro ověřování použít OAuth nebo ApiKey, podrobnosti o nastavení a konfiguraci najdete v článku Konfigurace ověřování pro moduly plug-in MCP a rozhraní API v agentech v Microsoftu 365 Copilot.
Dynamická registrace klienta
Pokud váš server MCP podporuje dynamickou registraci klienta (DCR), můžete vynechat konfiguraci authentication z definice konektoru a Cowork automaticky vytvoří klienta OAuth jménem vašeho modulu plug-in.
Note
Vynechání authentication konfigurace je podporované jenom v aplikaci Cowork. To není v Copilot Chat podporováno. Pokud váš modul plug-in musí fungovat také ve službě Copilot Chat, nakonfigurujte OAuthPluginVault ověřování, jak je popsáno v tématu Podporované typy ověřování.
Objekt můžete úplně vynechat authorization . Nakonfigurujte adresu URL serveru MCP a Cowork se postará o klienta OAuth:
"remoteMcpServer": {
"mcpServerUrl": "https://api.contoso.com/legal/mcp"
}
Krok 4: Vytvoření manifestu
V kořenovém adresáři balíčku vytvořte manifest.json. Příklad používá manifest verze 1.28; wiqd plugin create místo toho připne hodnotu 1.29, kde položky konektoru obsahují pouze adresy URL.
{
"$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" }
]
}
Pokud chcete přidat konektor, musíte zahrnout 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"
}
}
}
}
]
}
V konfiguraci konektoru by referenceId mělo být ID registrace OAuth. Pokud zahrnete mcpToolDescription, jeho file musí odkazovat na soubor JSON s popisem nástroje, který je součástí balíčku ZIP.
Important
Schéma manifestu v1.28 je striktní: nastavuje v kořeni additionalProperties: false, takže všechna pole, která nejsou definovaná ve schématu, se odmítnou. Pole, která jsou platná ve standardních manifestech aplikace Teams – například packageName – způsobí, že nahrávání selže s chybou, jako je Property 'packageName' has not been defined and the schema does not allow additional properties.. Zahrňte pouze zde uvedená pole.
Krok 5: Přidání ikon
Vytvořte dvě ikony PNG:
| Icon | Velikost | Purpose |
|---|---|---|
color.png |
192×192 px | Plnobarevná ikona aplikace zobrazená ve Store a seznamu aplikací |
outline.png |
32×32 px | Jednobarevná obrysová ikona pro kompaktní zobrazení |
Pokud ještě ikony nemáte, atk import openplugin vygeneruje jednobarevné zástupné prvky. Před odesláním do Storu je nahraďte.
Krok 6: Balení
Vytvořte soubor ZIP s veškerým obsahem na kořenové úrovni.
wiqd plugin package( Vytvoří stejnou strukturu po 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
Pokud konektor obsahuje mcpToolDescription, zahrňte soubor JSON s popisem nástroje, na který konektor odkazuje. Balíčky, které nepoužívají mcpToolDescription, včetně balíčků pouze dovedností, nepotřebují tools/ složku.
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/
Použití sady nástrojů Microsoft 365 Agents Toolkit
atk package --manifest-file ./appPackage/manifest.json \
--output-package-file ./appPackage/build/appPackage.zip \
--output-folder ./appPackage/build
Krok 7: Otestujte
Pokud chcete aplikaci otestovat, nahrajte balíček aplikace do Teams, jak je popsáno v části Nahrání aplikace do Teams.
Pokud jste modul plug-in vytvořili pomocí wiqd, spusťte wiqd plugin provision ho – modul plug-in zaregistruje ve vašem tenantovi za vás. Pro osobní testování ručně sestaveného balíčku nahrajte aplikaci bokem pomocí rozhraní příkazového řádku sady Microsoft 365 Agents Toolkit:
Nainstalujte
@microsoft/m365agentstoolkit-cliznpm:npm install -g @microsoft/m365agentstoolkit-cliInstalaci ověřte spuštěním následujícího příkazu:
atk --versionOvěřte se pomocí svého pracovního účtu Microsoft 365:
atk auth loginPřihlaste se ke svému pracovnímu účtu a nainstalujte si balíček agenta. Nahraďte cestu k souboru cestou k umístění balíčku ZIP:
atk install --file-path "C:/Users/myuser/myPackage.zip" --scope PersonalÚspěšná instalace vrátí výstup, který obsahuje
TitleIdaAppIdpro váš účet.Tato ID si uložte pro pozdější použití při aktualizaci nebo odinstalaci.
Další informace najdete v rozhraní příkazového řádku sady nástrojů Microsoft 365 Agents.
Krok 8: Publikování do tenanta
Nahrajte balíček do Centra pro správu a zařadíte modul plug-in do sekce Zjistit , kde ho může najít kdokoli z vaší organizace:
- Otevřete >Správa aplikací>Nahrajte vlastní aplikaci.
- Vyberte tlačítko se třemi tečkami (...) >Přidat agenta.
- Nahrajte svůj
.zipbalíček. - Otevřete Cowork>>. Váš plugin se zobrazí v sekci Discover.
wiqd plugin share modul plug-in umístí do složky Sdílené se mnou, nikoli do složky Discover. Použijte ho pro testování a cílené nasazení u konkrétních lidí. Nahrání do Centra pro správu způsobí, že se modul plug-in zobrazí pro zjišťování.
Krok 9: Publikovat pro veřejnost
V případě modulů plug-in určených k veřejné distribuci odešlete modul plug-in do Microsoft 365 App Store prostřednictvím Partner Center. Další informace najdete v tématu Publikování agentů pro Microsoft 365 Copilot.
Otestujte konektor proti místnímu serveru MCP
Konektory vyžadují HTTPS mcpServerUrl. Pokud chcete otestovat server běžící na vašem počítači, musíte ho zpřístupnit prostřednictvím veřejné adresy URL HTTPS.
Vývojové tunely poskytují přenosovou službu, která za vás ukončuje TLS.
devtunnel port create <tunnel> -p <port> --protocol http
Important
Použít --protocol http, ne https. Tento --protocol příznak popisuje místní službu, na kterou tunel přeposílá, nikoli adresu URL veřejného tunelu. Většina lokálních MCP serverů hovoří prostým HTTP, takže pokud nastavíte --protocol https , zatímco váš server obsluhuje HTTP, každý požadavek tunelem vrátí chybu 502 . Relé zajišťuje ukončení TLS a poskytuje veřejnou adresu URL přes protokol HTTPS bez ohledu na tento příznak.
Troubleshooting
| Symptom | Cause | Opravit |
|---|---|---|
Každý tunelový požadavek se vrátí 502 a místní server komunikuje přes HTTP |
devtunnel port create byl spuštěn pomocí --protocol https |
Opětovné vytvoření portu pomocí --protocol http |
Požadavky tunelového propojení se v macOS vracejí 502 , i když je místní server spuštěný |
Server je navázán na 0.0.0.0 (pouze IPv4), ale tunel vytočí localhost, což se nejprve přeloží na adresu ::1 (IPv6) |
Navažte server na ::, aby přijímal připojení IPv4 i IPv6 |
Nahrání se nezdaří kvůli Property '<field>' has not been defined and the schema does not allow additional properties |
Manifest obsahuje pole, které schéma v1.28 nepovoluje (například packageName) |
Odeberte pole; schéma v1.28 používá additionalProperties: false |
Vzory balení
Zvolte vzor, který se hodí k vašemu rozšíření:
Jen dovednosti (bez konektoru)
Nejvhodnější řešení pro pracovní postupy založené na promptech, analýzu dokumentů a pomoc při psaní.
my-skills-pack.zip
├── manifest.json # agentSkills only, no agentConnectors
├── color.png
├── outline.png
└── skills/
├── skill-one/SKILL.md
└── skill-two/SKILL.md
Dovednosti + vzdálené připojení
Nejvhodnější řešení pro analýzu dat, integraci rozhraní API a podnikové systémy.
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
Pouze konektor (žádné vlastní dovednosti)
Tuto možnost použijte pro zdroje dat, které už integrované dovednosti aplikace Cowork můžou používat.
my-connector.zip
├── manifest.json # agentConnectors only, no agentSkills
├── color.png
├── outline.png
└── tools/ # Tool-description file(s) for mcpToolDescription (optional)
└── my-connector.json
Importovaný plugin Claude Code nebo Cursor
Tuto možnost použijte pro existující moduly plug-in ekosystému Claude, které cílí na Cowork. Pokud chcete pokračovat ve vývoji modulu plug-in v Microsoft 365, importujte ho:
wiqd plugin import --path ./claude-plugin --privacy-url https://contoso.com/privacy --terms-url https://contoso.com/terms
Chcete-li ze zásuvného modulu v jeho současné podobě vytvořit publikovatelný .zip, použijte převodní skript:
atk import openplugin --path ./claude-plugin --output ./my-plugin-project \
--privacy-url https://contoso.com/privacy \
--terms-url https://contoso.com/terms
Osvědčené postupy pro tvorbu dovedností
Postupujte podle těchto pokynů k vytváření dovedností, které se spolehlivě aktivují a přinášejí konzistentní výsledky.
Psaní efektivních popisů
Pole description určuje, kdy agent aktivuje váš skill. Buďte konkrétní:
# 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.
Napište efektivní pracovní postupy
- V popisu buďte konkrétní. Zahrňte spouštěcí fráze: "Použijte, když uživatel požádá o..." Tímto popisem se agent rozhoduje, kterou dovednost aktivovat.
- Uspořádat jako pracovní postup. Očíslujte kroky. Každý krok by měl být mapován na konkrétní akci (čtení souboru, volání nástroje, generování výstupu).
- Definujte výstupní formát. Zobrazit přesnou strukturu tabulky, seznamu nebo dokumentu, kterou uživatelé očekávají Tato definice výrazně zlepšuje konzistenci.
-
Odkázat na nástroje podle názvu Pokud vaše dovednost závisí na nástrojích konektoru, uveďte je výslovně: „Použijte nástroj
search_case_lawk...“ -
Udržujte hlavní soubor SKILL.md stručný. Podrobnou referenční dokumentaci přesuňte do podadresáře
references/. Tělo dovednosti by mělo být pracovním postupem, ne encyklopedií.
Vyhněte se běžným chybám
-
Nevkládejte tajné údaje do souborů
SKILL.md. PoužijteagentConnectorspro ověřování přihlašovacích údajů rozhraní API. - Neduplikujte integrované dovednosti. Před sestavením zkontrolujte seznam integrovaných dovedností.
- Nedělejte dovednosti příliš obecné. „Dělat cokoli s právními dokumenty“ je horší než konkrétní dovednosti pro „analýzu smluv“, „extrakci doložek“ a „právní rešerši“.
- Nevkládejte napevno cesty k souborům ani systémové příkazy. Dovednosti by měly být přenositelné mezi prostředími.
-
Nedávejte všechno do SKILL.md. Pokud váš text přesahuje ~3 000 slov, přesuňte podrobný obsah do
references/.
Pravidla ověřování
Když odešlete balíček, platforma jej ověří na několika úrovních. Opravte tyto chyby před odesláním, abyste se vyhnuli zamítnutí.
Chcete-li je zachytit během sestavování místo při nahrávání, spusťte wiqd plugin validate --mode deep. Tento příkaz zabalí modul plug-in a spustí stejná pravidla místně. Další informace najdete v kroku 3: Ověřování při sestavování.
Ověření na úrovni manifestu
| Code | Rule | Severity |
|---|---|---|
| ASKILL-M001 |
folder je vyžadován v každé agentSkills položce |
Error |
| ASKILL-M002 |
agentSkills Pole může obsahovat až 20 položek |
Error |
| ASKILL-M003 |
folder cesta může mít až 256 znaků |
Error |
Ověření na úrovni balíčku
| Code | Rule | Běžné řešení | Severity |
|---|---|---|---|
| ASKILL-P001 | Složka, na kterou se odkazuje v manifestu, existuje v ZIP. | Kontrola struktury souboru ZIP | Error |
| ASKILL-P002 | Složka obsahuje SKILL.md soubor |
Přidat chybějící SKILL.md |
Error |
| ASKILL-P003 |
SKILL.md má platná metadata YAML mezi oddělovači --- |
Opravte syntaxi YAML | Error |
| ASKILL-P004 | Hlavička obsahuje pole name |
Přidat name: do frontmatter |
Error |
| ASKILL-P005 | Frontmatter obsahuje pole description |
Přidat description: do úvodních metadat |
Error |
| ASKILL-P006 |
name Odpovídá názvu složky (poslední segment cesty). |
Přejmenujte složku nebo opravte name: |
Error |
| ASKILL-P007 |
name je kebab-case |
Použijte my-skill, ne MySkill ani my_skill |
Error |
| ASKILL-P008 | V poli nejsou žádné duplicitní hodnoty folder |
Odebrání duplicit | Error |
Ověření konektoru
| Rule | Severity |
|---|---|
Každý konektor vyžaduje id a displayName |
Error |
Všechny hodnoty konektoru id musí být v manifestu jedinečné |
Error |
Přesně jeden z plugin nebo remoteMcpServer |
Error |
mcpServerUrl Musí se jednat o platnou adresu URL protokolu HTTPS |
Error |
Pokud mcpToolDescription je přítomen, musí jeho file existovat v souboru ZIP |
Error |
authorization.referenceId je povinný, pokud typ není None |
Error |
authorization.referenceId nesmí být přítomen, pokud je typ None |
Error |
Ověření doprovodného souboru
Portál ověřuje doprovodné soubory (referenční materiály, skripty a další soubory spolu s nimi SKILL.md) v době nahrávání a synchronizace:
| Rule | Severity |
|---|---|
Maximálně 20 doprovodných souborů pro každou dovednost (kromě SKILL.md) |
Error |
| Každý doprovodný soubor musí mít 5 MB nebo méně | Error |
| Celková velikost doprovodných souborů musí být 10 MB nebo méně na jednu dovednost | Error |
| Cesty k souborům musí být relativní (žádné absolutní cesty). | Error |
Žádné segmenty průchodu cestou (..) |
Error |
| V názvech souborů nesmí být zpětná lomítka ani bajty null. | Error |
Žádné skryté soubory (názvy začínající na .) |
Error |
Žádné vyhrazené názvy Windows (CON, PRN, AUX, NUL, COM1–COM9, LPT1–LPT9) |
Error |
V názvech souborů se musí používat jenom bezpečné znaky (alfanumerické znaky, pomlčky, podtržítka, tečky, mezery, !) |
Error |
Kompatibilita mezi platformami
Dovednosti používají otevřený standard Agent Skills. Stejné SKILL.md soubory fungují v několika nástrojích AI:
| Platform | Compatibility |
|---|---|
| Kód Claude | zcela stejný SKILL.md formát |
| Projekty Claude.ai | Full-skills lze nahrát jako projektové soubory |
| VS Code / GitHub Copilot | Dovednosti Full-Agent podporované v režimu agenta |
| Rozhraní příkazového řádku Gemini | Podporované dovednosti Full-Agent |
| JetBrains Junie | Podporované dovednosti Full-Agent |
| OpenAI kodex | Podporované dovednosti Full-Agent |
| Cursor | Podporované dovednosti Full-Agent |
Pokud rozvíjíte dovednosti pro Claude Code i Copilot Cowork, vytvořte plugin pomocí wiqd. Pak spusťte wiqd plugin export --format claude-plugin, čímž vytvoříte rozložení Claude Code. Pokud byste raději začali od struktury pluginu Claude Code – je to nadmnožina – rozložení je:
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)
Až budete připravení publikovat do Microsoft 365 App Store, přeneste ho do Microsoft 365, a to buď s wiqd plugin import, nebo pomocí převodního skriptu:
atk import openplugin --path ./my-plugin --output ./my-plugin-project \
--privacy-url https://contoso.com/privacy \
--terms-url https://contoso.com/terms
Správa anotací MCP a potvrzení
Copilot Cowork přečte standardní objekt MCP annotations v nástrojích, které váš server vrací z tools/list, a použije jej k rozhodnutí, zda volání nástroje vyžaduje potvrzení uživatele a jaký popisek se má zobrazit na výzvě.
Dostupná pole
| Pole | Typ | Účinek |
|---|---|---|
readOnlyHint |
bool |
false: Před spuštěním nástroje je vyžadováno potvrzení. |
destructiveHint |
bool |
true: Před spuštěním nástroje je vyžadováno potvrzení. |
title |
řetězec | Popisek čitelný člověkem zobrazený v potvrzovacím dialogu. Pokud chybí, použije se název nástroje jako záložní hodnota. |
Potvrzovací pravidla
Potvrzení je vyžadováno, pokud readOnlyHint == false nebo destructiveHint == true.
Všechny nástroje musí mít uvedené bezpečnostní poznámky. Nástroje bez poznámek jsou považovány za destruktivní a vyžadují potvrzení. Další informace najdete v referenčních informacích ke schématu MCP.
Příklady MCP
Destruktivní akce s přátelským štítkem:
{
"name": "send_email",
"description": "Send an email message.",
"annotations": {
"title": "Send Email",
"destructiveHint": true
},
"inputSchema": { ... }
}
Bezpečná operace čtení, která se spustí automaticky:
{
"name": "search_docs",
"annotations": {
"title": "Search Documents",
"readOnlyHint": true
}
}
Co je teď k dispozici
- Nástroje Microsoftu (Graph, Dataverse a další) podléhají vestavěné zásadě Coworku bez ohledu na poznámky.
- U serverů MCP jiných společností než Microsoft se potvrzení řízené anotacemi zavádí postupně. Nastavení nápověd nyní zajišťuje budoucí kompatibilitu a s postupným rozšiřováním nasazení se budou zobrazovat výzvy k potvrzení, aniž by byly nutné jakékoli změny na straně vývojáře.
Přijímat soubory z pracovního prostoru Cowork
Nástroj konektoru může jako vstup použít soubor z uživatelovy relace v Coworku — dokument, který uživatel přiložil, e-mailovou přílohu, kterou Cowork uložil, nebo soubor vytvořený v předchozím kroku. Deklarujte parametr pomocí standardního klíčového slova contentEncoding: base64 JSON Schema a Cowork se postará o zbytek. Není vyžadováno žádné rozšíření schématu specifické pro Microsoft a rozhraní API vašeho serveru se nemění.
Cowork soubor workspace zpracuje a zakóduje do base64 předtím, než zavolá váš server, takže se bajty souboru nikdy nedostanou do kontextu agenta. Agent vždy vidí a generuje pouze cesty k souborům pracovních prostorů.
Note
Nedávejte agentovi pokyn, aby soubor sám zakódoval do Base64 a vložil tento blob do volání nástroje. Tento přístup načte celý soubor do kontextu modelu a závisí na modelu, který blob přesně reprodukuje. Zdá se, že funguje na malých testovacích souborech a selhává na skutečných souborech.
Deklarujte parametr souboru
Vlastnost řetězce s contentEncoding: base64 je rozpoznána jako pole pro nahrání souboru:
{
"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"]
}
}
Pole takových řetězců je rovněž podporováno pro nástroje, které přijímají několik souborů:
"attachments": {
"type": "array",
"items": { "type": "string", "contentEncoding": "base64" },
"description": "Receipt images to attach to the expense line."
}
Co vidí makléř
U parametrů souboru deklarovaných na nejvyšší úrovni inputSchema.properties je Cowork ve schématu určeném pro model nahradí jediným polem direct_attachment_file_paths – stejným parametrem, který používají integrované nástroje Cowork, takže agent už ví, jak ho naplnit. Výše uvedené schéma se agentovi zobrazí jako:
{
"type": "object",
"properties": {
"direct_attachment_file_paths": {
"type": "array",
"items": { "type": "string" },
"description": "Workspace file paths to attach."
},
"jurisdiction": { "type": "string" }
}
}
Pokud váš nástroj deklaruje více než jeden parametr typu soubor na nejvyšší úrovni, všechny se sloučí do jediného pole direct_attachment_file_paths. Při volání Cowork rozepíše vyřešené soubory zpět do původních názvů parametrů v pořadí deklarací.
Parametry vnořeného souboru
Agent podporuje parametr typu soubor vnořený v objektu nebo v poli objektů. Agent tento parametr zpracovává odlišně: místo aby jej sbalil, agent jej přepíše na místě do řetězce cesty ve svém vlastním umístění. Tento přístup zachová přidružení mezi souborem a souvisejícími poli. Například získáte jednu stvrzenku na každý řádek výdajů:
"line_items": {
"type": "array",
"items": {
"type": "object",
"properties": {
"amount": { "type": "number" },
"receipt": { "type": "string", "contentEncoding": "base64" }
}
}
}
Agent vyplní line_items[].receipt cestou k pracovnímu prostoru a Cowork před přesměrováním volání vymění jednotlivé cesty přímo na místě za obsah base64.
Vnoření je procházeno do hloubky čtyř úrovní pod vrcholem inputSchema.
$ref Na odkazy se nepřechází – parametry souboru definujte v řádku, nikoli za $ref.
Co váš server obdrží
Váš server obdrží běžnou hodnotu tools/call s původními názvy parametrů naplněnými obsahem kódovaným v base64:
{
"method": "tools/call",
"params": {
"name": "analyze_contract",
"arguments": {
"document": "JVBERi0xLjQKJcfsj6IKNSAwIG9iago8PC9MZW5...",
"jurisdiction": "US"
}
}
}
Váš server nemusí vědět, že agent použil rozhraní založené na cestě, a nástroje, které nedeklarují contentEncoding: base64 parametry, nejsou ovlivněny.
Limits
| Limit | Value |
|---|---|
| Soubory na jedno volání nástroje | 8 |
| Velikost na soubor | 150 MiB |
| Celková velikost na jedno volání nástroje | 150 MiB |
| Parametry souboru pole pro každý nástroj | 1 (zkombinujte ho s libovolným počtem skalárních parametrů souboru) |
| Maximální hloubka vnoření | 4 úrovně pod vrcholem inputSchema |
Volání, které překročí počet souborů nebo omezení velikosti, selže s chybou nástroje a nikdy nedorazí na váš server. Dimenzujte API a jeho časové limity s ohledem na strop 150 MiB: base64 nafoukne datovou část zhruba o třetinu oproti nezpracované velikosti souboru a kódovaný obsah se odesílá do textu požadavku JSON-RPC.
Recommendations
- Popište parametr pro lidského čtenáře. Agent na základě popisu určí, který soubor patří ke kterému parametru. Například funguje
"The signed contract PDF to analyze"lépe než"file". - V popisu parametru uveďte formáty, které přijímáte. Cowork propustí vše, co uživatel připojí. Ověřte typ obsahu na své straně a vraťte jasnou chybu nástroje, pokud jej nelze použít.
- Nastavení anotací. Nástroj, který přijme soubor a provede nad ním akci, obvykle není jen pro čtení, takže zobrazí výzvu k potvrzení. Další informace najdete v správě anotací a potvrzování MCP.
- Ponechat parametry souboru vložené. Parametr za
$ref, nebo vnořený hlouběji než čtyři úrovně, se nepřepíše. Server obdrží řetězec cesty tam, kde očekává obsah. - Deklarujte maximálně jeden parametr maticového souboru na nástroj. U dvou nebo více souborů nemůže aplikace Cowork určit, který soubor patří do kterého pole, a volání selže s chybou nástroje. Použijte jednu matici nebo několik skalárních parametrů nebo kombinaci skalárů a jednu matici.
- Očekávejte přesný počet nástrojů pouze pro skalární hodnoty. Pokud váš nástroj deklaruje pouze skalární parametry souboru, musí počet souborů, které agent předává, odpovídat deklarovanému počtu. Označte volitelné parametry souboru jasně v jejich popisech, aby agent neposkytl ani příliš málo, ani příliš mnoho.
Note
Tento mechanismus předchází vlastní práci Model Context Protocolu na zadávání souborů, která je standardizována pracovní skupinou MCP File Uploads. Cowork může přidat podporu pro standardizovanou formu deklarativních vstupů souborů, jakmile dorazí. Zde contentEncoding: base64 popsaná smlouva nadále funguje.
Identifikujte provoz Cowork na váš server
Pokud váš server MCP omezuje viditelnost nástrojů podle klienta nebo chcete určit původ přijatého provozu, můžete rozpoznat požadavky, které pocházejí z Cowork. Cowork představuje stabilní softwarovou identitu ve dvou kanálech:
| Channel | Kde se zobrazuje | Value |
|---|---|---|
User-Agent hlavička požadavku |
Každý odchozí požadavek, který Cowork odešle na váš server | copilot-cowork/1.0 |
clientInfo v MCP initialize navázání spojení |
Pouze požadavek initialize |
{ "name": "copilot-cowork", "version": "<version>" } |
Porovnat podle předpony copilot-cowork
Musí používat předponucopilot-cowork bez rozlišování velkých a malých písmen na kterémkoli kanálu. Neodpovídají přesnému copilot-cowork/1.0 řetězci nebo konkrétnímu clientInfo.version. Verze se řídí kontraktem identity klienta a očekává se, že se bude měnit; prefixová shoda udrží vaši bránu funkční i přes změny verzí.
# Correct: case-insensitive prefix match
copilot-cowork
# Incorrect: exact match breaks when the version changes
copilot-cowork/1.0
Vyberte si správný kanál pro vaši bránu
Tyto dva kanály mají různé obory, takže se zaměřte na ten, který odpovídá tomu, jak váš server vynucuje svou bránu:
- Hlavička
User-Agentse nachází v každém požadavku, včetnětools/listatools/call. Pokud budete bránu nebo atribut na požadavek, klíč v této hlavičce. -
clientInfose odešleinitializepři handshake. Pokud to omezíte na jednu relaci v době připojení, můžete si to tam přečíst, ale u dalších požadavků se to neopakuje.
Co identita zahrnuje a nezahrnuje
Identita označuje pouze tento software . Je stejná pro každého uživatele a připojení ke službě Cowork a nikdy nenese identitu uživatele. Identita uživatele zůstane v autorizačním procesu, který definuje konfigurace ověřování vašeho konektoru.
| Identita zahrnuje | Identita nezahrnuje |
|---|---|
Stabilní název softwaru (copilot-cowork) a smluvní verze |
Libovolný identifikátor tenanta, uživatele, relace nebo konverzace |
| Stejná hodnota u každého požadavku a každého připojení | Kvalifikátor pro každý konektor |
Vzhledem k tomu, že neexistuje žádný kvalifikátor pro jednotlivé konektory, nemůžete v současné době použít tuto identitu k určení, který konektor provedl volání, nebo k oddělení publikovaného modulu plug-in Microsoftu od bokem načteného serveru směřujícího na stejnou adresu URL. Pokud toto rozlišení potřebujete, vynuťte ho prostřednictvím konfigurace autorizace vašeho konektoru, nikoli identity klienta.
Časté dotazy
Můžu v kódu Claude použít dovednosti z balíčku M365?
Yes. Složky dovedností obsahují standardní Dovednosti agenta. Spusťte wiqd plugin export --format claude-plugin pro vytvoření rozvržení Claude Code nebo zkopírujte složky skillů do .claude/skills/ v libovolném projektu Claude Code.
Potřebuji Remote Connector?
No. Balíčky pouze s dovednostmi se dobře hodí pro pracovní postupy založené na promptech. Konektory jsou potřeba, jenom když vaše dovednost vyžaduje živá data z externího systému.
Jak se dovednosti pluginů liší od vestavěných dovedností?
Dovednosti modulu plug-in se zobrazují se zdrojovým kódem "package" v rozhraní API. Nemůžou nahradit integrované dovednosti se stejným názvem. Správa nasazené balíčky zobrazují isAdminDeployed: true.
Mohou správci IT spravovat, které pluginy jsou k dispozici?
Yes. Platí standardní ovládací prvky správce M365: seznamy povolených/blokovaných na úrovni tenanta, nasazení spravovaná správcem a zásady dodržování předpisů.
Co se stane, když je plugin zrušen?
V dalším cyklu synchronizace se dovednosti a konektory z daného balíčku odeberou z relace uživatele. Probíhající konverzace se nepřeruší, ale nové relace nebudou mít funkce balíčku.
Jaký je maximální počet dovedností v balíčku?
Dvacet (20) dovedností (dle ASKILL-M002). U konektorů je limit 10 na balení.
Mohou dovednosti odkazovat na nástroje konektorů ze stejného balíčku?
Ano a měli by. Nástroje v pracovním postupu explicitně pojmenujte SKILL.md (například "Použít search_case_law nástroj k..."). Agent je připojí za běhu.
Mohou nástroje mého pluginu přijímat soubory z pracovního prostoru Cowork?
Yes. Deklarujte parametr nástroje pomocí contentEncoding: base64a Cowork před voláním serveru vyřeší soubor pracovního prostoru uživatele na obsah base64. Model předává cesty k souborům, nikoli obsah souborů, takže velké soubory nespotřebovávají kontext modelu. Další podrobnosti o deklaracích a omezeních najdete v tématu Přijímání souborů z pracovního prostoru aplikace Cowork.
Jak vygeneruji deterministický identifikátor GUID pro svůj balíček?
wiqd plugin create za vás vygeneruje a připne ID aplikace. Převodní skript používá UUID v5 (založený na SHA-1) z názvu modulu plug-in, takže spuštění převodu dvakrát vytvoří stejný identifikátor GUID. Pro ruční balení použijte libovolný generátor identifikátorů GUID. Ujistěte se, že je stabilní napříč verzemi.
Na kterou verzi manifestu se mám zaměřit?
Cíl 1.29, pokud stavíte pomocí wiqd, což vám ho připne. Ve verzi 1.29 obsahují položky agentConnectors[] pouze adresy URL a mcpToolDescription je volitelné. V ručně vytvořených příkladech v tomto článku se používá verze 1.28, kde je vyžadováno mcpToolDescription a soubor, který označuje, musí být v archivu ZIP.
atk import openplugin používá UUID v5 (založený na SHA-1) z názvu vašeho pluginu. Při dvojím spuštění importu se vytvoří stejné GUID. Pokud chcete nastavit vlastní, zadejte --app-id. Pro ruční balení použijte libovolný generátor identifikátorů GUID. Ujistěte se, že je stabilní napříč verzemi.