Microsoft 365 Files (read-only)
MCP Server
Version 2.0.0 replaced a package that did not exist. Until spec 093 this skill invoked
npx -y @anthropic-ai/microsoft-graph-mcp, which 404s on npm, and documented seven
graph_* tool names that exist in no server. Every call it described failed. The tool names
below were read from the live server's tools/list, not recalled.
Why the --enabled-tools filter is mandatory
The unfiltered server exposes 188 tools measured at ~225,355 tokens — 45× NetClaw's 5,000
token manifest ceiling. It is unusable without a filter. The filter above lands 12 tools at
~4,599 tokens, which fits with little room to spare, so keep it narrow.
Verified tools
Read from the running server, --read-only with the filter above:
| Tool |
What it does |
list-folder-files |
contents of a drive folder |
get-drive-item |
metadata for one item by id or path |
list-drive-item-versions |
version history of an item |
list-drive-item-permissions |
who an item is shared with |
list-drive-item-thumbnails |
available thumbnail renditions |
login / verify-login / logout |
device-code sign-in and session state |
list-accounts / select-account / remove-account |
multi-account handling |
There are no graph_* tools. If you find yourself reaching for one, it came from this
skill's old text and does not exist.
Workflow: locate and inspect a document
verify-login — is there a live session? If not, login and surface the device code to
the operator; never fabricate a sign-in.
list-folder-files from the drive root, then descend
get-drive-item for the candidate — size, timestamps, path
list-drive-item-permissions if the question is about sharing or exposure
list-drive-item-versions if the question is "what changed and when"
Reading results honestly
- Read-only. No upload, move, rename or delete.
--read-only strips them, and this skill
must not offer them. Writing a file is msgraph-visio's narrower, write-enabled invocation.
- A permission list is a point-in-time answer, and sharing links can be created outside
this surface. "No permissions listed" is not "not shared."
- An empty folder listing means this folder, as this account sees it. Delegated scopes and
account selection both narrow what is visible; state which account you were signed in as.
list-accounts returning one account is not proof there is only one tenant.
Not verified
The tool names and manifest cost are measured; the calls themselves are not. Verifying a
real fetch needs an M365 tenant and an app registration, which this environment does not have.
Treat the workflows as correct-by-construction until run against a live tenant.
Integration with Other Skills
| Skill |
How They Work Together |
msgraph-visio |
Writing a .vsdx back to OneDrive (write-enabled invocation) |
document-generation |
Produces the documents this skill locates |
gait-session-tracking |
Record which account and item were accessed |
Environment Variables
MS365_MCP_CLIENT_ID — Entra ID app registration (client) ID
MS365_MCP_TENANT_ID — tenant ID, or common for multi-tenant
1---
2name: msgraph-files
3description: "Read OneDrive and SharePoint files via the Microsoft 365 MCP server — list folder contents, fetch item metadata, inspect versions and sharing permissions. Use when locating a document in OneDrive/SharePoint, checking who a file is shared with, or reviewing file version history"
4version: 2.0.0
5license: Apache-2.0
6tags: [microsoft365, onedrive, sharepoint, files, read-only]
7---
8
9# Microsoft 365 Files (read-only)
10
11## MCP Server
12
13- **Package**: [`@softeria/ms-365-mcp-server`](https://www.npmjs.com/package/@softeria/ms-365-mcp-server) (MIT)
14- **Invocation**:
15 ```
16 npx -y @softeria/ms-365-mcp-server --read-only --enabled-tools 'drive-item|folder-files'
17 ```
18- **Requires**: an Entra ID (Azure AD) app registration and delegated Graph scopes. The server
19 handles the device-code sign-in itself via its `login` tool.
20
21> **Version 2.0.0 replaced a package that did not exist.** Until spec 093 this skill invoked
22> `npx -y @anthropic-ai/microsoft-graph-mcp`, which **404s on npm**, and documented seven
23> `graph_*` tool names that exist in no server. Every call it described failed. The tool names
24> below were read from the live server's `tools/list`, not recalled.
25
26### Why the `--enabled-tools` filter is mandatory
27
28The unfiltered server exposes **188 tools measured at ~225,355 tokens — 45× NetClaw's 5,000
29token manifest ceiling.** It is unusable without a filter. The filter above lands **12 tools at
30~4,599 tokens**, which fits with little room to spare, so keep it narrow.
31
32## Verified tools
33
34Read from the running server, `--read-only` with the filter above:
35
36| Tool | What it does |
37|---|---|
38| `list-folder-files` | contents of a drive folder |
39| `get-drive-item` | metadata for one item by id or path |
40| `list-drive-item-versions` | version history of an item |
41| `list-drive-item-permissions` | who an item is shared with |
42| `list-drive-item-thumbnails` | available thumbnail renditions |
43| `login` / `verify-login` / `logout` | device-code sign-in and session state |
44| `list-accounts` / `select-account` / `remove-account` | multi-account handling |
45
46There are **no `graph_*` tools**. If you find yourself reaching for one, it came from this
47skill's old text and does not exist.
48
49## Workflow: locate and inspect a document
50
511. `verify-login` — is there a live session? If not, `login` and surface the device code to
52 the operator; never fabricate a sign-in.
532. `list-folder-files` from the drive root, then descend
543. `get-drive-item` for the candidate — size, timestamps, path
554. `list-drive-item-permissions` if the question is about sharing or exposure
565. `list-drive-item-versions` if the question is "what changed and when"
57
58## Reading results honestly
59
60- **Read-only.** No upload, move, rename or delete. `--read-only` strips them, and this skill
61 must not offer them. Writing a file is `msgraph-visio`'s narrower, write-enabled invocation.
62- **A permission list is a point-in-time answer**, and sharing links can be created outside
63 this surface. "No permissions listed" is not "not shared."
64- **An empty folder listing means this folder, as this account sees it.** Delegated scopes and
65 account selection both narrow what is visible; state which account you were signed in as.
66- **`list-accounts` returning one account is not proof there is only one tenant.**
67
68## Not verified
69
70**The tool names and manifest cost are measured; the calls themselves are not.** Verifying a
71real fetch needs an M365 tenant and an app registration, which this environment does not have.
72Treat the workflows as correct-by-construction until run against a live tenant.
73
74## Integration with Other Skills
75
76| Skill | How They Work Together |
77|-------|----------------------|
78| `msgraph-visio` | Writing a `.vsdx` back to OneDrive (write-enabled invocation) |
79| `document-generation` | Produces the documents this skill locates |
80| `gait-session-tracking` | Record which account and item were accessed |
81
82## Environment Variables
83
84- `MS365_MCP_CLIENT_ID` — Entra ID app registration (client) ID
85- `MS365_MCP_TENANT_ID` — tenant ID, or `common` for multi-tenant