Copilot Cowork 用のプラグインをビルドする

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パッケージに直接変換します。

  1. CLI をインストールします (バージョン 1.1.12 以降が必要):

    npm install -g @microsoft/m365agentstoolkit-cli
    
  2. バージョンを確認します。

    atk --version
    
  3. プラグインをインポートします。

    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 コマンド ライン インターフェイスを使用してアプリをサイドロードします。

  1. npm から @microsoft/m365agentstoolkit-cli をインストールします。

    npm install -g @microsoft/m365agentstoolkit-cli
    
  2. 次を実行してインストールを確認します。

    atk --version
    
  3. Microsoft 365 職場アカウントで認証します。

    atk auth login
    
  4. 職場アカウントにサインインして、エージェント パッケージをインストールします。 ファイル パスを ZIP パッケージの場所に置き換えます。

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

    インストールが成功すると、アカウントの TitleId と AppId を含む出力が返されます。

  5. 後で更新またはアンインストールするときに使用するために、これらの ID を保存してください。

Microsoft 365 Agents Toolkit コマンド ライン インターフェイスに関する詳細情報。

手順 8: テナントに公開する

管理センターでパッケージをアップロードして、[検出] セクションにプラグインを一覧表示します。organization 内の誰もがパッケージを見つけることができます。

  1. M365 管理センターを開き>アプリの管理>カスタム アプリをアップロードします。
  2. 省略記号ボタン (...) を選択 >エージェントを追加します。
  3. .zip パッケージをアップロードします。
  4. 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 ジェネレーターを使用します。 バージョン間で安定性を保つようにしてください。