<img height="1" width="1" style="display:none" src="https://www.facebook.com/tr?id=139163818022217&amp;ev=PageView&amp;noscript=1"> <img height="1" width="1" style="display:none" src="https://www.facebook.com/tr?id=271598307802760&amp;ev=PageView&amp;noscript=1">

Box MCPとBox AIによる再利用可能なメタデータ抽出エージェントスキルの構築

 公開日:2026.02.16  更新日:2026.06.10

ドキュメントからのメタデータの抽出は、一般的なタスクです。Boxでは、ID、請求書、契約書、フォームなどのメタデータが検索、自動化、リテンション、下流のワークフローの基盤としてよく使用されています。しかし、このようなデータを大量に入力するには時間がかかることがあります。

この記事では、Boxフォルダから直接ファイルを読み込み、Box AIを使って構造化された値を抽出し、それらをBoxメタデータとして書き戻すテンプレート駆動型のエージェントスキルについて説明します。なお、これらのファイルは、検索、自動化、下流のワークフローを引き続き実行する記録システムとしてBox内に保持されます。

エージェントスキルとは

エージェントスキルとは、エージェントが何ができるかを定義するための移植可能な、宣言的な仕組みです。

ワークフローを長いプロンプトでコード化したり、複数のプロジェクトで同じ指示を実行したりするのではなく、エージェントスキルでは「Boxファイルからメタデータを抽出して書き戻す」などの機能を再利用可能な定義 (SKILL.md) としてパッケージ化します。この定義を、エージェント環境にインストールできます。

Boxのような実運用されているシステムとやり取りできるよう、このデモで使用するスキルではMCP (Model Context Protocol) を利用しています。MCPはファイル、メタデータ、Box AIを、エージェントが直接呼び出せるツールとして公開します。これにより、ワークフローを宣言的に定義でき、手作業でAPIクライアントを記述したり接続リクエストを行ったりする必要がなくなります。

実際には、そのようなワークフローは一度だけ構造化された方法で定義されます。スキルは、MCPBox AIなどのツールの調整を担います。同じ機能を複数のフォルダ、スキーマ、プロジェクトに対して再利用できます。

インストールしたスキルは、多くの場合、以下のように1つのコマンドのような形で使用します。

メタデータテンプレートキー <TEMPLATE_KEY> を使ってID <FOLDER_ID> のBoxフォルダに対して、box-metadata-extractionスキルを使用してください。

エージェントがこの調整を担い、スキルによってルールが定義されます。

このことがメタデータワークフローで重要である理由

Boxでは、メタデータを使って構造化フィールド (メタデータテンプレートで定義) をファイルやフォルダに関連付けることができます。構造化フィールドの例としては、請求書番号、ベンダー、有効期限などがあり、APIを通じて検索、自動化、アクセスが可能な主要データとして扱われます。

メタデータはスキーマ駆動型であるため、抽出ワークフローは繰り返しが可能なものとして作成される傾向があります。ターゲットファイルを特定し、既知の一連のフィールドを抽出し、既存データを上書きせずに安全に値を書き戻すという、同じ手順が毎回適用されます。

そのため、メタデータ抽出はエージェントスキルに最も適した処理と言えます。エージェントスキルとMCPを組み合わせることで、一度コード化すれば (APIのグルーコードを作成しなくても)、複数のフォルダやドキュメントタイプ、メタデータテンプレートに対して再利用できます。テンプレートによって抽出する対象を定義し、スキルによって安全に抽出する方法を定義し、MCPによってBoxとのやり取りをバックグラウンドで処理します。

メタデータが検索、自動化、下流システムの基盤となるため、結果としてワークフローを再利用しやすくなり、安全な再実行が可能になり、理解もしやすくなります。

アーキテクチャの概要

大まかに言うと、ワークフローは次のようになります。

エージェント (Cursor)
  → エージェントスキル (SKILL.md)
      → Box MCP
          → Box AI (構造化された抽出)
          → Boxメタデータ (読み取り/書き込み)

エージェントはプロセスを調整し、Boxは引き続き記録システムとして機能し、MCPはエージェントが呼び出せるツールとしてBoxの機能を公開します。

前提条件

スキルを実行する前に、以下のものを準備してください。

  1. Cursorで動作するBox MCPサーバー (ツールが表示可能)

  2. Boxメタデータテンプレート (template_keyを推奨)

  3. ファイルが保存されているBoxフォルダ (最上位のみ)

