โ† All skills
Tencent SkillHub ยท Productivity

Microsoft OneDrive

OneDrive API integration with managed OAuth via Microsoft Graph. Manage files, folders, and sharing. Use this skill when users want to upload, download, orga...

skill openclawclawhub Free
0 Downloads
0 Stars
0 Installs
0 Score
High Signal

OneDrive API integration with managed OAuth via Microsoft Graph. Manage files, folders, and sharing. Use this skill when users want to upload, download, orga...

โฌ‡ 0 downloads โ˜… 0 stars Unverified but indexed

Install for OpenClaw

Quick setup
  1. Download the package from Yavira.
  2. Extract the archive and review SKILL.md first.
  3. Import or place the package into your OpenClaw setup.

Requirements

Target platform
OpenClaw
Install method
Manual import
Extraction
Extract archive
Prerequisites
OpenClaw
Primary doc
SKILL.md

Package facts

Download mode
Yavira redirect
Package format
ZIP package
Source platform
Tencent SkillHub
What's included
SKILL.md, LICENSE.txt

Validation

  • Use the Yavira download entry.
  • Review SKILL.md after the package is downloaded.
  • Confirm the extracted package contains the expected setup assets.

Install with your agent

Agent handoff

Hand the extracted package to your coding agent with a concrete install brief instead of figuring it out manually.

  1. Download the package from Yavira.
  2. Extract it into a folder your agent can access.
  3. Paste one of the prompts below and point your agent at the extracted folder.
New install

I downloaded a skill package from Yavira. Read SKILL.md from the extracted folder and install it by following the included instructions. Tell me what you changed and call out any manual steps you could not complete.

Upgrade existing

I downloaded an updated skill package from Yavira. Read SKILL.md from the extracted folder, compare it with my current installation, and upgrade it while preserving any custom configuration unless the package docs explicitly say otherwise. Summarize what changed and any follow-up checks I should run.

Trust & source

Release facts

Source
Tencent SkillHub
Verification
Indexed source record
Version
1.0.3

Documentation

ClawHub primary doc Primary doc: SKILL.md 34 sections Open source page

OneDrive

Access the OneDrive API with managed OAuth authentication via Microsoft Graph. Manage files, folders, drives, and sharing with full CRUD operations.

Quick Start

# List files in OneDrive root python <<'EOF' import urllib.request, os, json req = urllib.request.Request('https://gateway.maton.ai/one-drive/v1.0/me/drive/root/children') req.add_header('Authorization', f'Bearer {os.environ["MATON_API_KEY"]}') print(json.dumps(json.load(urllib.request.urlopen(req)), indent=2)) EOF

Base URL

https://gateway.maton.ai/one-drive/v1.0/{resource} The gateway proxies requests to graph.microsoft.com and automatically injects your OAuth token.

Authentication

All requests require the Maton API key in the Authorization header: Authorization: Bearer $MATON_API_KEY Environment Variable: Set your API key as MATON_API_KEY: export MATON_API_KEY="YOUR_API_KEY"

Getting Your API Key

Sign in or create an account at maton.ai Go to maton.ai/settings Copy your API key

Connection Management

Manage your OneDrive OAuth connections at https://ctrl.maton.ai.

List Connections

python <<'EOF' import urllib.request, os, json req = urllib.request.Request('https://ctrl.maton.ai/connections?app=one-drive&status=ACTIVE') req.add_header('Authorization', f'Bearer {os.environ["MATON_API_KEY"]}') print(json.dumps(json.load(urllib.request.urlopen(req)), indent=2)) EOF

Create Connection

python <<'EOF' import urllib.request, os, json data = json.dumps({'app': 'one-drive'}).encode() req = urllib.request.Request('https://ctrl.maton.ai/connections', data=data, method='POST') req.add_header('Authorization', f'Bearer {os.environ["MATON_API_KEY"]}') req.add_header('Content-Type', 'application/json') print(json.dumps(json.load(urllib.request.urlopen(req)), indent=2)) EOF

Get Connection

python <<'EOF' import urllib.request, os, json req = urllib.request.Request('https://ctrl.maton.ai/connections/{connection_id}') req.add_header('Authorization', f'Bearer {os.environ["MATON_API_KEY"]}') print(json.dumps(json.load(urllib.request.urlopen(req)), indent=2)) EOF Response: { "connection": { "connection_id": "3f17fb58-4515-4840-8ef6-2bbf0fa67e2c", "status": "ACTIVE", "creation_time": "2026-02-07T08:23:30.317909Z", "last_updated_time": "2026-02-07T08:24:04.925298Z", "url": "https://connect.maton.ai/?session_token=...", "app": "one-drive", "metadata": {} } } Open the returned url in a browser to complete OAuth authorization.

Delete Connection

python <<'EOF' import urllib.request, os, json req = urllib.request.Request('https://ctrl.maton.ai/connections/{connection_id}', method='DELETE') req.add_header('Authorization', f'Bearer {os.environ["MATON_API_KEY"]}') print(json.dumps(json.load(urllib.request.urlopen(req)), indent=2)) EOF

