@softeria/ms-365-mcp-server 0.1.11 → 0.2.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +96 -17
- package/bin/release.mjs +39 -2
- package/index.mjs +17 -504
- package/package.json +1 -1
- package/src/auth-tools.mjs +74 -0
- package/{auth.mjs → src/auth.mjs} +5 -4
- package/src/calendar-tools.mjs +814 -0
- package/{cli.mjs → src/cli.mjs} +7 -2
- package/src/excel-tools.mjs +317 -0
- package/src/files-tools.mjs +554 -0
- package/src/graph-client.mjs +293 -0
- package/{logger.mjs → src/logger.mjs} +2 -3
- package/src/mail-tools.mjs +159 -0
- package/src/server.mjs +45 -0
- package/src/version.mjs +9 -0
- package/test/cli.test.js +3 -4
- package/test/graph-api.test.js +2 -1
- package/test/mcp-server.test.js +2 -3
- package/test/integration.test.js +0 -40
- package/test/simple.test.js +0 -7
package/README.md
CHANGED
|
@@ -7,6 +7,12 @@ A Model Context Protocol (MCP) server for interacting with Microsoft 365 service
|
|
|
7
7
|
[](https://github.com/softeria-eu/ms-365-mcp-server/actions/workflows/build.yml)
|
|
8
8
|
[](https://www.npmjs.com/package/@softeria/ms-365-mcp-server)
|
|
9
9
|
|
|
10
|
+
## Quick Start Example
|
|
11
|
+
|
|
12
|
+
Login and test authentication in Claude Desktop:
|
|
13
|
+
|
|
14
|
+

|
|
15
|
+
|
|
10
16
|
## Features
|
|
11
17
|
|
|
12
18
|
- Authentication using Microsoft Authentication Library (MSAL)
|
|
@@ -28,14 +34,6 @@ npx @softeria/ms-365-mcp-server
|
|
|
28
34
|
|
|
29
35
|
## Integration with Claude
|
|
30
36
|
|
|
31
|
-
### Claude Code CLI
|
|
32
|
-
|
|
33
|
-
To add this MCP server to Claude Code CLI:
|
|
34
|
-
|
|
35
|
-
```bash
|
|
36
|
-
claude mcp add ms -- npx @softeria/ms-365-mcp-server
|
|
37
|
-
```
|
|
38
|
-
|
|
39
37
|
### Claude Desktop
|
|
40
38
|
|
|
41
39
|
To add this MCP server to Claude Desktop:
|
|
@@ -48,17 +46,32 @@ To add this MCP server to Claude Desktop:
|
|
|
48
46
|
- Command: `npx @softeria/ms-365-mcp-server`
|
|
49
47
|
- Click "Add"
|
|
50
48
|
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
You can also use this configuration JSON in compatible Claude interfaces:
|
|
49
|
+
Alternatively, you can edit Claude Desktop's configuration file directly. The location varies by platform, but you can
|
|
50
|
+
find it by going to Settings > Developer > Edit Config. Add this to your configuration file:
|
|
54
51
|
|
|
55
52
|
```json
|
|
56
53
|
{
|
|
57
|
-
"
|
|
58
|
-
|
|
54
|
+
"mcpServers": {
|
|
55
|
+
"ms": {
|
|
56
|
+
"command": "npx",
|
|
57
|
+
"args": [
|
|
58
|
+
"-y",
|
|
59
|
+
"@softeria/ms-365-mcp-server"
|
|
60
|
+
]
|
|
61
|
+
}
|
|
62
|
+
}
|
|
59
63
|
}
|
|
60
64
|
```
|
|
61
65
|
|
|
66
|
+
### Using Claude Code CLI
|
|
67
|
+
|
|
68
|
+
Claude Code CLI integration is available but configuration methods may vary based on the current version. Please refer
|
|
69
|
+
to the [official Claude Code documentation](https://github.com/anthropics/claude-code) for the most up-to-date
|
|
70
|
+
instructions on adding MCP servers.
|
|
71
|
+
|
|
72
|
+
For other Claude interfaces that support MCPs, please refer to their respective documentation for the correct
|
|
73
|
+
integration method.
|
|
74
|
+
|
|
62
75
|
## Development
|
|
63
76
|
|
|
64
77
|
### Setup
|
|
@@ -88,17 +101,24 @@ This repository uses GitHub Actions for continuous integration and deployment:
|
|
|
88
101
|
To create a new release:
|
|
89
102
|
|
|
90
103
|
```bash
|
|
104
|
+
# Default (patch version): 0.1.11 -> 0.1.12
|
|
91
105
|
npm run release
|
|
106
|
+
|
|
107
|
+
# Minor version: 0.1.11 -> 0.2.0
|
|
108
|
+
npm run release minor
|
|
109
|
+
|
|
110
|
+
# Major version: 0.1.11 -> 1.0.0
|
|
111
|
+
npm run release major
|
|
92
112
|
```
|
|
93
113
|
|
|
94
114
|
This script will:
|
|
95
115
|
|
|
96
116
|
1. Run tests to verify everything works
|
|
97
|
-
2. Bump the version number
|
|
117
|
+
2. Bump the version number according to the specified type (patch by default)
|
|
98
118
|
3. Commit the version changes
|
|
99
119
|
4. Push to GitHub
|
|
100
120
|
5. Create a GitHub release
|
|
101
|
-
6. Trigger the
|
|
121
|
+
6. Trigger the publishing workflow to publish to npm
|
|
102
122
|
|
|
103
123
|
## Usage
|
|
104
124
|
|
|
@@ -160,12 +180,34 @@ Authentication tokens are cached securely in your system's credential store with
|
|
|
160
180
|
|
|
161
181
|
### MCP Tools
|
|
162
182
|
|
|
163
|
-
This server provides several MCP tools for interacting with
|
|
183
|
+
This server provides several MCP tools for interacting with Microsoft 365 services:
|
|
184
|
+
|
|
185
|
+
#### Authentication Tools
|
|
164
186
|
|
|
165
187
|
- `login`: Start a new login process with Microsoft (returns login URL and code)
|
|
166
188
|
- `verify-login`: Check if login was completed successfully and verify Graph API access
|
|
167
189
|
- `logout`: Log out of Microsoft and clear credentials
|
|
168
190
|
- `test-login`: Test current authentication status and verify Graph API access
|
|
191
|
+
|
|
192
|
+
#### Files/OneDrive Tools
|
|
193
|
+
|
|
194
|
+
- `list-files`: List files and folders in a specified path
|
|
195
|
+
- `get-file`: Get details of a specific file
|
|
196
|
+
- `create-folder`: Create a new folder
|
|
197
|
+
- `delete-item`: Delete a file or folder
|
|
198
|
+
- `copy-item`: Copy a file or folder to a new location
|
|
199
|
+
- `move-item`: Move a file or folder to a new location
|
|
200
|
+
- `rename-item`: Rename a file or folder
|
|
201
|
+
- `search-files`: Search for files matching a query
|
|
202
|
+
- `get-shared-items`: Get a list of items shared with you
|
|
203
|
+
- `create-sharing-link`: Create a sharing link for a file or folder
|
|
204
|
+
- `get-file-content`: Get the content of a file
|
|
205
|
+
|
|
206
|
+
#### Excel Tools
|
|
207
|
+
|
|
208
|
+
All Excel tools require a `filePath` parameter to specify which Excel file to operate on. You can use the Files tools to
|
|
209
|
+
find and manage your Excel files.
|
|
210
|
+
|
|
169
211
|
- `update-excel`: Update cell values in an Excel worksheet
|
|
170
212
|
- `create-chart`: Create a chart in an Excel worksheet
|
|
171
213
|
- `format-range`: Apply formatting to a range of cells
|
|
@@ -173,6 +215,43 @@ This server provides several MCP tools for interacting with Excel files:
|
|
|
173
215
|
- `create-table`: Create a table from a range of cells
|
|
174
216
|
- `get-range`: Get values from a range of cells
|
|
175
217
|
- `list-worksheets`: List all worksheets in the workbook
|
|
176
|
-
- `close-session`: Close the
|
|
218
|
+
- `close-session`: Close the session for a specific Excel file
|
|
219
|
+
- `close-all-sessions`: Close all active Excel sessions
|
|
177
220
|
- `delete-chart`: Delete a chart from a worksheet
|
|
178
221
|
- `get-charts`: Get all charts in a worksheet
|
|
222
|
+
|
|
223
|
+
Example workflow:
|
|
224
|
+
|
|
225
|
+
1. Use `list-files` to find Excel files in your OneDrive
|
|
226
|
+
2. Use `list-worksheets` with the file path to see available worksheets
|
|
227
|
+
3. Use `get-range` to retrieve data from the Excel file
|
|
228
|
+
4. Use other Excel tools to manipulate the file as needed
|
|
229
|
+
|
|
230
|
+
#### Calendar Tools
|
|
231
|
+
|
|
232
|
+
Tools for working with Outlook calendars.
|
|
233
|
+
|
|
234
|
+
- `list-calendars`: List all calendars
|
|
235
|
+
- `get-default-calendar`: Get information about the default calendar
|
|
236
|
+
- `list-events`: List events from a calendar with optional filtering, sorting, and date ranges
|
|
237
|
+
- `get-detailed-events`: Get events with expanded properties and options to include body, attendees, extensions, etc.
|
|
238
|
+
- `get-event`: Get detailed information about a specific calendar event
|
|
239
|
+
- `create-event`: Create a new calendar event with comprehensive options (sensitivity, importance, free/busy status,
|
|
240
|
+
optional attendees, reminders, online meetings, categories)
|
|
241
|
+
- `create-recurring-event`: Create recurring events (daily, weekly, monthly, yearly) with the same comprehensive options
|
|
242
|
+
and flexible recurrence patterns
|
|
243
|
+
- `update-event`: Update an existing calendar event
|
|
244
|
+
- `delete-event`: Delete a calendar event
|
|
245
|
+
- `accept-event`: Accept a calendar meeting invitation
|
|
246
|
+
- `decline-event`: Decline a calendar meeting invitation
|
|
247
|
+
- `tentatively-accept-event`: Tentatively accept a calendar meeting invitation
|
|
248
|
+
- `find-meeting-times`: Find available meeting times for a set of attendees
|
|
249
|
+
- `get-schedules`: Get availability information for multiple users or resource rooms
|
|
250
|
+
|
|
251
|
+
#### Mail Tools
|
|
252
|
+
|
|
253
|
+
Tools for working with Outlook email.
|
|
254
|
+
|
|
255
|
+
- `list-messages`: List emails from any mail folder with powerful filtering, searching, and sorting options
|
|
256
|
+
- `get-message`: Get detailed information about a specific email message with options to include attachments and other
|
|
257
|
+
metadata
|
package/bin/release.mjs
CHANGED
|
@@ -3,6 +3,43 @@
|
|
|
3
3
|
import { execSync } from 'child_process';
|
|
4
4
|
import fs from 'fs';
|
|
5
5
|
|
|
6
|
+
try {
|
|
7
|
+
const currentBranch = execSync('git rev-parse --abbrev-ref HEAD').toString().trim();
|
|
8
|
+
if (currentBranch !== 'main') {
|
|
9
|
+
console.error(
|
|
10
|
+
`Error: You must be on the 'main' branch to create a release. Current branch: ${currentBranch}`
|
|
11
|
+
);
|
|
12
|
+
process.exit(1);
|
|
13
|
+
}
|
|
14
|
+
} catch (error) {
|
|
15
|
+
console.error('Failed to determine current git branch:', error.message);
|
|
16
|
+
process.exit(1);
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
try {
|
|
20
|
+
const changes = execSync('git status --porcelain').toString();
|
|
21
|
+
if (changes.length > 0) {
|
|
22
|
+
console.error(
|
|
23
|
+
'Error: You have uncommitted changes. Please commit or stash them before creating a release.'
|
|
24
|
+
);
|
|
25
|
+
console.error(changes);
|
|
26
|
+
process.exit(1);
|
|
27
|
+
}
|
|
28
|
+
} catch (error) {
|
|
29
|
+
console.error('Failed to check git status:', error.message);
|
|
30
|
+
process.exit(1);
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
const args = process.argv.slice(2);
|
|
34
|
+
const releaseType = args[0] || 'patch';
|
|
35
|
+
|
|
36
|
+
if (!['major', 'minor', 'patch'].includes(releaseType)) {
|
|
37
|
+
console.error('Invalid release type. Must be one of: major, minor, patch');
|
|
38
|
+
process.exit(1);
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
console.log(`Release type: ${releaseType}`);
|
|
42
|
+
|
|
6
43
|
console.log('Running tests...');
|
|
7
44
|
try {
|
|
8
45
|
execSync('npm test', { stdio: 'inherit' });
|
|
@@ -11,8 +48,8 @@ try {
|
|
|
11
48
|
process.exit(1);
|
|
12
49
|
}
|
|
13
50
|
|
|
14
|
-
console.log(
|
|
15
|
-
execSync(
|
|
51
|
+
console.log(`Bumping ${releaseType} version...`);
|
|
52
|
+
execSync(`npm version --no-git-tag-version ${releaseType}`);
|
|
16
53
|
|
|
17
54
|
const packageJson = JSON.parse(fs.readFileSync('./package.json', 'utf8'));
|
|
18
55
|
const version = packageJson.version;
|