エージェントスキルのインストール

リポジトリのルートから:

 npx ai-agent-skills install ./box-metadata-extraction --agent cursor 

インストール後にCursorを再起動してスキルを読み込みます。

スキルの定義 (SKILL.md)

ワークフローの動作はSKILL.mdで宣言的に定義されています。ファイル全体については説明しませんが、スキルの主要な技術的特性を以下に示します。

  • テンプレート駆動型抽出: このスキルは (キーまたは名前で指定された) Boxメタデータテンプレートを入力として受け取り、そのスキーマを使って、抽出するフィールドを正確に決定します。ドキュメント固有のロジックはハードコードされません。
  • MCPベースのBoxアクセス: Boxとのすべてのやり取り (フォルダコンテンツのリストの取得、Box AIによるコンテンツ抽出、メタデータの読み取りまたは書き込み) はBox MCPツールを通じて実行されます。カスタムAPIクライアントやグルーコードは不要です。
  • メタデータの安全な書き込み: スキルはメタデータを書き込む前に、既存のメタデータインスタンスがあるかどうかを確認し、現在空のフィールドのみに入力します。既存の値は、決して上書きされません。
  • Boxネイティブ処理: ドキュメントはワークフローが終了するまでBox内に残ります。ファイルはダウンロードされず、ローカルで保持されることもありません。Boxは引き続き、コンテンツとメタデータの両方の記録システムとして機能します。

スキル定義全体については、GitHubでご確認ください。この投稿にも、参照用としてSKILL.md全体を掲載しています。

Cursorでのスキル実行

インストール後は、Cursorチャットから直接スキルを起動します。

まずはdry runから

以下にようにして、コードを一切作成しなくても、アクセスと抽出のロジックを検証できます。

メタデータテンプレートキー <TEMPLATE_KEY> を使ってID <FOLDER_ID> のBoxフォルダに対して、box-metadata-extractionスキルを使用してください。dry_run=true limit=1

想定される動作:

  • Box MCPツールが呼び出されます (ファイルのリスト取得、テンプレートの読み込み、値の抽出)。
  • Cursorは、想定される書き込み内容の概要を返します。
0_4CjY1fWqLhcuz-fG

単一のファイルに対するメタデータの書き込み

dry runの結果が正常であれば、以下を実行します。

メタデータテンプレートキー <TEMPLATE_KEY> を使ってID <FOLDER_ID> のBoxフォルダに対して、box-metadata-extractionスキルを使用してください。dry_run=false limit=1

これによりフォルダ内にある1つのファイルについてのみメタデータが更新されるため、大規模に実行する前に動作を検証する目的に役立ちます。

0_ATJd5uMiWN7_Zpml

単一のファイルで結果を検証した後は、limitパラメータをはずしてワークフローをフォルダ全体に対して実行するだけです。同じ抽出および書き戻しのロジックが、最上位のファイルすべてに一貫して適用されます。

Boxでの結果の確認

Boxで処理済みファイルを開いて [メタデータ] パネルを展開します。次の項目が表示されます。

  • 適用されたメタデータテンプレート
  • 抽出された入力済みフィールド
  • 値のない空白のままのフィールド
  • 変更されなかった既存の値
0_7ZZ6ik_CfFeAPO14

スキル定義全体 (SKILL.md)

これまでの説明で使用したSKILL.mdの全体を以下に示します。

# Box Metadata Extraction - Template-Driven (Box MCP)## Purpose
Extract structured metadata from documents stored in a Box folder and write it back using a specified Box metadata template.This skill is designed to be reusable across document types by taking a `template_key` as input and using Box AI + Box metadata tools to populate metadata instances on each file.---## When to Use
Use this skill when you want to:
- Populate Box metadata for all files in a folder
- Reuse one workflow across many document types
- Drive extraction from an existing Box metadata template (by key or name)Example prompts:
- “Use the box-metadata-extraction skill on the Box folder with ID <FOLDER_ID> using metadata template key identifications.”
- “Use the box-metadata-extraction skill on this Box folder shared link <URL> using metadata template name identifications.”---## Inputs### Required
Provide ONE of:
- **folder_id** (string), OR
- **folder_shared_link_url** (string)And ONE of:
- **template_key** (string), OR
- **template_name** (string)### Optional
- **dry_run** (boolean, default: false)  
  If true, do not write metadata back to Box. Only report what would be written.- **limit** (number)  
  Maximum number of files to process (useful for demos).- **use_enhanced_extraction** (boolean, default: false)  
  If true, prefer enhanced Box AI extraction for harder scans.---## Guardrails (Hard Rules)