Specifying Connection

If you have multiple OneDrive connections, specify which one to use with the Maton-Connection header: python <<'EOF' import urllib.request, os, json req = urllib.request.Request('https://gateway.maton.ai/one-drive/v1.0/me/drive') req.add_header('Authorization', f'Bearer {os.environ["MATON_API_KEY"]}') req.add_header('Maton-Connection', '3f17fb58-4515-4840-8ef6-2bbf0fa67e2c') print(json.dumps(json.load(urllib.request.urlopen(req)), indent=2)) EOF If omitted, the gateway uses the default (oldest) active connection.

Drives

Get Current User's Drive GET /one-drive/v1.0/me/drive Response: { "id": "b!F3Y7M0VT80OO9iu_D6Z-LA...", "driveType": "personal", "name": "OneDrive", "owner": { "user": { "displayName": "John Doe", "id": "d4648f06c91d9d3d" } }, "quota": { "total": 5368709120, "used": 1234567, "remaining": 5367474553 } } List User's Drives GET /one-drive/v1.0/me/drives Get Drive by ID GET /one-drive/v1.0/drives/{drive-id}

Files and Folders

Get Drive Root GET /one-drive/v1.0/me/drive/root List Root Children GET /one-drive/v1.0/me/drive/root/children Response: { "value": [ { "id": "F33B7653325337C3!s88...", "name": "Documents", "folder": { "childCount": 5 }, "createdDateTime": "2024-01-15T10:30:00Z", "lastModifiedDateTime": "2024-02-01T14:20:00Z" }, { "id": "F33B7653325337C3!s3f...", "name": "report.pdf", "file": { "mimeType": "application/pdf", "hashes": { "sha1Hash": "cf23df2207d99a74fbe169e3eba035e633b65d94" } }, "size": 35212 } ] } Get Item by ID GET /one-drive/v1.0/me/drive/items/{item-id} Get Item by Path Use colon (:) syntax to access items by path: GET /one-drive/v1.0/me/drive/root:/Documents/report.pdf List Folder Children by Path GET /one-drive/v1.0/me/drive/root:/Documents:/children Get Item Children GET /one-drive/v1.0/me/drive/items/{item-id}/children

Special Folders

Access known folders by name: GET /one-drive/v1.0/me/drive/special/documents GET /one-drive/v1.0/me/drive/special/photos GET /one-drive/v1.0/me/drive/special/music GET /one-drive/v1.0/me/drive/special/approot

Recent and Shared

Get Recent Files GET /one-drive/v1.0/me/drive/recent Get Files Shared With Me GET /one-drive/v1.0/me/drive/sharedWithMe

Search

GET /one-drive/v1.0/me/drive/root/search(q='{query}') Example: GET /one-drive/v1.0/me/drive/root/search(q='budget')

Create Folder

POST /one-drive/v1.0/me/drive/root/children Content-Type: application/json { "name": "New Folder", "folder": {}, "@microsoft.graph.conflictBehavior": "rename" } Create folder inside another folder: POST /one-drive/v1.0/me/drive/items/{parent-id}/children Content-Type: application/json { "name": "Subfolder", "folder": {} }

Upload File (Simple - up to 4MB)

PUT /one-drive/v1.0/me/drive/items/{parent-id}:/{filename}:/content Content-Type: application/octet-stream {file binary content} Example - upload to root: PUT /one-drive/v1.0/me/drive/root:/document.txt:/content Content-Type: text/plain Hello, OneDrive!

Upload File (Large - resumable)

For files over 4MB, use resumable upload: Step 1: Create upload session POST /one-drive/v1.0/me/drive/root:/{filename}:/createUploadSession Content-Type: application/json { "item": { "@microsoft.graph.conflictBehavior": "rename" } } Response: { "uploadUrl": "https://sn3302.up.1drv.com/up/...", "expirationDateTime": "2024-02-08T10:00:00Z" } Step 2: Upload bytes to the uploadUrl

Download File

Get the file metadata to retrieve the download URL: GET /one-drive/v1.0/me/drive/items/{item-id} The response includes @microsoft.graph.downloadUrl - a pre-authenticated URL valid for a short time: { "id": "...", "name": "document.pdf", "@microsoft.graph.downloadUrl": "https://public-sn3302.files.1drv.com/..." } Use this URL directly to download the file content (no auth header needed).

Update Item (Rename/Move)

PATCH /one-drive/v1.0/me/drive/items/{item-id} Content-Type: application/json { "name": "new-name.txt" } Move to different folder: PATCH /one-drive/v1.0/me/drive/items/{item-id} Content-Type: application/json { "parentReference": { "id": "{new-parent-id}" } }

Copy Item

