Workiq
microsoft/work-iq
WorkIQ tools for Microsoft 365 workplace data and actions. An agent skill from microsoft/work-iq.
Use CLI for Microsoft 365 to manage Microsoft 365 tenants from the terminal.
$ npx skills add pnp/cli-microsoft365-mcp-server --skill cli-microsoft365 -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install pnp/cli-microsoft365-mcp-server cli-microsoft365 --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/pnp/cli-microsoft365-mcp-server.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.github/skills/cli-microsoft365 .claude/skills/cli-microsoft365 && rm -rf skills-srcUse ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.
Claude Code skills documentation · loads skills from .claude/skills/
Install the "cli-microsoft365" agent skill from https://github.com/pnp/cli-microsoft365-mcp-server/tree/main/.github/skills/cli-microsoft365 into .claude/skills/cli-microsoft365/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "cli-microsoft365", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/pnp/cli-microsoft365-mcp-server/tree/main/.github/skills/cli-microsoft365Type this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add pnp/cli-microsoft365-mcp-server --skill cli-microsoft365 -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install pnp/cli-microsoft365-mcp-server cli-microsoft365 --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/pnp/cli-microsoft365-mcp-server.git skills-src && mkdir -p .agents/skills && cp -r skills-src/.github/skills/cli-microsoft365 .agents/skills/cli-microsoft365 && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "cli-microsoft365" agent skill from https://github.com/pnp/cli-microsoft365-mcp-server/tree/main/.github/skills/cli-microsoft365 into .agents/skills/cli-microsoft365/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "cli-microsoft365", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add pnp/cli-microsoft365-mcp-server --skill cli-microsoft365 -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install pnp/cli-microsoft365-mcp-server cli-microsoft365 --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/pnp/cli-microsoft365-mcp-server.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/.github/skills/cli-microsoft365 .cursor/skills/cli-microsoft365 && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "cli-microsoft365" agent skill from https://github.com/pnp/cli-microsoft365-mcp-server/tree/main/.github/skills/cli-microsoft365 into .cursor/skills/cli-microsoft365/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "cli-microsoft365", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/pnp/cli-microsoft365-mcp-server.git --path .github/skills/cli-microsoft365--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add pnp/cli-microsoft365-mcp-server --skill cli-microsoft365 -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install pnp/cli-microsoft365-mcp-server cli-microsoft365 --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/pnp/cli-microsoft365-mcp-server.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/.github/skills/cli-microsoft365 .gemini/skills/cli-microsoft365 && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "cli-microsoft365" agent skill from https://github.com/pnp/cli-microsoft365-mcp-server/tree/main/.github/skills/cli-microsoft365 into .gemini/skills/cli-microsoft365/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "cli-microsoft365", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install pnp/cli-microsoft365-mcp-server cli-microsoft365Installs for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add pnp/cli-microsoft365-mcp-server --skill cli-microsoft365 -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/pnp/cli-microsoft365-mcp-server.git skills-src && mkdir -p .github/skills && cp -r skills-src/.github/skills/cli-microsoft365 .github/skills/cli-microsoft365 && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "cli-microsoft365" agent skill from https://github.com/pnp/cli-microsoft365-mcp-server/tree/main/.github/skills/cli-microsoft365 into .github/skills/cli-microsoft365/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "cli-microsoft365", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add pnp/cli-microsoft365-mcp-server --skill cli-microsoft365 -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install pnp/cli-microsoft365-mcp-server cli-microsoft365 --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/pnp/cli-microsoft365-mcp-server.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/.github/skills/cli-microsoft365 .opencode/skills/cli-microsoft365 && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "cli-microsoft365" agent skill from https://github.com/pnp/cli-microsoft365-mcp-server/tree/main/.github/skills/cli-microsoft365 into .opencode/skills/cli-microsoft365/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "cli-microsoft365", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
cli-microsoft365Use CLI for Microsoft 365 to manage Microsoft 365 tenants from the terminal.
CLI Microsoft365 is an agent skill from pnp/cli-microsoft365-mcp-server. Use CLI for Microsoft 365 to manage Microsoft 365 tenants from the terminal. Use when: running m365 commands, managing SharePoint Online, managing Entra ID, managing Teams teams/channels/chats, managing Power Platform, Planner, To Do,Outlook, Viva Engage, querying Microsoft Graph, authenticating to Microsoft 365, scripting Microsoft 365 automation, filtering CLI output with JMESPath.
Its SKILL.md is about 3.5k tokens, which your agent loads only when the skill is triggered. It is a single SKILL.md file with no bundled scripts.
It sits in Documents & Office, covering Cloud office suites. It works with Microsoft 365, Microsoft SharePoint, Microsoft Entra ID and Power Automate. The repository describes itself as: Manage Microsoft 365 using MCP server. The licence is MIT.
10 steps, taken from the first numbered list in SKILL.md.
Read from SKILL.md and the folder at commit 6d89707. It shows what the files ask for, not the result of running them.
Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.
From allowed-tools in the SKILL.md frontmatter.
Shell commands in SKILL.md call:
npmjqFrom the folder's file list and the shell code blocks in SKILL.md.
Hosts in commands or code, which the agent is likely to contact:
contoso.sharepoint.comgraph.microsoft.comAlso links to:
pnp.github.ioFrom URLs in SKILL.md, links to its own repository left out.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
CLI Microsoft365 loads about 3.5k tokens when it runs. Until then it costs about 101 tokens; SKILL.md has 980 words of instructions outside code blocks.
Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.
The automated check found no risky patterns in SKILL.md.
Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.
The full file from pnp/cli-microsoft365-mcp-server at commit 6d89707, republished under its MIT licence (© pnp). 980 words, ~3,550 tokens.
.claude/skills/cli-microsoft365/SKILL.md (or your agent's skills folder).You are an expert at using CLI for Microsoft 365 (m365) to manage Microsoft 365 tenants from the command line. Follow these instructions when the user asks you to run CLI for Microsoft 365 commands.
CLI for Microsoft 365 must be installed globally:
npm install -g @pnp/cli-microsoft365Requires Node.js LTS (18+). Works on Windows, macOS, and Linux with any shell.
Every command must be prefixed with m365
m365 <command-group> <resource> <action> [options]start with m365 in terminal to get list of command groups and core commands. Use m365 <command-group> --help to see available resources and actions within a group.
| Prefix | Service |
|---|---|
spo | SharePoint Online |
entra | Microsoft Entra ID (users, groups, apps, enterprise apps, PIM) |
teams | Microsoft Teams |
planner | Microsoft Planner |
todo | Microsoft To Do |
outlook | Outlook (mail, calendar, rooms) |
flow | Power Automate |
pa | Power Apps |
pp | Power Platform |
viva | Viva Engage |
purview | Microsoft Purview |
graph | Microsoft Graph extensions & subscriptions |
external | Microsoft Search external connections |
spe | SharePoint Embedded |
spp | SharePoint Premium |
spfx | SharePoint Framework project tools |
tenant | Tenant-level reports and service health |
onedrive | OneDrive reports |
file | Cross-service file operations via Graph |
search | Microsoft Search |
booking | Microsoft Bookings |
exo | Exchange Online |
| Command | Purpose |
|---|---|
m365 login | Log in to Microsoft 365 |
m365 logout | Log out from Microsoft 365 |
m365 status | Show login status |
m365 setup | Interactive setup wizard for CLI configuration and app registration |
m365 request | Execute raw HTTP requests against any Microsoft API |
m365 search | Query Microsoft 365 data via Microsoft Search |
m365 version | Show CLI version |
m365 docs | Get docs URL |
| Command | Purpose |
|---|---|
m365 cli config set | Set a CLI configuration option |
m365 cli config get | Get a CLI configuration option |
m365 cli config list | List all configuration options |
m365 cli config reset | Reset a configuration option |
m365 cli doctor | Diagnostic information about the environment |
m365 connection list | List available connections |
m365 connection use | Switch to a different connection |
The recommended approach for first-time users:
m365 setupThis wizard creates a Microsoft Entra app registration with the necessary permissions and configures CLI settings.
Device code flow (default, interactive):
m365 login --appId <app-id> --tenant <tenant-id>Browser-based (most convenient for interactive use):
m365 login --authType browserUsername and password (for automation without MFA):
m365 login --authType password --userName user@contoso.com --password pass@word1Certificate (app-only, for CI/CD):
m365 login --authType certificate --certificateFile /path/to/cert.pfx --password 'certPassword'Client secret (app-only, for CI/CD):
m365 login --authType secret --secret topSeCr3t@007Managed identity (Azure-hosted automation):
m365 login --authType identityInstead of passing --appId and --tenant on every login, set:
CLIMICROSOFT365_ENTRAAPPID — Application (client) IDCLIMICROSOFT365_TENANT — Directory (tenant) IDm365 statusm365 connection list
m365 connection use --name "Production"Every command supports these options:
| Option | Description |
|---|---|
-o, --output [type] | Output format: json (default), text, csv, md, none |
--query [jmespath] | JMESPath query to filter/transform output |
--verbose | Verbose logging |
--debug | Debug logging |
-h, --help [section] | Help: options, examples, remarks, permissions, response, full |
--output json (default) — returns structured data--output text — returns formatted tables/key-value pairs--output csv--output md--output noneWhen running commands in the terminal for the user, prefer --output json so you can parse and reason about results. When showing results to the user for readability, use --output text.
Use --query to filter and transform JSON output:
# Get only titles of all sites
m365 spo site list --query "[*].Title"
# Filter sites by title containing "Project"
m365 spo site list --query "[?contains(Title, 'Project')]"
# Select specific fields
m365 spo site list --query "[*].{Title: Title, Url: Url}"
# Combine filter and projection
m365 spo site list --query "[?contains(Title, 'Project')].{Title: Title, Url: Url}"
# Filter on nested properties
m365 flow environment list --query "[?properties.isDefault]"JMESPath queries are case-sensitive. Common functions: contains(), starts_with(), ends_with(), length(), sort_by(), reverse().
# List all sites
m365 spo site list
# Get a specific site
m365 spo site get --url https://contoso.sharepoint.com/sites/project
# Create a site
m365 spo site add --type CommunicationSite --title "Project Site" --url https://contoso.sharepoint.com/sites/project
# List all lists in a site
m365 spo list list --webUrl https://contoso.sharepoint.com/sites/project
# Get list items
m365 spo listitem list --webUrl https://contoso.sharepoint.com/sites/project --listTitle "Documents"
# Add a list item
m365 spo listitem add --webUrl https://contoso.sharepoint.com/sites/project --listTitle "Tasks" --Title "New Task"
# Upload a file
m365 spo file add --webUrl https://contoso.sharepoint.com/sites/project --folder "Shared Documents" --path ./report.pdf
# Get a file
m365 spo file get --webUrl https://contoso.sharepoint.com/sites/project --url "/sites/project/Shared Documents/report.pdf"
# List files in a folder
m365 spo file list --webUrl https://contoso.sharepoint.com/sites/project --folder "Shared Documents"
# Modern page operations
m365 spo page add --name "NewPage" --webUrl https://contoso.sharepoint.com/sites/project
m365 spo page list --webUrl https://contoso.sharepoint.com/sites/project
m365 spo page set --name "NewPage" --webUrl https://contoso.sharepoint.com/sites/project --publish
# Set the root SharePoint URL for server-relative paths
m365 spo set --url https://contoso.sharepoint.com# List users
m365 entra user list
# Get a user
m365 entra user get --id user@contoso.com
# Create a user
m365 entra user add --displayName "John Doe" --userName john@contoso.com --password "P@ssw0rd!" --accountEnabled true
# List groups
m365 entra group list
# List M365 groups
m365 entra m365group list
# Get app registrations
m365 entra app list
m365 entra app get --appId <app-id>
# Manage app permissions
m365 entra app permission list --appObjectId <object-id>
m365 entra app permission add --appObjectId <object-id> --applicationPermissions "https://graph.microsoft.com/Sites.Read.All"# List teams
m365 teams team list
# Get a team
m365 teams team get --id <team-id>
# List channels
m365 teams channel list --teamId <team-id>
# Send a message
m365 teams message send --teamId <team-id> --channelId <channel-id> --message "Hello!"
# List chat conversations
m365 teams chat list
# Send a chat message
m365 teams chat message send --chatId <chat-id> --message "Hi there"
# Create a meeting
m365 teams meeting add --subject "Sprint Review" --startTime "2025-01-15T10:00:00Z" --endTime "2025-01-15T11:00:00Z"# List Power Apps
m365 pa app list
# List Power Automate flows
m365 flow list --environmentName <env-name>
# List Power Platform environments
m365 pp environment listThe request command lets you call any Microsoft API directly:
# GET request to Graph
m365 request --url "https://graph.microsoft.com/v1.0/me"
# Use URL tokens for shorter URLs
m365 request --url "@graph/me"
m365 request --url "@graphbeta/me/profile"
m365 request --url "@spo/_api/web"
# POST with a body
m365 request --url "@graph/me/messages" --method post --body '{"subject":"Test","body":{"content":"Hello"}}'
# Load body from file
m365 request --url "@graph/teams" --method post --body @team-payload.json
# Specify custom headers
m365 request --url "@spo/_api/web/lists" --method post --body @list.json --content-type "application/json;odata=verbose"URL tokens:
@graph → https://graph.microsoft.com/v1.0@graphbeta → https://graph.microsoft.com/beta@spo → Current SharePoint URL (set via m365 spo set)m365 spo site add --alias mycoolsite --title "My Cool Site"=m365 planner task get --id=-9rMKQooUjZdxgv1qQVZYABEuw=m365 spo contenttype set --description=""@ file referencem365 spo sitescript add --title "Contoso" --content @script.jsonThe @ prefix works with any option — CLI loads the file contents automatically.
Accepted true values: 1, yes, true, on
Accepted false values: 0, no, false, off
In PowerShell you can also use $true / $false.
After running any spo command or m365 spo set --url https://contoso.sharepoint.com, you can use server-relative URLs:
m365 spo site get --url /sites/contosoSave frequently used option values so you don't have to type them every time:
# Initialize context in current directory
m365 context init
# Set reusable option values
m365 context option set --name "webUrl" --value "https://contoso.sharepoint.com/sites/project"
m365 context option set --name "listTitle" --value "Tasks"
# Now commands pick up context values automatically
m365 spo listitem list
# Equivalent to: m365 spo listitem list --webUrl "..." --listTitle "Tasks"Context is stored in .m365rc.json in the working directory. Options explicit in the command override context values.
Configure with m365 cli config set --key <key> --value <value>:
| Key | Description | Default |
|---|---|---|
output | Default output format | json |
showHelpOnFailure | Show help on command failure | false |
prompt | Enable interactive prompts | false |
autoOpenLinksInBrowser | Auto-open browser links | false |
copyDeviceCodeToClipboard | Copy device code to clipboard | false |
printErrorsAsPlainText | Errors as plain text vs JSON | false |
errorOutput | Where to send errors: stderr or stdout | stderr |
helpMode | Help detail level: options or full | options |
Quick setup for interactive use:
m365 setup --interactiveQuick setup for scripting:
m365 setup --scripting# List all commands in a workload
m365 help spo
# Get options for a command
m365 spo site list --help
# Get full help with examples
m365 spo site list --help full
# Get only examples
m365 spo site list --help examples
# Check required permissions
m365 spo site list --help permissionsEscape $ in URLs and JSON: use backtick ` before $
Consider setting errorOutput to stdout for easier error handling:
m365 cli config set --key errorOutput --value stdoutUse ConvertFrom-Json to parse JSON output:
$sites = m365 spo site list | ConvertFrom-JsonUse jq for JSON processing:
m365 spo site list | jq '.[].Title'm365 status before running commands--output json when you need to process results programmatically--output text when displaying results to the user for readability--query to filter large result sets server-side instead of post-processing--output none for commands where you don't need to see output (e.g., delete operations)@ file references for complex JSON payloads instead of inline escaping--userName, --title) over GUIDs when both are accepted--help permissions if a command fails with 403 — it shows the required API permissions--debug to troubleshoot failing commands — it shows full HTTP requests/responsesm365 <command> --help permissions for required scopesm365 login --ensure to re-authenticate only if neededm365 cli doctor to diagnose environment issues© pnp, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
Just SKILL.md in .github/skills/cli-microsoft365 of pnp/cli-microsoft365-mcp-server.
Open the folder on GitHubat commit 6d89707
CLI Microsoft365 next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| CLI Microsoft365 this skillpnp/cli-microsoft365-mcp-server | 131 | — | ~3.5k | Automated safety check: Pass | MIT | |
| Workiqmicrosoft/work-iq | 1k | — | ~15k | Automated safety check: Pass | Custom licence | |
| Msgraph Filesautomateyournetwork/netclaw | 674 | — | ~1k | Automated safety check: Pass | Apache-2.0 | |
| Msgraph Visioautomateyournetwork/netclaw | 674 | — | ~1k | Automated safety check: Pass | Apache-2.0 | |
| Add Workiqmicrosoft/power-platform-skills | 967 | — | ~5.6k | Automated safety check: Notes | MIT | |
| Spfx Releasepnp/docker-spfx | 134 | — | ~572 | Automated safety check: Notes | MIT |
microsoft/work-iq
WorkIQ tools for Microsoft 365 workplace data and actions. An agent skill from microsoft/work-iq.
automateyournetwork/netclaw
Read OneDrive and SharePoint files via the Microsoft 365 MCP server — list folder contents, fetch item metadata, inspect versions and sharing permissions.
automateyournetwork/netclaw
Upload and retrieve Visio (.vsdx) and other diagram files in OneDrive/SharePoint via the Microsoft 365 MCP server.
microsoft/power-platform-skills
Adds Work IQ (M365 Copilot Search) to a Power Apps code app via the Work IQ Copilot MCP connector (shareda365copilotchatmcp), then wires up a production-ready McpSession wrapper for AI-powered…
pnp/docker-spfx
Automate SPFx version releases - branch, update files, commit, open PR, then tag after merge
github/awesome-copilot
Create Agent Users in Microsoft Entra ID from Agent Identities, enabling AI agents to act as digital workers with user identity capabilities in Microsoft 365 and Azure environments.
pnp/cli-microsoft365-mcp-server
Write PowerShell scripts using CLI for Microsoft 365 commands to automate Microsoft 365 management tasks.
Categories
Use CLI for Microsoft 365 to manage Microsoft 365 tenants from the terminal. CLI Microsoft365 is an agent skill from pnp/cli-microsoft365-mcp-server. Use CLI for Microsoft 365 to manage Microsoft 365 tenants from the terminal.
CLI Microsoft365 fits situations like: : running m365 commands; managing SharePoint Online; managing Entra ID; managing Teams teams/channels/chats.
Run `npx skills add pnp/cli-microsoft365-mcp-server --skill cli-microsoft365 -a claude-code`. Or copy the skill folder (.github/skills/cli-microsoft365 in pnp/cli-microsoft365-mcp-server) into .claude/skills/cli-microsoft365 in your project. Claude Code loads it when a task matches its description.
Run `npx skills add pnp/cli-microsoft365-mcp-server --skill cli-microsoft365 -a codex`. Or copy the skill folder (.github/skills/cli-microsoft365 in pnp/cli-microsoft365-mcp-server) into .agents/skills/cli-microsoft365 in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add pnp/cli-microsoft365-mcp-server --skill cli-microsoft365 -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/cli-microsoft365, .gemini/skills/cli-microsoft365, .github/skills/cli-microsoft365 and .opencode/skills/cli-microsoft365 in your project.
Going by SKILL.md and its folder, CLI Microsoft365 needs the command-line tools its instructions call (npm and jq). Our summary lists: Node.js.
SKILL.md names 3 domains. In commands or code: contoso.sharepoint.com and graph.microsoft.com; the agent is likely to contact these when it follows the instructions. As links in the text: pnp.github.io. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.
CLI Microsoft365 is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 3.5k tokens (SKILL.md is roughly 14k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.
Skills that share tags, products or a category with CLI Microsoft365: Workiq (microsoft/work-iq, 1k stars), Msgraph Files (automateyournetwork/netclaw, 674 stars), Msgraph Visio (automateyournetwork/netclaw, 674 stars) and Add Workiq (microsoft/power-platform-skills, 967 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
pnp (a GitHub organization) maintains it in pnp/cli-microsoft365-mcp-server, which has 131 GitHub stars. The repository holds 2 skills in this directory. The repository was last updated on October 5, 2026.
Source: pnp/cli-microsoft365-mcp-server on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.