- Documents are stored only in Box. Do not rely on local document files.
- Do not recurse into subfolders (top-level files only).
- Do not overwrite existing metadata values: fill empty fields only.
- Avoid downloading and saving files locally (do not call file download with saving enabled).---## Tooling (What to Use)
Use these Box MCP tools as needed:### Resolve folder and list files
- `box_shared_link_folder_find_by_shared_link_url_tool` (if using a folder shared link)
- `box_folder_items_list_tool` (list top-level items; keep `is_recursive=false`)  ### Read file content (only if needed for fallback)
- Prefer `box_file_text_extract_tool` to extract readable text/markdown from a file### Load template schema (optional but recommended)
- `box_metadata_template_get_by_key_tool` (preferred)
- `box_metadata_template_get_by_name_tool` (fallback)### Extract structured data
- `box_ai_extract_structured_using_template_tool` (preferred)
- `box_ai_extract_structured_enhanced_using_template_tool` (if `use_enhanced_extraction=true`)### Read/write metadata instances
- `box_metadata_get_instance_on_file_tool`
- `box_metadata_set_instance_on_file_tool` (if no instance exists)
- `box_metadata_update_instance_on_file_tool` (update only empty fields)---## Workflow### Step 1 — Resolve the target folder
If `folder_id` is provided:
- Use it directly.If `folder_shared_link_url` is provided:
- Resolve the folder using `box_shared_link_folder_find_by_shared_link_url_tool`.
- Use the returned folder id.### Step 2 — List top-level files
- Call `box_folder_items_list_tool(folder_id, is_recursive=false)`.
- Filter results to files only.
- If `limit` is provided, process only the first N files.### Step 3 — Resolve template key (if only name provided)
- If `template_key` is provided, use it.
- Else look up the template using `box_metadata_template_get_by_name_tool(template_name)` and extract its key.(Optionally) fetch template definition using `box_metadata_template_get_by_key_tool` to learn field names/types for normalization.### Step 4 — For each file, check existing metadata
- Call `box_metadata_get_instance_on_file_tool(file_id, template_key)`.
- Determine which template fields are already populated.
- Only attempt to fill missing/empty fields.### Step 5 — Extract structured data for this file
Preferred path:
- Call Box AI template extraction for this file:
  - `box_ai_extract_structured_using_template_tool(file_ids=[file_id], template_key=template_key)`
  - If `use_enhanced_extraction=true`, use the enhanced variant.Fallback path (only if template extraction fails or returns empty):
- Use `box_file_text_extract_tool(file_id)` to retrieve text.
- Then extract only template-defined fields.---### Step 6 — Normalize and filter extracted values
- Normalize dates to `YYYY-MM-DD` when possible.
- Trim whitespace.
- Preserve casing for names and proper nouns.**Important:**
- If a value does not exist in the document, **do not write anything** for that field.
- Do not invent, infer, or synthesize values.
- Only include fields with non-empty values that are clearly supported by the document content.---### Step 7 — Write metadata back (unless dry_run)
- Build `metadata_values` using only fields that:
  1) were extracted with a real, non-empty value, AND
  2) are currently empty on the file.If no metadata instance exists:
- Use `box_metadata_set_instance_on_file_tool(file_id, template_key, metadata_values)`If an instance exists:
- Use `box_metadata_update_instance_on_file_tool(file_id, template_key, metadata_values)`Never overwrite existing non-empty fields.---### Step 8 — Output summary
Return a summary table showing:
- file name
- file id
- template_key
- fields written (with full values)
- fields skipped (already present or not found)Do not redact values in the summary output.---## Failure Handling
- If one file fails, continue with the remaining files and report the error.
- If the template cannot be resolved, stop and explain what is required.
- If extraction yields no values for a file, report “no data extracted” and continue.---## Expected Output
- Full metadata values written to Box for extracted fields
- Clear visibility of extracted values in both chat output and Box UI
- No local document files required
(参考訳)
# Box メタデータ抽出 - テンプレート駆動型 (Box MCP)## 目的
Boxフォルダに保存されたドキュメントから構造化メタデータを抽出し、指定したBoxメタデータテンプレートを使って書き戻します。このスキルは、入力として`template_key`を受け取り、Box AIとBoxメタデータツールを使ってファイルごとにメタデータインスタンスを入力することで、ドキュメントタイプ間で再利用できるよう設計されています。---## 使用に適した状況
このスキルは、以下の用途で使用します。
- フォルダ内のすべてのファイルのBoxメタデータを入力する
- 多数のドキュメントタイプで1つのワークフローを再利用する
- 既存のBoxメタデータテンプレートからの抽出を起動する (キーまたは名前を指定) プロンプトの例:
- “メタデータテンプレートキーIDを使ってID <FOLDER_ID> のBoxフォルダに対して、box-metadata-extractionスキルを使用してください。”
- “メタデータテンプレート名IDを使ってこのBoxフォルダ共有リンク <URL> に対して、box-metadata-extractionスキルを使用してください。”---## 入力### 必須
 以下のどちらかを指定する:
