mcpField
M
microsoft-onedrive

microsoft-onedrive

github.com/acedatacloudドキュメント17211 回インストール今日更新
リポジトリ

microsoft-onedrive について

microsoft-onedriveは、Microsoft Graph経由でOneDriveとSharePointのファイルを操作するコマンドラインスキルです。クラウドファイルを管理する人向けで、検索や転送、整理に対応し、慎重な変更には事前確認を求めます。

主な機能

  1. 01接続アカウントの確認
  2. 02ファイルの閲覧と検索
  3. 03ファイルのダウンロードとアップロード
  4. 04フォルダー作成と項目の移動
  5. 05共有リンクの作成
  6. 06SharePointサイトの一覧表示

活用シーン

  1. 01キーワードで文書を検索
  2. 02ファイルのダウンロードまたはアップロード
  3. 03ファイルをフォルダーに整理
  4. 04確認後にファイルを共有

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/acedatacloud/skills --skill microsoft-onedrive

インストール後、Claude Code で/microsoft-onedriveを入力して読み込まれたか確認します。

詳細

curl + jq を使って、OneDrive / SharePoint の Microsoft Graph を操作します。 ユーザーの OAuth ベアラートークンは $MICROSOFT_ONEDRIVE_TOKEN に格納されています。各呼び出しで、Authorization: Bearer $MICROSOFT_ONEDRIVE_TOKEN を指定する必要があります。このトークンには、インストール時にユーザーが同意した OneDrive スコープ(Files.Read、Files.Read.All、任意で Files.ReadWrite.All、Sites.Read.All)がすでに含まれています。

Graph API は標準の JSON を返します。エラーは {"error": {"code": "...", "message": "..."}} という JSON で返されるため、そのエラーをそのままユーザーに表示してください。

必ず最初に /me を実行して、接続が機能することを確認し、操作対象のアカウント/ドライブを把握してください。

レシピ

認証を確認する(必ず最初に実行)
curl -sS -H "Authorization: Bearer $MICROSOFT_ONEDRIVE_TOKEN" \
  https://graph.microsoft.com/v1.0/me \
  | jq '{displayName, mail, userPrincipalName}'

401 InvalidAuthenticationToken が返された場合はトークンの有効期限が切れています。その旨を報告してください。ユーザーはコネクターを再インストールする必要があります。

ルート内のファイルを一覧表示する
curl -sS -H "Authorization: Bearer $MICROSOFT_ONEDRIVE_TOKEN" \
  "https://graph.microsoft.com/v1.0/me/drive/root/children?\$top=20&\$select=id,name,size,lastModifiedDateTime,folder,file" \
  | jq '.value[] | {id, name, size, kind: (if .folder then "folder" else .file.mimeType end), modified: .lastModifiedDateTime}'

フォルダーには "folder":{"childCount":N}、ファイルには "file":{"mimeType":"..."} が含まれます。

パスでサブフォルダー内のファイルを一覧表示する
curl -sS -H "Authorization: Bearer $MICROSOFT_ONEDRIVE_TOKEN" \
  "https://graph.microsoft.com/v1.0/me/drive/root:/Documents:/children?\$top=20&\$select=id,name,size,lastModifiedDateTime"

パスでは : をパスとセグメントの区切り文字として使用します(例::/Documents/Q1:/children)。

ファイルを検索する(再帰検索)
curl -sS -H "Authorization: Bearer $MICROSOFT_ONEDRIVE_TOKEN" \
  --data-urlencode "q=quarterly report" --get \
  "https://graph.microsoft.com/v1.0/me/drive/root/search(q='quarterly report')?\$top=25&\$select=id,name,size,webUrl,lastModifiedDateTime"

空のクエリで search(q='') を実行すると 400 が返されます。キーワードなしでファイル形式から検索するには、拡張子で検索してください(例:search(q='.pdf'))。