POST /one-drive/v1.0/me/drive/items/{item-id}/copy Content-Type: application/json { "parentReference": { "id": "{destination-folder-id}" }, "name": "copied-file.txt" } Returns 202 Accepted with a Location header to monitor the copy operation.

Delete Item

DELETE /one-drive/v1.0/me/drive/items/{item-id} Returns 204 No Content on success.

Sharing

Create Sharing Link POST /one-drive/v1.0/me/drive/items/{item-id}/createLink Content-Type: application/json { "type": "view", "scope": "anonymous" } Link types: view - Read-only access edit - Read-write access embed - Embeddable link Scopes: anonymous - Anyone with the link organization - Anyone in your organization Response: { "id": "...", "link": { "type": "view", "scope": "anonymous", "webUrl": "https://1drv.ms/b/..." } } Invite Users (Share with specific people) POST /one-drive/v1.0/me/drive/items/{item-id}/invite Content-Type: application/json { "recipients": [ {"email": "user@example.com"} ], "roles": ["read"], "sendInvitation": true, "message": "Check out this file!" }

Query Parameters

Customize responses with OData query parameters: $select - Choose specific properties: ?$select=id,name,size $expand - Include related resources: ?$expand=children $filter - Filter results: ?$filter=file ne null (files only) $orderby - Sort results: ?$orderby=name $top - Limit results: ?$top=10 Example: GET /one-drive/v1.0/me/drive/root/children?$select=id,name,size&$top=20&$orderby=name

Pagination

Results are paginated. The response includes @odata.nextLink for additional pages: { "value": [...], "@odata.nextLink": "https://graph.microsoft.com/v1.0/me/drive/root/children?$skiptoken=..." } Use the full URL from @odata.nextLink (without the gateway prefix) to fetch the next page.

JavaScript

// List files in root const response = await fetch( 'https://gateway.maton.ai/one-drive/v1.0/me/drive/root/children', { headers: { 'Authorization': `Bearer ${process.env.MATON_API_KEY}` } } ); const data = await response.json(); // Upload a file const uploadResponse = await fetch( 'https://gateway.maton.ai/one-drive/v1.0/me/drive/root:/myfile.txt:/content', { method: 'PUT', headers: { 'Authorization': `Bearer ${process.env.MATON_API_KEY}`, 'Content-Type': 'text/plain' }, body: 'Hello, OneDrive!' } );

Python

import os import requests # List files in root response = requests.get( 'https://gateway.maton.ai/one-drive/v1.0/me/drive/root/children', headers={'Authorization': f'Bearer {os.environ["MATON_API_KEY"]}'} ) files = response.json() # Upload a file upload_response = requests.put( 'https://gateway.maton.ai/one-drive/v1.0/me/drive/root:/myfile.txt:/content', headers={ 'Authorization': f'Bearer {os.environ["MATON_API_KEY"]}', 'Content-Type': 'text/plain' }, data='Hello, OneDrive!' )

Notes

OneDrive uses Microsoft Graph API (graph.microsoft.com) Item IDs are unique within a drive Use colon (:) syntax for path-based addressing: /root:/path/to/file Simple uploads are limited to 4MB; use resumable upload for larger files Download URLs from @microsoft.graph.downloadUrl are pre-authenticated and temporary Conflict behavior options: fail, replace, rename IMPORTANT: When using curl commands, use curl -g when URLs contain brackets to disable glob parsing IMPORTANT: When piping curl output to jq or other commands, environment variables like $MATON_API_KEY may not expand correctly in some shell environments

Error Handling

StatusMeaning400Missing OneDrive connection or invalid request401Invalid or missing Maton API key403Insufficient permissions404Item not found409Conflict (e.g., item already exists)429Rate limited (check Retry-After header)4xx/5xxPassthrough error from Microsoft Graph API

Error Response Format

{ "error": { "code": "itemNotFound", "message": "The resource could not be found." } }

Troubleshooting: API Key Issues

Check that the MATON_API_KEY environment variable is set: echo $MATON_API_KEY Verify the API key is valid by listing connections: python <<'EOF' import urllib.request, os, json req = urllib.request.Request('https://ctrl.maton.ai/connections') req.add_header('Authorization', f'Bearer {os.environ["MATON_API_KEY"]}') print(json.dumps(json.load(urllib.request.urlopen(req)), indent=2)) EOF

Troubleshooting: Invalid App Name

Ensure your URL path starts with one-drive. For example: Correct: https://gateway.maton.ai/one-drive/v1.0/me/drive/root/children Incorrect: https://gateway.maton.ai/v1.0/me/drive/root/children

Resources

OneDrive Developer Documentation Microsoft Graph API Reference DriveItem Resource Drive Resource Sharing and Permissions Large File Upload Maton Community Maton Support

Category context

Workflow acceleration for inboxes, docs, calendars, planning, and execution loops.

Source: Tencent SkillHub

Largest current source with strong distribution and engagement signals.

Package contents

Included in package
1 Docs1 Files
  • SKILL.md Primary doc
  • LICENSE.txt Files