- **folder_id** (文字列)、または
- **folder_shared_link_url** (文字列) かつ以下のどちらか:
- **template_key** (文字列)、または
- **template_name** (文字列)### 省略可
- **dry_run** (ブール値、デフォルト: false)  
  trueの場合はメタデータをBoxに書き戻さないでください。書き込まれると想定される内容だけを報告します。- **limit** (数値)  
  処理される最大ファイル数 (デモに有用)。- **use_enhanced_extraction** (ブール値、デフォルト: false)  
  trueの場合は、より詳細なスキャンのために強化されたBox AI抽出を推奨します。---## ガードレール (厳格なルール)
- ドキュメントはBoxにのみ保存されます。ローカルのドキュメントファイルに依存しないでください。
- サブフォルダ内を再帰的に処理しないでください (最上位のファイルのみ)。
- 既存のメタデータ値を上書きしないでください: 空のフィールドのみに入力します。
- ローカルでのファイルのダウンロードと保存を避けます (保存を有効にしたままファイルダウンロードを呼び出さないこと)。---## ツール (使用するもの)
必要に応じて以下のBox MCPツールを使用します。### フォルダを解決し、ファイルリストを取得する
- `box_shared_link_folder_find_by_shared_link_url_tool` (フォルダの共有リンクを使用している場合)
- `box_folder_items_list_tool` (最上位項目のリストを取得し、'is_recursive=false'を保持) ### ファイルの内容を読み取る (フォールバックに必要な場合のみ)
- ファイルから読み取り可能なテキスト/マークダウンを抽出するには`box_file_text_extract_tool`を推奨します### テンプレートスキーマを読み込む (省略可だが推奨)
- `box_metadata_template_get_by_key_tool` (推奨)
- 'box_metadata_template_get_by_name_tool' (フォールバック)### 構造化データを抽出する
- `box_ai_extract_structured_using_template_tool` (推奨)
- `box_ai_extract_structured_enhanced_using_template_tool` (`use_enhanced_extraction=true`の場合)### メタデータインスタンスを読み取る/書き込む
- `box_metadata_get_instance_on_file_tool`
- `box_metadata_set_instance_on_file_tool` (インスタンスが存在しない場合)
- `box_metadata_update_instance_on_file_tool` (空のフィールドのみ更新)---## ワークフロー### ステップ1 — ターゲットフォルダを解決する
`folder_id` が指定されている場合:
- 直接それを使用します。`folder_shared_link_url` が指定されている場合:
-  `box_shared_link_folder_find_by_shared_link_url_tool`を使用してフォルダを解決します
- 返されたフォルダIDを使用します。### ステップ2 — 最上位ファイルの一覧を取得する
- `box_folder_items_list_tool(folder_id, is_recursive=false)`を呼び出します。
- 結果にフィルタをかけてファイルのみに絞り込みます。
- `limit`が指定されている場合、最初のN個のファイルのみを処理します。### ステップ3 — テンプレートキーを解決する (名前のみが指定されている場合)
- `template_key`が指定されている場合は、それを使用します
- それ以外の場合は `box_metadata_template_get_by_name_tool(template_name)` を使ってテンプレートを検索し、そのキーを抽出します。(省略可) `box_metadata_template_get_by_key_tool`を使ってテンプレート定義を取得し、正規化のためにフィールド名/フィールドタイプを学習します。### ステップ4 — ファイルごとに既存のメタデータを確認する
- `box_metadata_get_instance_on_file_tool(file_id, template_key)`を呼び出します。
- 入力済みのテンプレートフィールドを特定します。
- 不足しているフィールド/空のフィールドのみに入力を試行します。### ステップ5 — このファイルの構造化データを抽出する
推奨されるパス:
- このファイルのBox AIテンプレート抽出を呼び出します:
  - `box_ai_extract_structured_using_template_tool(file_ids=[file_id], template_key=template_key)`
  - `use_enhanced_extraction=true`の場合は強化されたバリエーションを使用します。フォールバックパス (テンプレート抽出が失敗または空が返された場合のみ):