最近更新されたファイル(フォルダー横断)
curl -sS -H "Authorization: Bearer $MICROSOFT_ONEDRIVE_TOKEN" \
  "https://graph.microsoft.com/v1.0/me/drive/recent?\$top=25" \
  | jq '.value[] | {name, modified: .lastModifiedDateTime, parent: .parentReference.path}'
自分と共有されているファイル
curl -sS -H "Authorization: Bearer $MICROSOFT_ONEDRIVE_TOKEN" \
  "https://graph.microsoft.com/v1.0/me/drive/sharedWithMe?\$top=25" \
  | jq '.value[] | {name, size: .size, owner: .remoteItem.shared.owner.user.displayName}'
アイテム ID でファイルをダウンロードする
# /content returns 302 to a pre-signed URL — let curl follow it.
curl -sSL -H "Authorization: Bearer $MICROSOFT_ONEDRIVE_TOKEN" \
  "https://graph.microsoft.com/v1.0/me/drive/items/${ITEM_ID}/content" \
  -o "$SKILL_DIR/tmp/$(basename "$NAME")"
パスでファイルをダウンロードする
# URL-encode each path segment with jq -Rr @uri (or use printf encoding).
ENCODED=$(printf '%s' "Documents/report.docx" | jq -sRr @uri)
curl -sSL -H "Authorization: Bearer $MICROSOFT_ONEDRIVE_TOKEN" \
  "https://graph.microsoft.com/v1.0/me/drive/root:/${ENCODED}:/content" \
  -o report.docx
小さなファイル(4 MB 未満)をアップロードする
curl -sS -X PUT \
  -H "Authorization: Bearer $MICROSOFT_ONEDRIVE_TOKEN" \
  -H "Content-Type: application/octet-stream" \
  --data-binary @/tmp/report.pdf \
  "https://graph.microsoft.com/v1.0/me/drive/root:/Documents/report.pdf:/content"

4 MB を超えるファイルには、アップロードセッション(チャンク分割)を使用してください。

