Microsoft Copilot Cowork では、Teams アプリ、Copilot エージェント、Office アドインで使用されるのと同じ配布メカニズムである M365 アプリ パッケージによる拡張性がサポートされています。Cowork は次のように拡張できます:
- スキル: 財務分析、法律調査、人事ワークフローなど、Cowork に新しい専門知識を教えるプロンプトベースのワークフロー。
- コネクタ: Cowork に外部データ ソースと API へのアクセスを提供するリモート サーバー。
どちらも標準の Microsoft 365 アプリ パッケージにまとめてパッケージ化され、Microsoft 365 App Store を通じて配布されます。
Important
Microsoft Purview 情報バリア (IB) は、現在、プラグインまたはスキルの管理と共有ではサポートされていません。 IB が有効になっているテナントでは、埋め込み知識ファイルのアップロードはテナント レベルでブロックされます。 これにより、影響を受けるプラグインとスキルがアップロードまたは公開されなくなります。
Microsoft は、クロール、スクレイピング、ハーベスト、一括エクスポート、取り込み、またはその他の方法 (API、MCP サーバー、またはその他の方法) のいずれによっても、永続的なインデックス、ナレッジ グラフ (Microsoft Graph を含む)、または ISV コンテンツを含むデータベースを作成または維持することはありません。 Microsoftは、ユーザーのリアルタイム クエリに応答するために必要に応じて ISV コンテンツを一時的に処理する場合がありますが、そのセッションの期間を超えて ISV コンテンツは保持されません。 ISV の書面による要求に応じて、Microsoft は所有または管理する ISV コンテンツを 10 営業日以内に削除し、そのような削除を書面で証明します。 Microsoft Copilot と Microsoft Copilot Chat のエンタープライズ データ保護に関する詳細情報をご覧ください。
作成するもの
Cowork プラグインは、以下を含む.zip パッケージです。
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
スキルでは、Claude Code、Visual Studio Code Copilot、Gemini CLI、Cursor、JetBrains Junie、および 30 以上の他の AI ツールでサポートされているのと同じ形式のエージェント スキルを使用します。
出発点を選択する
wiqd CLI を使用してプラグインをビルドします。 CLI はパッケージをスキャフォールディングし、 manifest.json とスキル フォルダーの同期を維持します。また、アップロード前にプラットフォーム独自の検証ルールを実行し、結果をプロビジョニングして共有します。 CLI はプレビュー段階であるため、一般公開前にはコマンドと生成された出力を変更する可能性があります。 生成されるものはすべてプレーンな Microsoft 365 アプリ パッケージであるため、ファイルを直接開いたり、編集したり、バージョン管理したりすることができます。
ツールをインストールできない場合、または独自のパッケージ化パイプラインを構築している場合にのみ、パッケージを手動でアセンブルしてください。 その場合は、この記事の パッケージ形式リファレンス が必要です。それは wiqd が生成する内容を正確に記述します。
| 開始ポイント | これをやってください | 最初のパッケージ化までの時間 |
|---|---|---|
| ゼロから始める | wiqd でプラグインを構築する | 約10分 |
| 既存のClaude Codeプラグインがあります | 変換する | 約5分 |
| ツールをインストールできない、または独自のパッケージをスクリプト化している | パッケージを手作業で組み立てる | 約30分 |
wiqd でプラグインを構築する
wiqd CLI は、作成、機能の追加、検証、プロビジョニング、パッケージ化、共有といった手動でのライフサイクルと同じを実行します。 生成されるパッケージは、この記事の 検証規則 を既に満たしています。
手順 1: wiqd をインストールしてサインインする
Wiqd インストール ガイド (Windows、macOS、Linux を対象としている) に従って、wiqd CLI をインストールします。 次に、開発対象の Microsoft 365 テナントにサインインします。プロビジョニングと共有は両方ともテナントに関係するためです。
wiqd auth login --interactive
インストーラーには GitHub Copilot CLI プラグインも登録されるため、同じライフサイクルを会話的に実行できます。 たとえば、 Triage Helper または Validate my plugin というスタンドアロン プラグインを作成する と言うことができます 。 カンバセーション パスでは、このセクションと同じコマンドが実行されます。 パイプラインをスクリプト化する場合や、再現可能な非対話型オートメーションを実行する場合は、これらのコマンドを直接使用します。
ステップ 2: プラグインをスキャフォールディングし、機能を追加する
プラグイン コンテナーを作成し、必要な機能を任意の組み合わせで追加します。
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 スキャフォールドを appPackage/skills/contract-analysis/SKILL.md し、 agentSkills[]に登録します。
add connector
agentConnectors[] エントリを書き込みます。 どちらのコマンドも、書き込み前にプラットフォームの名前付けとサイズの上限を強制するため、フォルダー名の不一致や長さ超過の id がマニフェストに到達することはありません。
生成された SKILL.mdにスキル ロジックを記述します。 フロントマター フィールド、プログレッシブ読み込みモデル、およびコンパニオン ファイルの制限は、「 手順 1: 最初のスキルを作成する」 と 「手順 2: 参考資料を追加する (省略可能)」で説明されているものと同じです。
Important
wiqd plugin create パッケージを manifestVersion: "1.29" にピン留めしますが、この記事の手動で作成した例では 1.28を使用します。 コネクタにとって、違いは重要です。 1.28 では mcpToolDescription が必要であり、ファイル名は ZIP である必要があります。 1.29 では、 agentConnectors[] エントリは URL のみであり、 mcpToolDescription は省略可能であるため、wiqd で生成されたパッケージでアップロードが失敗することはありません。 WIQD でコネクタ認証はまだスキャフォールド化されません。 サポートされている認証の種類の説明に従って直接構成します。
手順 3: ビルド時に検証する
パッケージを組み立ててアップロードが成功することを期待するのではなく、継続的に検証します。
wiqd plugin validate
wiqd plugin validate --mode deep
validateは、宣言型エージェント サーフェイスに対するオフラインの静的チェックです。 スキルのみまたはコネクタのみのプラグインは、チェックするものは何もせずに渡しますが、これは予想されることです。これはビルド ループのチェックであり、完全なカバレッジではありません。
validate --mode deep 最初にプラグインをパッケージ化してから、アップロードで使用するのと同じアプリ検証ライブラリに対してビルドされた .zip を検証します。 そこで、 ASKILLコード とコネクタルールが浮かび上がります。
手順 4:プロビジョニング、パッケージ化、共有する
次の 3 つのコマンドを順番に実行します。
wiqd plugin provision
wiqd plugin package
wiqd plugin share --scope users --email you@contoso.com
packageとshareの両方が依存する環境ファイルを書き込むため、最初に provision を実行してください。
--scope users を使用して一覧表示したユーザーと共有したり、--scope tenant を使用してorganization内のすべてのユーザーと共有したりできます。 どちらの方法でも、プラグインは [Cowork>ソース] & [スキル>プラグイン] の下の [共有] に表示されます。 代わりに、[ 検出] セクションに一覧表示するには、管理者がパッケージをアップロードします。 詳細については、「 手順 8: テナントに公開する」を参照してください。 作成した provision を削除するには、 wiqd plugin delete --env local --yes を実行します。
パブリック ストアの申請は、パートナー センターでの手動プロセスのままです。 詳細については、「 手順 9: 一般に公開する」を参照してください。
プラグインを別のホストにする
Claude Code、Cursor、またはその他のエージェントスキルホストでスキルを使用するには、フォルダーを手動でコピーするのではなく、プロジェクトをエクスポートします。
wiqd plugin export --format claude-plugin
export 既定は --format open-plugin で、 cursor-pluginも受け入れます。 圧縮されていないディレクトリを <path>/export/<format> の下に書き込みます。
既存のプラグインをインポートする
スキルとMCPサーバーを備えたClaude Codeプラグインをすでに持っている場合は、2つの変換ルートがあります。 どのルートを選択するかは、プラグインの開発を続けるつもりなのか、それとも手持ちのものだけを出荷するつもりなのかによって決まります。
| ゴール | Use |
|---|---|
| Microsoft 365 からプラグインの開発、検証、および出荷を続ける | wiqd plugin import |
既存の Claude プラグインから公開可能な.zipを今すぐ作成する |
変換スクリプト |
wiqd を使用してインポートする
wiqd plugin importOpen Plugin、Claude プラグイン、または Cursor プラグインソースを認識し、そこから wiqd プラグインプロジェクトを生成します。 インポートされたプラグインは、 wiqd plugin create で作成したのと同じライフサイクルに参加します。
wiqd plugin import --path ./my-claude-plugin --privacy-url https://contoso.com/privacy --terms-url https://contoso.com/terms
--privacy-url
--terms-urlはプラグインの最初のインポート時にのみ必要です。 ソースが以前の wiqd plugin exportからのものである場合、ラウンド トリップ メタデータには既にそれらが保持されています。
Important
インポートされたプロジェクトは、ライフサイクルの読み取り専用部分 (wiqd plugin validate、 show、 list) のみをサポートします。 まだパッケージ化、プロビジョニング、共有はできません。インポートでは、これらの手順に必要なローカル配置ファイルがスキャフォールドされないためです。 これは追跡されたギャップです。 現在の状態については、wiqd CLI リファレンスチェックします。 今すぐ公開可能なパッケージが必要な場合は、変換スクリプトを使用してください。
変換スクリプトを使用して変換する
変換スクリプトは、Claudeプラグインを公開可能なM365パッケージに直接変換します。
CLI をインストールします (バージョン 1.1.12 以降が必要):
npm install -g @microsoft/m365agentstoolkit-cliバージョンを確認します。
atk --versionプラグインをインポートします。
atk import openplugin --path ./my-claude-plugin --output ./my-plugin-project \ --privacy-url https://contoso.com/privacy \ --terms-url https://contoso.com/terms
このコマンドは、プラグインの .claude-plugin/plugin.json (または .cursor-plugin/plugin.json)、 .mcp.json、 skills/ ディレクトリを読み取り、 appPackage/manifest.json、スキル、生成されたアイコンを含む Agents Toolkit プロジェクトをスキャフォールディングします。
プラグイン マニフェストには同等のフィールドがなく、Microsoft 365 マニフェストには両方が必要なため、 --privacy-url と --terms-url を含める必要があります。
Note
atk import openplugin ドット プレフィックス付きディレクトリ (.claude-plugin/plugin.json、 .cursor-plugin/plugin.json、または .plugin/plugin.json) で、 .mcp.jsonと共にプラグイン マニフェストを検索します。
Agent Plugins 1.0.0 仕様では、マニフェストはトップレベルのplugin.jsonに、MCP 構成はmcp.jsonに位置します。 1.0.0 レイアウトに従ったプラグインをインポートするには、そのマニフェストを .plugin/plugin.json に移動し、 mcp.json の名前を .mcp.json に変更します。
結果をアップロード可能な .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 マニフェストを生成します。 この記事の他の場所にあるマニフェストの例は、スキーマ v1.28 を対象としています。 v1.28 を必要とするチャネルを通じて公開する場合は、生成されたappPackage/manifest.jsonでmanifestVersionと$schemaを更新します。
インポートされる情報
| プラグイン成果物 | M365 相当 | メモ |
|---|---|---|
.claude-plugin/plugin.json |
manifest.json |
名前、説明、開発者フィールドがマップされます。GUID 自動生成 (確定的な UUID v5) |
skills/*/SKILL.md |
agentSkills[] エントリ + skills/ フォルダー |
逐語一語コピー - 同じ形式 |
.mcp.json servers |
agentConnectors[] entries |
URL と認証の種類の自動検出 |
color.png / outline.png |
パッケージ内のアイコン | 存在する場合は使用されます。存在しない場合に生成されたプレースホルダー |
Important
.mcp.json からインポートされたコネクタごとに、生成されるauthorization.referenceIdは、プラグインとサーバー名から派生したプレースホルダーです。 発行する前に、実際の OAuth クライアント登録 ID に置き換えてください。 詳しくは、「 サポートされている認証の種類」をご覧ください。
変換されないもの
次の Claude プラグイン機能は、Microsoft 365 マニフェストではまだサポートされていません。
| Claudeプラグイン機能 | Status |
|---|---|
commands/ (スラッシュ コマンド) |
まだサポートされていません |
agents/ (サブエージェント) |
まだサポートされていません |
hooks/ (イベント ハンドラー) |
まだサポートされていません |
settings.json |
該当なし |
bin/ (実行可能ファイル) |
該当なし |
インポート オプション
| Option | Description |
|---|---|
--path、-p |
Required.
.claude-plugin/plugin.json、.cursor-plugin/plugin.json、または.plugin/plugin.json |
--output、-o |
ターゲット プロジェクト フォルダー (既定値: ./<plugin-name>) |
--privacy-url |
developer.privacyUrl 生成されたマニフェストの場合 |
--terms-url |
developer.termsOfUseUrl 生成されたマニフェストの場合 |
--website-url |
developer.websiteUrl。
homepage にフォールバックし、author.url |
--app-id |
マニフェスト用に生成された確定的な UUID v5 をオーバーライドする id |
--default-auth-type |
Auto (既定値)、 None、 OAuthPluginVault、または ApiKeyPluginVault |
認証の種類の自動検出:
| Source | 既定の認証の種類 | 理由 |
|---|---|---|
| 外部 HTTPS URL | OAuthPluginVault |
ほとんどのリモート API には認証が必要です |
localhost および非 HTTPS URL |
None |
ローカル開発サーバー |
自動検出が設定と一致しない場合は、 --default-auth-type を使用して上書きします。
プラグイン ディレクトリにエクスポートし直す
Agents Toolkit プロジェクトをプラグインディレクトリに戻すには (たとえば、Claude Code プラグインと Cowork パッケージの同期を維持するには、次のatk export openpluginを使用します。
atk export openplugin --path ./my-plugin-project \
--output ./my-claude-plugin --manifest-kind claude-plugin
| Option | Description |
|---|---|
--path、-p |
Required. Agents Toolkit プロジェクト フォルダー appPackage/manifest.json |
--output、-o |
宛先プラグイン ディレクトリ (既定値: ./<plugin-name>-openplugin) |
--manifest-kind |
open-plugin (既定では書き込み .plugin/plugin.json)、 claude-plugin、または cursor-plugin |
[エクスポート] では、生成されたplugin.jsonにx-microsoft-365-agents-toolkit ブロックが書き込まれます。 このブロックには、マニフェスト id、開発者 URL、およびコネクタ設定が含まれるため、後で atk import openplugin ラウンド トリップが再 --privacy-url または --terms-url 必要ありません。
Note
x-microsoft-365-agents-toolkit ブロックは Agents Toolkit に固有であり、既定のopen-pluginの種類ではマニフェストが .plugin/plugin.json に書き込まれます。
Agent Plugins 1.0.0 は、トップレベルの plugin.json を使用し、逆ドメイン名前空間を持つ extensions キーの下でクライアント固有のデータを運搬するため、他のクライアントはこのブロックに対して操作を行わずに、このブロックを無視します。 ターゲットが Claude Code または Cursor の場合は、--manifest-kind claude-plugin または cursor-plugin を使用します。
レガシ: PowerShell 変換スクリプト
プラグイン インポートがサポートされる前 atk 、変換には Windows 専用の PowerShell スクリプトが使用されていましたが、これは変換 スクリプトとして引き続き使用できます。
.\Convert-ClaudePluginToMOS3.ps1 -PluginPath ./my-claude-plugin -OutputPath ./output
atk import openplugin を代わりに使用します。 クロスプラットフォームであり、CursorとClaudeコードソースをサポートし、プラグインディレクトリにエクスポートすることができます。
パッケージを手作業で組み立てる
このセクションはパッケージ形式のリファレンスです: wiqd でプラグインを構築すると 生成される内容をフィールドごとに正確に説明します。 ツールをインストールできない場合や、独自のパッケージ化パイプラインを構築している場合は、エンドツーエンドで説明します。 生成されたパッケージを理解またはデバッグする必要がある場合に、リファレンスとして使用します。
手順 1: 最初のスキルを作成する
スキルは、 SKILL.md ファイルを含むフォルダーです。 次のフォルダー構造を作成します。
my-extension/
└── skills/
└── contract-analysis/
└── SKILL.md
YAML フロントマターと Markdown 本文を使用して SKILL.md を記述します。
---
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 フィールド
必須フィールド:
| フィールド | Constraints | Description |
|---|---|---|
name |
1 から 64 文字、ケバブケース | スキル識別子 - フォルダー名と正確に一致する必要があります |
description |
1 から 1024 文字 | このスキルを使用するタイミング - トリガー フレーズを含める |
Important
- フォルダー名は、フロントマターの
nameフィールドと一致する必要があります。 この不一致は、スキルの失敗の最も一般的な原因です。 - プラグインの一覧
descriptionフィールドには、サブスクリプションを購入するためにユーザーを外部マーケットプレースに誘導する行動喚起を含めることはできません。
| フォルダー パス |
name フィールド |
有効? | なぜでしょうか |
|---|---|---|---|
skills/contract-analysis/SKILL.md |
contract-analysis |
Yes | フォルダーと名前が一致する |
skills/contract-analysis/SKILL.md |
ContractAnalysis |
No | 名前は一致するフォルダではなく PascalCase を使用します |
skills/my-skill/SKILL.md |
contract-analysis |
No | フォルダーは my-skill ですが、名前は contract-analysis |
名前付けルール (ケバブケース): 小文字の英数字とハイフンは必ず使用してください。 連続するハイフンは使用しないでください。また、先頭または末尾のハイフンは使用しないでください。
| 例 | 有効? | Issue |
|---|---|---|
bond-relative-value |
Yes | ハイフン付きの小文字 |
fx-carry-trade |
Yes | ハイフン付きの小文字 |
email |
Yes | 1 つの単語、ハイフン不要 |
Bond_Relative_Value |
No | アンダースコアと大文字 |
--my-skill-- |
No | 先頭と末尾のハイフン |
my--skill |
No | 連続するハイフン |
手順 2: 参考資料を追加する (オプション)
複雑なスキルの場合は、メイン SKILL.md を無駄のない状態に保ち、詳細なコンテンツをサブディレクトリに移動します。 これらの追加ファイルは コンパニオン ファイルです。 スキルは必要に応じてそれらをロードします。
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
コンパニオン ファイルの制限
各スキルには、最大 20 個のコンパニオン ファイル ( SKILL.md 以外のファイル) を含めることができます。 スキルごとに次の制限が適用されます。
| Limit | Value |
|---|---|
| コンパニオン ファイルの最大数 | 20 |
| コンパニオン ファイルあたりの最大サイズ | 5 メガバイト |
| コンパニオンの最大合計サイズ | 10MB |
| ダウンロード タイムアウト (すべてのコンパニオン) | 15 秒 |
コンパニオン ファイルのルール
コンパニオン ファイル パスは次の規則に従う必要があります。
- 相対パスのみ使用します (絶対パスは使用しません)。
- パス トラバーサルなし (セグメント
..)。 - ファイル名にバックスラッシュまたは NULL バイトを使用できません。
- 隠しファイル (
.で始まる名前) は許可されません。 - Windows 予約名 (
CON、PRN、AUX、NUL、COM1–COM9、LPT1–LPT9) はありません。 - ファイル
SKILL.md自体はコンパニオン ファイルとしてカウントされません。 - ファイル名には、英数字、ハイフン、アンダースコア、ドット、スペース、
!などの安全な文字を使用する必要があります。
コンテキスト ウィンドウを効率的に保つために、システムはスキルを 3 つのレイヤーに読み込みます。
| レイヤー | 読み込み時 | ターゲット サイズ |
|---|---|---|
Frontmatter (name + description) |
常時 - 起動時 | ~100 トークン |
SKILL.md body |
スキルがトリガーされたとき | 5,000 トークン未満 (1,500 から 2,000 ワード) |
参照 (references/) |
エージェントによる要求時 | Unlimited |
スクリプト (scripts/) |
実行されましたが、コンテキストに読み込まれていません | N/A |
エージェントがサブディレクトリが存在することを認識できるように、 SKILL.md でサブディレクトリを明示的に参照します。
## 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
手順 3: コネクタを追加する (省略可能)
拡張機能が外部データにアクセスする必要がある場合は、リモート MCP サーバーを追加します。 このステップはオプションです。 スキル専用パッケージは、プロンプトベースのワークフローに適しています。
Tip
サーバーがクライアントによってツールの可視性をゲートするか、受信トラフィックを属性する場合は、「Cowork が提示するクライアント ID について、サーバーへの Cowork トラフィックを特定する」を参照してください。
Note
カスタム プラグインは、モバイル上の Cowork ではサポートされていません。
コネクタの要件
| 要件 | Details |
|---|---|
| Transport | Streamable HTTP (HTTPS が必要、TLS 1.2+) |
| Protocol | JSON-RPC 2.0 メッセージ形式 |
| ツールの発見 | 動的検出のサポート tools/list (推奨) |
| ツールの実行 | 呼び出しのサポート tools/call |
| Availability | 99.9% の稼働時間 ストア公開アプリに推奨される SLA |
| 応答時間 | ツール呼び出しごとに 30 秒未満 |
ツール設計ガイドライン
- 小規模な API (操作が 15 個未満) の場合は、アクションごとに 1 つのツール:
search_case_law、get_ruling、cite_precedent - 大規模な API (50+ 操作) の検索 + 実行:
search_actions+execute_action -
わかりやすい名前:
get_bond_pricegetData - リッチ入力スキーマ: すべてのパラメーターの説明を含めます (これはエージェントが読み取る内容です)
- 構造化出力: エージェントがユーザー用に書式設定できる JSON を返します
-
ファイル入力: ユーザーのワークスペースからファイルを受け入れるには、パラメーターを
contentEncoding: base64で宣言します。 詳細については、「Cowork ワークスペースからファイルを受け入れる」を参照してください。
コネクタのツールについて説明する (mcpToolDescription)
remoteMcpServer コネクタには、オプションで mcpToolDescription オブジェクトを含めることができます。 指定された場合、入れ子になった file プロパティは、 .zip 内にパッケージ化し、パッケージ ルートからの相対パスで参照されるツール記述 JSON ファイルを指し示します。 Cowork は MCP サーバーからツールを動的に検出し、このファイルが存在する場合でも使用しません。
"remoteMcpServer": {
"mcpServerUrl": "https://api.contoso.com/legal/mcp",
"mcpToolDescription": {
"file": "./tools/contoso-legal-tools.json"
},
"authorization": {
"type": "OAuthPluginVault",
"referenceId": "A1bC2dE3fH4iJ5kL6mN7oP8qR9sT0u"
}
}
mcpToolDescription を含める場合、参照ファイル (tools/contoso-legal-tools.json など) はコネクタが公開するツールについて説明し、ZIP パッケージに存在する必要があります。 プラグインをパッケージ化するときに、 manifest.json フォルダーと skills/ フォルダーに含めます。
Tip
この要件は、マニフェスト バージョン 1.28 に適用されます。 ターゲット 1.29 を wiqd plugin create 生成するパッケージ。 agentConnectors[] エントリは URL のみであり、 mcpToolDescription は省略可能であり、忘れるツール記述ファイルはありません。
サポートされている認証の種類
| 認証の種類 | いつ使用するか | ユーザー エクスペリエンス |
|---|---|---|
None |
パブリックまたは匿名の API、内部サービス | 透過 - 認証プロンプトなし |
OAuthPluginVault |
OAuth 2.0 API (運用環境に推奨) | ユーザーは OAuth の同意を 1 回完了します |
ApiKeyPluginVault |
API キーベースのサービス | ユーザーはキーを 1 回指定します |
Note
- API キー認証は、Cowork ではまだサポートされていません。
- MCP サーバーで API キーが必要な場合は、代わりに
OAuthPluginVaultまたは 動的クライアント登録 を使用するか、Noneを受け入れるエンドポイントを公開します。
OAuthPluginVaultおよびApiKeyPluginVaultの場合、referenceIdは Microsoft Enterprise トークン ストアに格納されている資格情報を指します。シークレットがマニフェストやスキル ファイルに表示されることはありません。
referenceId値は、OAuth クライアントを Agents Toolkit に登録するときに作成する OAuth クライアント登録 ID です。
Important
OAuth クライアントを登録するときは、プラグインがテナント間で機能するように、organization 別の使用状況を Any Microsoft 365 Organization に設定します。
MCP 認証
認証に OAuth または ApiKey を使用するには、セットアップと構成の詳細については、「Microsoft 365 Copilot のエージェントで MCP および API プラグインの認証を構成する」を参照してください。
動的クライアント登録
MCP サーバーが 動的クライアント登録 (DCR) をサポートしている場合は、コネクタ定義からauthentication構成を省略でき、Cowork はプラグインに代わって OAuth クライアントを自動的に作成します。
Note
authentication構成の省略は、Coworkでのみサポートされます。 これは Copilot Chat ではサポートされていません。 プラグインが Copilot Chat でも動作する必要がある場合は、「サポートされている認証の種類」の説明に従ってOAuthPluginVault認証を構成します。
authorization オブジェクト全体を省略できます。 MCP サーバー URL を構成すると、Cowork が OAuth クライアントを処理します。
"remoteMcpServer": {
"mcpServerUrl": "https://api.contoso.com/legal/mcp"
}
手順 4: マニフェストを作成する
パッケージ ルートに manifest.json を作成します。 この例では、マニフェスト バージョン 1.28 を使用します。代わりに 1.29 をピン留め wiqd plugin create します。ここで、コネクタのエントリは 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" }
]
}
コネクタを追加するには、次の 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"
}
}
}
}
]
}
コネクタの構成では、 referenceId は OAuth 登録 ID である必要があります。
mcpToolDescription を含める場合、そのfileは、ZIP パッケージに含まれるツール記述 JSON ファイルを指す必要があります。
Important
v1.28 のマニフェスト スキーマは厳密です。ルートに additionalProperties: false を設定するため、スキーマで定義されていないフィールドは拒否されます。 標準の Teams アプリ マニフェストで有効なフィールド ( packageName など) を使用すると、アップロードが失敗し、「ここに示すフィールドのみを含める Property 'packageName' has not been defined and the schema does not allow additional properties. 」などのエラーが表示されます。
手順 5: アイコンを追加する
2 つの PNG アイコンを作成します。
| Icon | Size | Purpose |
|---|---|---|
color.png |
192×192 ピクセル | ストアとアプリの一覧に表示されるフルカラー アプリ アイコン |
outline.png |
32×32 ピクセル | コンパクト ビュー用の単色アウトライン アイコン |
アイコンがまだない場合は、 atk import openplugin によって単色のプレースホルダーが生成されます。 ストアへの提出前に置き換えてください。
手順 6: パッケージ化
すべてのコンテンツをルート レベルで含む ZIP ファイルを作成します。 (wiqd plugin package では、 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
コネクタに mcpToolDescription が含まれている場合は、コネクタが参照するツールの説明 JSON ファイルを含めます。 スキル専用パッケージを含め、 mcpToolDescriptionを使用しないパッケージには、 tools/ フォルダーは不要です。
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/
Using Microsoft 365 Agents Toolkit
atk package --manifest-file ./appPackage/manifest.json \
--output-package-file ./appPackage/build/appPackage.zip \
--output-folder ./appPackage/build
手順 7: テスト
アプリをテストするには、「 Teams にアプリをアップロードする」の説明に従って、アプリ パッケージを Teams にアップロードします。
wiqd を使用してプラグインをビルドした場合は、代わりに wiqd plugin provision を実行します。これにより、プラグインがテナントに登録されます。 手動で組み立てたパッケージの個人テストの場合は、Microsoft 365 Agents Toolkit コマンド ライン インターフェイスを使用してアプリをサイドロードします。
npmから@microsoft/m365agentstoolkit-cliをインストールします。npm install -g @microsoft/m365agentstoolkit-cli次を実行してインストールを確認します。
atk --versionMicrosoft 365 職場アカウントで認証します。
atk auth login職場アカウントにサインインして、エージェント パッケージをインストールします。 ファイル パスを ZIP パッケージの場所に置き換えます。
atk install --file-path "C:/Users/myuser/myPackage.zip" --scope Personalインストールが成功すると、アカウントの
TitleIdとAppIdを含む出力が返されます。後で更新またはアンインストールするときに使用するために、これらの ID を保存してください。
Microsoft 365 Agents Toolkit コマンド ライン インターフェイスに関する詳細情報。
手順 8: テナントに公開する
管理センターでパッケージをアップロードして、[検出] セクションにプラグインを一覧表示します。organization 内の誰もがパッケージを見つけることができます。
- M365 管理センターを開き>アプリの管理>カスタム アプリをアップロードします。
- 省略記号ボタン (...) を選択 >エージェントを追加します。
-
.zipパッケージをアップロードします。 - Cowork>ソース & スキル>プラグインを開きます。 プラグインが [検出] セクションに表示されます。
wiqd plugin shareプラグインを Discover ではなく Shared with me に配置します。 これは、テストおよび特定のユーザーへのターゲットを絞ったロールアウトに使用します。 管理センターのアップロードは、検出用のプラグインを一覧表示するものです。
手順 9: 一般に公開する
一般配布を目的としたプラグインの場合は、パートナー センター経由でプラグインを Microsoft 365 App Store に提出します。 詳細については、「Microsoft 365 Copilot 用のエージェントの発行」を参照してください。
ローカルの MCP サーバーに対してコネクタをテストする
コネクタには HTTPS mcpServerUrlが必要です。 マシンで実行されているサーバーをテストするには、パブリック HTTPS URL 経由でサーバーを公開する必要があります。
開発トンネルは 、TLS を終了するリレーを提供します。
devtunnel port create <tunnel> -p <port> --protocol http
Important
--protocol http ではなく、https を使用してください。
--protocol フラグは、パブリック トンネル URL ではなく、トンネルの転送先のローカル サービスを記述します。 ほとんどのローカル MCP サーバーはプレーン HTTP を話すため、サーバーが HTTP を提供しているときに --protocol https を設定すると、トンネルを通過するすべての要求で 502 エラーが返されます。 リレーは TLS を終了し、このフラグに関係なく HTTPS 経由でパブリック URL を提供します。
Troubleshooting
| 症状: | 原因 | 修正 |
|---|---|---|
トンネリングされたすべての要求は 502 を返し、ローカル サーバーは HTTP を読み上げます |
devtunnel port create で実行されました --protocol https |
でポートを再作成します。 --protocol http |
ローカル サーバーが実行されていても、トンネリングされた要求によって macOS で 502 が返される |
サーバーは 0.0.0.0 (IPv4 のみ) にバインドされていますが、トンネルはダイヤル localhost、最初に ::1 (IPv6) に解決されます |
IPv4 接続と IPv6 接続の両方を受け入れるようにサーバーを :: にバインドする |
アップロードが失敗する Property '<field>' has not been defined and the schema does not allow additional properties |
マニフェストには、v1.28 スキーマで許可されないフィールドが含まれています (たとえば、 packageName) |
フィールドを削除します。v1.28 スキーマは以下を使用します additionalProperties: false |
パッケージ化パターン
拡張機能に合ったパターンを選択します。
スキルのみ (コネクタなし)
プロンプトベースのワークフロー、ドキュメント分析、文書作成支援に最適です。
my-skills-pack.zip
├── manifest.json # agentSkills only, no agentConnectors
├── color.png
├── outline.png
└── skills/
├── skill-one/SKILL.md
└── skill-two/SKILL.md
スキル + リモート コネクタ
データ分析、API 統合、エンタープライズ システムに最適です。
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
コネクタのみ (カスタム スキルなし)
Cowork の組み込みスキルで既に使用できるデータ ソースには、このオプションを使用します。
my-connector.zip
├── manifest.json # agentConnectors only, no agentSkills
├── color.png
├── outline.png
└── tools/ # Tool-description file(s) for mcpToolDescription (optional)
└── my-connector.json
インポートされたClaudeコードまたはカーソルプラグイン
このオプションは、Coworkを対象とする既存のClaudeエコシステムプラグインに使用します。 Microsoft 365 でプラグインの開発を続けるには、プラグインをインポートします。
wiqd plugin import --path ./claude-plugin --privacy-url https://contoso.com/privacy --terms-url https://contoso.com/terms
現在のプラグインから公開可能な .zip を生成するには、変換スクリプトを使用します。
atk import openplugin --path ./claude-plugin --output ./my-plugin-project \
--privacy-url https://contoso.com/privacy \
--terms-url https://contoso.com/terms
スキル作成のベストプラクティス
次のガイドラインに従って、確実にアクティブになり、一貫した結果を生み出すスキルを作成してください。
効果的な説明文を書く
description フィールドは、エージェントがスキルをアクティブ化するタイミングを決定します。 具体的に書く:
# 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.
効果的なワークフローの作成
- 具体的に説明してください。 トリガー フレーズを含める: "ユーザーが要求したときに..."この説明は、エージェントがアクティブ化するスキルを決定する方法です。
- ワークフローとしての構造。 番号を付けます。 各ステップは、具体的なアクション (ファイルの読み取り、ツールの呼び出し、出力の生成) にマップする必要があります。
- 出力形式を定義します。 ユーザーが期待できる表、リスト、またはドキュメントの構造を正確に表示します。 この定義により、一貫性が大幅に向上します。
- 名前でツールを参照します。 スキルがコネクタ ツールに依存している場合は、明示的に名前を付けます: "
search_case_lawツールを使用して..." -
メイン SKILL.md を無駄のない状態に保ちます。 詳細な参照資料を
references/サブディレクトリに移動します。 スキルボディは百科事典ではなく、ワークフローであるべきです。
一般的な間違いを避ける
-
SKILL.mdファイルにシークレットを埋め込まないでください。 API 資格情報の認証と共にagentConnectorsを使用します。 - 組み込みスキルを複製しないでください。 ビルドする前に 、組み込みのスキル リスト を確認します。
- スキルを広範にしすぎないでください。 「すべて法的文書で行う」は、「契約分析」「条項抽出」「法的調査」の特定のスキルよりも劣ります。
- ファイル パスやシステム コマンドはハードコードしないでください。 スキルは、環境間で移植可能である必要があります。
-
すべてを SKILL.md に入れないでください。 本文が ~3,000 語を超える場合は、詳細なコンテンツを
references/に移動します。
検証規則
パッケージを送信すると、プラットフォームによって複数のレベルで検証が行われます。 拒否されないように、提出前にこれらのエラーを修正してください。
アップロード時ではなくビルド時にそれらをキャッチするには、 wiqd plugin validate --mode deep を実行します。 このコマンドはプラグインをパッケージ化し、これらの同じルールをローカルで実行します。 詳細については、「 手順 3: ビルド時に検証する」を参照してください。
マニフェスト レベルの検証
| Code | ルール | Severity |
|---|---|---|
| ASKILL-M001 |
folder は各 agentSkills エントリで必須です |
Error |
| ASKILL-M002 |
agentSkills 配列には最大 20 個のアイテムを含めることができます |
Error |
| ASKILL-M003 |
folder パスは最大 256 文字です |
Error |
パッケージ レベルの検証
| Code | ルール | 一般的な修正 | Severity |
|---|---|---|---|
| ASKILL-P001 | マニフェストで参照されているフォルダーが ZIP に存在する | ZIP 構造を確認する | Error |
| ASKILL-P002 | フォルダーには SKILL.md ファイルが含まれています |
不足している SKILL.md の追加 |
Error |
| ASKILL-P003 |
SKILL.md
---区切り記号の間に有効な YAML フロントマタがある |
YAML 構文を修正する | Error |
| ASKILL-P004 | Frontmatter には name フィールドが含まれます |
フロントマターに name: を追加する |
Error |
| ASKILL-P005 | Frontmatter には description フィールドが含まれます |
フロントマターに description: を追加する |
Error |
| ASKILL-P006 |
name フォルダー名 (最後のパス セグメント) と一致する |
フォルダー名の変更または修正 name: |
Error |
| ASKILL-P007 |
name is kebab-case |
my-skill をMySkillしない、またはmy_skill |
Error |
| ASKILL-P008 | 配列に重複する folder 値はありません |
重複を削除する | Error |
コネクタの検証
| ルール | Severity |
|---|---|
各コネクタには id と displayName |
Error |
すべてのコネクタ id 値は、マニフェスト内で一意である必要があります |
Error |
pluginのうち 1 つだけremoteMcpServer |
Error |
mcpServerUrl 有効な HTTPS URL である必要があります |
Error |
mcpToolDescriptionが存在する場合は、そのfileが ZIP に存在する必要があります |
Error |
authorization.referenceId 必須でない限り、タイプが None |
Error |
authorization.referenceId type が None |
Error |
コンパニオン ファイルの検証
ポータルでは、アップロード時および同期時にコンパニオン ファイル ( SKILL.mdと共に参照資料、スクリプト、その他のファイル) を検証します。
| ルール | Severity |
|---|---|
スキルごとに最大 20 個のコンパニオン ファイル ( SKILL.md を除く) |
Error |
| 各コンパニオン ファイルは 5 MB 以下である必要があります | Error |
| コンパニオン ファイルの合計は、スキルごとに 10 MB 以下である必要があります | Error |
| ファイル パスは相対パスである必要があります (絶対パスは使用できません) | Error |
パス トラバーサル セグメントなし (..) |
Error |
| ファイル名にバックスラッシュまたは NULL バイトを含まない | Error |
隠しファイル ( . で始まる名前) は許可されません |
Error |
Windows の予約名 (CON、 PRN、 AUX、 NUL、 COM1–COM9、 LPT1–LPT9) はありません |
Error |
ファイル名には、安全な文字 (英数字、ハイフン、アンダースコア、ドット、スペース、 !) のみを使用する必要があります |
Error |
クロスプラットフォーム互換性
スキルはエージェント スキル オープン スタンダードを使用します。 同じ SKILL.md ファイルが複数の AI ツールで動作します。
| Platform | Compatibility |
|---|---|
| クロード符号 | 完全同じ SKILL.md 形式 |
| Claude.aiプロジェクト | フルスキルはプロジェクトファイルとしてアップロードできます |
| VS Code/GitHub Copilot | Full-Agent エージェント モードでサポートされているスキル |
| Gemini CLI | Full-Agent サポートされているスキル |
| JetBrains Junie | Full-Agent サポートされているスキル |
| OpenAIコデックス | Full-Agent サポートされているスキル |
| Cursor | Full-Agent サポートされているスキル |
Claude Code と Copilot Cowork の両方のスキルを開発している場合は、wiqd を使用してプラグインを作成します。 次に、wiqd plugin export --format claude-pluginを実行してClaude コード レイアウトを生成します。 Claude Codeのプラグイン構造(スーパーセット)から始めたい場合、レイアウトは次のようになります。
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)
Microsoft 365 App Store に発行する準備ができたら、wiqd plugin importまたは変換スクリプトを使用して、Microsoft 365 に取り込みます。
atk import openplugin --path ./my-plugin --output ./my-plugin-project \
--privacy-url https://contoso.com/privacy \
--terms-url https://contoso.com/terms
MCP の注釈と確認の管理
Copilot Cowork は、サーバーが tools/list から返すツール上の標準 MCP annotations オブジェクトを読み取り、それを使用して、ツールの呼び出しにユーザーによる確認が必要かどうか、およびプロンプトに表示するラベルを決定します。
[使用できるフィールド]
| フィールド | タイプ | Effect |
|---|---|---|
readOnlyHint |
bool |
false: ツールを実行する前に確認が必要です。 |
destructiveHint |
bool |
true: ツールを実行する前に確認が必要です。 |
title |
文字列 | 確認ダイアログに表示される人が判読できるラベル。 存在しない場合は、ツール名にフォールバックします。 |
確認ルール
readOnlyHint == falseまたはdestructiveHint == trueの場合は確認が必要です。
すべてのツールで安全注釈を指定する必要があります。 注釈のないツールは破壊的なものとして扱われ、確認が必要です。 詳細については、 MCP スキーマ リファレンスをご覧ください。
MCP の例
破壊的操作とフレンドリ ラベル:
{
"name": "send_email",
"description": "Send an email message.",
"annotations": {
"title": "Send Email",
"destructiveHint": true
},
"inputSchema": { ... }
}
自動実行される安全な読み取り:
{
"name": "search_docs",
"annotations": {
"title": "Search Documents",
"readOnlyHint": true
}
}
現在利用可能な機能
- Microsoft ツール (Graph、Dataverse など) は、注釈に関係なく、Cowork の組み込みポリシーによって制限されます。
- Microsoft MCP 以外のサーバーについては、注釈駆動型の確認が段階的に展開されています。 ここでヒントを設定すると、前方互換性があり、開発者が変更することなく、ロールアウトが拡大するにつれて確認プロンプトが表示されます。
Cowork ワークスペースからファイルを受け入れる
コネクタ ツールは、ユーザーの Cowork セッションのファイル (ユーザーが添付したドキュメント、Cowork が保存したメールの添付ファイル、または以前の手順で生成されたファイル) を入力として取得できます。 標準の JSON スキーマ キーワード (keyword) contentEncoding: base64でパラメーターを宣言し、残りは Cowork が処理します。 Microsoft 固有のスキーマ拡張機能は必要なく、サーバーの API サーフェイスは変更されません。
Cowork はワークスペース ファイルを解決し、サーバーを呼び出す前に base64 エンコードするため、ファイル バイトがエージェントのコンテキストに入ることはありません。 エージェントは、ワークスペース ファイル パスのみを認識して出力します。
Note
ファイル自体を base64 でエンコードして、ツール呼び出しに BLOB を貼り付けるようにエージェントに指示しないでください。 このアプローチでは、ファイル全体がモデルのコンテキストに読み込まれ、モデルが blob を正確に再現することに依存します。 小さなテストファイルでは動作するようで、実際のテストファイルでは失敗します。
ファイル パラメーターの宣言
contentEncoding: base64 を持つ文字列プロパティは、ファイル入力として認識されます。
{
"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"]
}
}
複数のファイルを受け入れるツールの場合、このような文字列の配列も認識されます。
"attachments": {
"type": "array",
"items": { "type": "string", "contentEncoding": "base64" },
"description": "Receipt images to attach to the expense line."
}
エージェントに表示される内容
inputSchema.properties の最上位レベルで宣言されたファイル パラメーターの場合、Cowork は、モデル向けスキーマ内の 1 つのdirect_attachment_file_paths配列に置き換えます。これは、Cowork の組み込みツールで使用されるのと同じパラメーターであるため、エージェントは値の入力方法を既に把握しています。 上記のスキーマは、次のようにエージェントに表示されます。
{
"type": "object",
"properties": {
"direct_attachment_file_paths": {
"type": "array",
"items": { "type": "string" },
"description": "Workspace file paths to attach."
},
"jurisdiction": { "type": "string" }
}
}
ツールで複数の最上位ファイル パラメータを宣言している場合、すべてのパラメーターがその 1 つの direct_attachment_file_paths 配列に折りたたまれます。 呼び出し時に、Cowork は解決されたファイルを宣言順に元のパラメーター名にファン アウトします。
入れ子になったファイル パラメーター
エージェントは、オブジェクトまたはオブジェクトの配列内にネストされたファイル パラメーターをサポートします。 エージェントはこのパラメーターを別の方法で処理します。パラメータを折りたたむのではなく、その 場 で独自の場所にあるパス文字列に書き換えます。 この方法では、ファイルとその兄弟フィールド間の関連付けが保持されます。 たとえば、経費明細行ごとに 1 つの領収書を取得します。
"line_items": {
"type": "array",
"items": {
"type": "object",
"properties": {
"amount": { "type": "number" },
"receipt": { "type": "string", "contentEncoding": "base64" }
}
}
}
エージェントは、line_items[].receiptワークスペース パスを設定し、呼び出しを転送する前に、各パスを所定の base64 コンテンツ用にスワップCoworkします。
入れ子は、 inputSchema の上部から下の 4 つのレベルの深さまでトラバースされます。
$ref ポインターは追従されません。ファイル パラメーターを $refの背後ではなくインラインで定義します。
サーバーが受け取る内容
サーバーは、base64 でエンコードされたコンテンツが設定された元のパラメーター名を持つ通常の tools/call を受け取ります。
{
"method": "tools/call",
"params": {
"name": "analyze_contract",
"arguments": {
"document": "JVBERi0xLjQKJcfsj6IKNSAwIG9iago8PC9MZW5...",
"jurisdiction": "US"
}
}
}
エージェントがパスベースのインターフェイスを使用したことをサーバーは認識する必要はなく、 contentEncoding: base64 パラメーターを宣言しないツールも影響を受けません。
Limits
| Limit | Value |
|---|---|
| ツール呼び出しあたりのファイル数 | 8 |
| ファイルごとのサイズ | 150 MiB |
| ツール呼び出しごとの合計サイズ | 150 MiB |
| ツールごとの配列ファイル パラメーター | 1 (任意の数のスカラー ファイル パラメーターと組み合わせる) |
| 最大入れ子深さ | 最上位から 4 レベル下 inputSchema |
ファイル数またはサイズの上限を超える呼び出しは、ツール エラーで失敗し、サーバーに到達しません。 150MiB の上限を念頭に置いて、API とそのタイムアウトのサイズを設定します。base64 は、ペイロードを生ファイルサイズの約 3 分の 1 に膨らませ、エンコードされたコンテンツは JSON-RPC 要求本文で送信されます。
Recommendations
- 人間のリーダーのためにパラメーターを記述します。 エージェントは、説明を使用して、どのファイルがどのパラメーターに属するかを判断します。 たとえば、
"The signed contract PDF to analyze"は"file"よりもうまく機能します。 - パラメーターの説明に受け入れる形式を記述します。 Cowork は、ユーザーがアタッチしたものをすべて通過します。 味方のコンテンツ タイプを検証し、使用できない場合はクリア ツール エラーを返します。
- 注釈を設定します。 通常、ファイルを受け取って操作するツールは読み取り専用ではないため、確認を求められます。 MCP の注釈と確認の管理に関する詳細情報。
- ファイル パラメーターはインラインのままにします。
$refの背後にあるパラメーター、または 4 レベルより深く入れ子になったパラメーターは書き換えられません。 サーバーは、コンテンツが必要な場所でパス文字列を受け取ります。 - ツールごとに最大 1 つの配列ファイル パラメータを宣言します。 2 つ以上の場合、Cowork はどのファイルがどの配列に属しているかを判断できず、呼び出しがツール エラーで失敗します。 1 つの配列、複数のスカラー パラメーター、またはスカラーと 1 つの配列の組み合わせを使用します。
- スカラーのみのツールでは正確なカウントが必要です。 ツールでスカラー ファイル パラメーターのみを宣言する場合は、エージェントが渡すファイルの数が宣言された数と一致する必要があります。 オプションのファイルパラメータを説明で明確にマークして、エージェントが過小または過剰に供給しないようにします。
Note
このメカニズムは、 MCP ファイル アップロード ワーキング グループによって標準化されているモデル コンテキスト プロトコル独自のファイル入力作業よりも前から存在します。 Cowork は、標準化された形式の宣言型ファイル入力のサポートを追加する可能性があります。 ここで説明する contentEncoding: base64 コントラクトは引き続き機能します。
サーバーへの Cowork トラフィックを特定する
MCP サーバーがクライアントによってツールの可視性をゲートする場合、または MCP サーバーが受信するトラフィックに属性を付ける場合は、Cowork からのリクエストを認識できます。 Cowork は、次の 2 つのチャネルで安定したソフトウェア ID を提供します。
| Channel | 表示される場所 | Value |
|---|---|---|
User-Agent 要求ヘッダー |
Cowork がサーバーに送信するすべての送信リクエスト | copilot-cowork/1.0 |
clientInfo MCP initialize ハンドシェイクで |
initialize要求のみ |
{ "name": "copilot-cowork", "version": "<version>" } |
copilot-cowork プレフィックスでの一致
いずれかのチャネルで copilot-coworkプレフィックスと一致し、大文字と小文字を区別しません。
copilot-cowork/1.0文字列または特定のclientInfo.versionと完全に一致しない。 バージョンはクライアント ID コントラクトを追跡し、変更される可能性があります。プレフィックスの一致により、バージョン変更後もゲートが機能し続けることができます。
# Correct: case-insensitive prefix match
copilot-cowork
# Incorrect: exact match breaks when the version changes
copilot-cowork/1.0
ゲートに適したチャネルを選択してください
2 つのチャネルのスコープは異なるため、サーバーがゲートを適用する方法に一致するものをキーにしてください:
-
User-Agentヘッダーは、tools/listやtools/callを含むすべての要求に存在します。 要求ごとにゲートまたは属性を設定する場合は、このヘッダーをキーにします。 -
clientInfoは、initializeハンドシェイクでのみ送信されます。 接続時に セッションごとに ゲートする場合は、そこで読み取ることができますが、その後の要求では繰り返されません。
ID に含まれるものと含まないもの
ID は ソフトウェア にのみ名前を付けます。 これはすべての Cowork ユーザーと接続で同じであり、ユーザー ID が保持されることはありません。 ユーザー ID は、コネクタの認証構成が定義する承認フローに残ります。
| ID には次のものが含まれます | この ID には、 |
|---|---|
安定したソフトウェア名 (copilot-cowork) とコントラクト バージョン |
任意のテナント、ユーザー、セッション、または会話識別子 |
| すべての要求とすべての接続で同じ値にする | コネクタごとの修飾子 |
コネクタごとの修飾子がないため、現在のところ、この ID を使用して、呼び出しを行ったコネクタを見分けたり、公開された Microsoft プラグインを同じ URL を指すサイドロードされたサーバーから分離したりすることはできません。 その区別が必要な場合は、クライアント ID ではなく、コネクタの承認構成を通じて適用します。
一般的な質問
Claude CodeでM365パッケージのスキルを使用できますか?
Yes. スキル フォルダーには、標準のエージェント スキルが含まれています。
wiqd plugin export --format claude-pluginを実行してClaudeコードレイアウトを生成するか、スキルフォルダーをコピーして任意のClaudeコードプロジェクトで.claude/skills/します。
リモート コネクタは必要ですか?
No. スキル専用パッケージは、プロンプトベースのワークフローに適しています。 コネクタは、スキルが外部システムからのライブ データを必要とする場合にのみ必要です。
プラグイン スキルと組み込みスキルの違いは何ですか?
プラグイン スキルは、API のソース "package" と共に表示されます。 同じ名前の組み込みスキルを上書きすることはできません。 管理 で展開されたパッケージは isAdminDeployed: true を示します。
IT 管理者は、使用できるプラグインを制御できますか?
Yes. Standard M365 管理コントロールが適用されます: テナント レベルの許可/ブロック リスト、管理者が管理するデプロイ、コンプライアンス ポリシー。
プラグインが取り消された場合はどうなりますか?
次の同期サイクルで、そのパッケージのスキルとコネクタはユーザーのセッションから削除されます。 アクティブな会話は中断されませんが、新しいセッションにはパッケージの機能がありません。
パッケージあたりのスキルの最大数は?
20 のスキル (ASKILL-M002 による)。 コネクタの場合、制限はパッケージあたり 10 個です。
スキルは同じパッケージのコネクタ ツールを参照できますか?
はい、そうすべきです。
SKILL.md ワークフローでツールに明示的に名前を付けます (たとえば、"search_case_law ツールを使用して...")。 エージェントは実行時に接続します。
プラグインのツールは Cowork ワークスペースからのファイルを受け入れますか?
Yes. ツール パラメーターを contentEncoding: base64 で宣言し、サーバーを呼び出す前にCoworkユーザーのワークスペース ファイルを base64 コンテンツに解決します。 モデルはファイル コンテンツではなくファイル パスを渡すため、大きなファイルはモデルのコンテキストを消費しません。 宣言の詳細と制限については、「Cowork ワークスペースからファイルを受け入れる」を参照してください。
パッケージの確定的な GUID を生成する操作方法
wiqd plugin create アプリ ID が生成され、ピン留めされます。 変換スクリプトはプラグイン名の UUID v5 (SHA-1 ベース) を使用するため、変換を 2 回実行すると同じ GUID が生成されます。 手動パッケージ化の場合は、任意の GUID ジェネレーターを使用します。 バージョン間で安定性を保つようにしてください。
ターゲットにすべきマニフェスト バージョンはどれですか?
wiqd を使用してビルドしている場合は、1.29 を目標にします。wiqd は自動的にピン留めされます。 1.29 では、 agentConnectors[] エントリは URL のみであり、 mcpToolDescription は省略可能です。 この記事の手書きの例では 1.28 を使用します。ここで mcpToolDescription が必要であり、ファイル名は ZIP 内にする必要があります。
atk import openplugin プラグイン名の UUID v5 (SHA-1 ベース) を使用します。 インポートを 2 回実行すると、同じ GUID が生成されます。 独自に設定するには、 --app-id を渡します。 手動パッケージ化の場合は、任意の GUID ジェネレーターを使用します。 バージョン間で安定性を保つようにしてください。