- テキストを取得するには`box_file_text_extract_tool(file_id)`を使用します。
- 次にテンプレートで定義されたフィールドのみを抽出します。---### ステップ6 — 抽出した値を正規化し、それにフィルタをかける
- 可能であれば日付を`YYYY-MM-DD`に正規化します。
- 空白を削除します。
- 名前と固有名詞の大文字小文字の表記を保持します。**重要:**
- ドキュメントに値が存在しない場合は、そのフィールドについて**何も記述しないでください**。
- 値を捏造、推測、合成しないでください。
- ドキュメントの内容によって明確にサポートされている、空以外の値のフィールドのみを含めます。---### ステップ7 — メタデータを書き戻す (dry_run以外の場合)
- 以下に当てはまるフィールドのみを使用して`metadata_values`を構築します。
  1) 以前に空以外の実際の値があり、抽出済みであり、かつ
  2) 現在、ファイルでは空になっている。メタデータインスタンスが存在しない場合:
- `box_metadata_set_instance_on_file_tool(file_id, template_key, metadata_values)`を使用します インスタンスが存在する場合:
- `box_metadata_update_instance_on_file_tool(file_id, template_key, metadata_values)`を使用します 既存の空以外のフィールドを上書きしないでください。---### ステップ8 — 要約を出力する
以下を示す概要表を返します:
- ファイル名
- ファイルID
- template_key
- (完全な値がある) 書き込まれたフィールド
- スキップされたフィールド (既に存在しているか見つからない) 要約の出力値を修正しないでください。---## エラー処理
- 1つのファイルでエラーが発生した場合は、残りのファイルを処理しエラーを報告します。
- テンプレートが解決できない場合は、停止して何が必要であるかを説明してください。
- 抽出でファイルの値が出力されない場合は“データ抽出なし”と報告し、続行します。---## 期待される出力
- Boxに書き込まれた、抽出されたフィールドの完全なメタデータ値
- チャット出力とBox UIの両方で抽出済み値を明確に表示
- ローカルドキュメントファイルは不要

スキルを使用する際に、上に示した定義を編集する必要はありません。ここでスキル定義全体を紹介したのは、動作のわかりやすさと、適応しやすさのためです。

テンプレート駆動型スキルが再利用しやすい理由

スキルをインストールした後、入力 (ファイルを含むBoxフォルダとスキーマを定義するメタデータテンプレート) を変更するだけで、同じワークフローを再利用できます。

このスキルはテンプレート駆動型なので、事前にドキュメントタイプについて知る必要はありません。メタデータテンプレートによって、抽出されるフィールドが決定されます。対象のファイルが請求書、契約書、ID、その他の文書であっても、スキルによって同じ安全な抽出ロジックが適用されます。

これにより、複数のチームやユースケースでワークフローを簡単に再利用できます。同じスキルを異なるフォルダやテンプレートに適用できます。プロンプトを書き直したり、ロジックを複製したり、ドキュメント固有のバリエーションを作成したりする必要はありません。動作は一貫しています。変わるのは入力だけです。

リポジトリと次のステップ

GitHubリポジトリ: https://github.com/box-community/box-mcp-agent-skill-metadata-extraction

次のステップとして、以下のことができます。

  • メタデータを記述する前にレビューや承認のステップを追加する
  • 深い階層構造に対応するためにフォルダ再帰を導入する
  • このスキルと他のスキルを連鎖させる

エージェントスキルを使用すると、繰り返し可能なコンテンツワークフローを簡単に再利用可能な構成要素へと変えることができます。特にBox MCPBox AIと組み合わせた場合、その効果を実感できます。


RECENT POST「開発者」の最新記事


開発者

Box、MCPアプリのサポート対象をChatGPT、Microsoft 365 Copilot、Gleanに拡大

開発者

AIエージェントにコンテンツの活用方法を教える: OpenAI Codex向けBox Skillの構築

開発者

Box AIとOpenAI Agents SDKで自律的なドキュメントワークフローを実行

開発者

Box CLI: 開発者とAIエージェントのためのコンテンツCLI