# 1) create session
SESSION=$(curl -sS -X POST \
  -H "Authorization: Bearer $MICROSOFT_ONEDRIVE_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"item":{"@microsoft.graph.conflictBehavior":"rename"}}' \
  "https://graph.microsoft.com/v1.0/me/drive/root:/Documents/big.zip:/createUploadSession")
UPLOAD_URL=$(echo "$SESSION" | jq -r .uploadUrl)
# 2) PUT in 10 MiB chunks with Content-Range: bytes <start>-<end>/<total>
# (See Microsoft Graph docs for the chunking loop; jq + dd makes this trivial.)
フォルダーを作成する
curl -sS -X POST \
  -H "Authorization: Bearer $MICROSOFT_ONEDRIVE_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"name":"Reports","folder":{},"@microsoft.graph.conflictBehavior":"rename"}' \
  https://graph.microsoft.com/v1.0/me/drive/root/children

@microsoft.graph.conflictBehavior:rename(自動でサフィックスを追加)、replace(上書き)、fail(存在する場合はエラー)。既定値は fail です。

名前を変更する/移動する(PATCH)

⚠️ 実行前に、移動元と移動先を必ず表示してください。

# Rename only
curl -sS -X PATCH \
  -H "Authorization: Bearer $MICROSOFT_ONEDRIVE_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"name":"renamed.docx"}' \
  "https://graph.microsoft.com/v1.0/me/drive/items/${ITEM_ID}"

# Move to a different folder
curl -sS -X PATCH \
  -H "Authorization: Bearer $MICROSOFT_ONEDRIVE_TOKEN" \
  -H "Content-Type: application/json" \
  -d "$(jq -nc --arg pid "$NEW_PARENT_ID" '{parentReference:{id:$pid}}')" \
  "https://graph.microsoft.com/v1.0/me/drive/items/${ITEM_ID}"
削除する

⚠️ 先にアイテム名を取得し、ユーザーに必ず確認してください。

# 1) Show what will be deleted
curl -sS -H "Authorization: Bearer $MICROSOFT_ONEDRIVE_TOKEN" \
  "https://graph.microsoft.com/v1.0/me/drive/items/${ITEM_ID}?\$select=name,size,lastModifiedDateTime" \
  | jq '"Delete \(.name) (\(.size) bytes, modified \(.lastModifiedDateTime))?"'

# 2) After user confirms (returns 204 No Content)
curl -sS -X DELETE -H "Authorization: Bearer $MICROSOFT_ONEDRIVE_TOKEN" \
  "https://graph.microsoft.com/v1.0/me/drive/items/${ITEM_ID}" \
  -w "HTTP %{http_code}\n"
共有リンクを作成する

⚠️ 共有するとデータが外部に公開されるため、実行前にユーザーに確認してください。

curl -sS -X POST \
  -H "Authorization: Bearer $MICROSOFT_ONEDRIVE_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"type":"view","scope":"organization"}' \
  "https://graph.microsoft.com/v1.0/me/drive/items/${ITEM_ID}/createLink" \
  | jq '.link.webUrl'

type:view | edit | embed。scope:anonymous | organization | users。

SharePoint サイトを一覧表示する

Sites.Read.All が必要です。

curl -sS -H "Authorization: Bearer $MICROSOFT_ONEDRIVE_TOKEN" \
  "https://graph.microsoft.com/v1.0/sites?search=*&\$top=10" \
  | jq '.value[] | {id, name: .displayName, webUrl}'

サイト内のファイル:

curl -sS -H "Authorization: Bearer $MICROSOFT_ONEDRIVE_TOKEN" \
  "https://graph.microsoft.com/v1.0/sites/${SITE_ID}/drive/root/children?\$top=20"

OData クイックリファレンス

パラメーター例
$selectid,name,size,lastModifiedDateTime
$filtername eq 'report.docx'、size gt 1000000
$orderbylastModifiedDateTime desc
$topブラウズでは 10、検索では 25
$expandchildren、permissions

シェルで $ やスペースを引用符で囲む問題を避けるには、curl で --data-urlencode "$key=$value" --get を使用してください。

ルール

  • 必ず $select を指定してください。既定では、アイテムごとに 30 個以上のフィールドが返されます。
  • ブラウズでは $top=10、検索では 25 を指定してください。依頼がない限り、50 件を超えてページを取得しないでください。
  • パス内で ID を使用する場合は、URL エンコードしてください。ID に +、/、= が含まれることがあります。jq -sRr @uri を使用してください。
  • 空の search(q='') は 400 を返します。キーワードがない場合は、拡張子で検索してください。

重要:破壊的な操作にはユーザーの同意が必要です

明示的な確認なしに、削除、上書き、共有を行わないでください。手順は 準備 → 提示 → 実行 です。

操作ユーザーに提示する内容
削除「'{name}'({size} バイト、更新日時 {date})を削除しますか?」
上書き(@microsoft.graph.conflictBehavior=replace)「'{name}' を上書きしますか?既存のファイル:{size}、更新日時 {date}」
共有(createLink)「'{name}' の {scope} アクセス用 {type} リンクを作成しますか?」
移動「'{name}' を {old folder} から {new folder} に移動しますか?」
一括操作件数とサンプル:「/Reports/ 内の 12 個のファイルを削除しますか?」

エラー

  • 401 InvalidAuthenticationToken → トークンの有効期限が切れています。ユーザーはコネクターを再インストールする必要があります。
  • 403 accessDenied → スコープが不足しています(例:読み取り専用トークンで書き込みを試みた場合)。書き込みスコープを選択してコネクターを再インストールするよう、ユーザーに依頼してください。
  • 429 TooManyRequests → Retry-After ヘッダー(秒単位)に従ってください。
  • 404 itemNotFound → ID またはパスが正しくありません。大文字と小文字を再確認してください。

参考資料

詳しくは、Microsoft のドキュメントをご覧ください。

コメント