@sam2kb/m365-mcp 1.1.0 → 1.2.0
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/.env.example +4 -0
- package/README.md +48 -9
- package/SKILL.md +18 -5
- package/dist/auth-cli.js +1 -1
- package/dist/auth-cli.js.map +1 -1
- package/dist/auth.js +73 -17
- package/dist/auth.js.map +1 -1
- package/dist/graph.d.ts +3 -1
- package/dist/graph.js +88 -26
- package/dist/graph.js.map +1 -1
- package/dist/index.js +9 -3
- package/dist/index.js.map +1 -1
- package/dist/security.js +3 -2
- package/dist/security.js.map +1 -1
- package/dist/tools/calendar.d.ts +106 -3
- package/dist/tools/calendar.js +120 -50
- package/dist/tools/calendar.js.map +1 -1
- package/dist/tools/contacts.js +1 -8
- package/dist/tools/contacts.js.map +1 -1
- package/dist/tools/files.d.ts +6 -0
- package/dist/tools/files.js +6 -5
- package/dist/tools/files.js.map +1 -1
- package/dist/tools/mail.d.ts +4 -0
- package/dist/tools/mail.js +12 -6
- package/dist/tools/mail.js.map +1 -1
- package/dist/tools/tasks.d.ts +2 -0
- package/dist/tools/tasks.js +6 -3
- package/dist/tools/tasks.js.map +1 -1
- package/dist/tools/teams.d.ts +4 -0
- package/dist/tools/teams.js +8 -7
- package/dist/tools/teams.js.map +1 -1
- package/dist/tools/users.d.ts +2 -0
- package/dist/tools/users.js +6 -3
- package/dist/tools/users.js.map +1 -1
- package/dist/types.d.ts +3 -0
- package/dist/validation.d.ts +7 -0
- package/dist/validation.js +26 -0
- package/dist/validation.js.map +1 -0
- package/dist/version.d.ts +1 -0
- package/dist/version.js +4 -0
- package/dist/version.js.map +1 -0
- package/package.json +3 -3
package/dist/tools/mail.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Mail tools — list, read, send, reply, search, move, delete, folders
|
|
3
3
|
*/
|
|
4
|
+
import { normalizeTop } from "../validation.js";
|
|
4
5
|
function newestFirst(messages) {
|
|
5
6
|
const timestamp = (value) => {
|
|
6
7
|
const parsed = value ? Date.parse(value) : 0;
|
|
@@ -14,17 +15,20 @@ export function registerMailTools(client) {
|
|
|
14
15
|
// ── list ─────────────────────────────────────────────────────
|
|
15
16
|
async mail_list(args) {
|
|
16
17
|
const folder = args.folder || "inbox";
|
|
17
|
-
const top = args.top
|
|
18
|
+
const top = normalizeTop(args.top, 20);
|
|
18
19
|
const search = args.search?.trim();
|
|
19
20
|
let path = `${user}/mailFolders/${encodeURIComponent(folder)}/messages?$top=${top}&$select=id,subject,from,receivedDateTime,isRead,bodyPreview,hasAttachments,importance,webLink`;
|
|
20
|
-
if (
|
|
21
|
+
if (search && args.filter)
|
|
22
|
+
throw new Error("Use search or filter, not both, for mail queries");
|
|
23
|
+
// Arbitrary filters cannot safely be combined with Outlook's sort rules.
|
|
24
|
+
if (!search && !args.filter)
|
|
21
25
|
path += `&$orderby=receivedDateTime desc`;
|
|
22
26
|
if (args.filter)
|
|
23
27
|
path += `&$filter=${encodeURIComponent(args.filter)}`;
|
|
24
28
|
if (search)
|
|
25
29
|
path += `&$search="${encodeURIComponent(search)}"`;
|
|
26
30
|
const msgs = await client.getAll(path, 10, top);
|
|
27
|
-
const ordered = search ? newestFirst(msgs) : msgs;
|
|
31
|
+
const ordered = search || args.filter ? newestFirst(msgs) : msgs;
|
|
28
32
|
return JSON.stringify(ordered.map((m) => ({
|
|
29
33
|
id: m.id,
|
|
30
34
|
subject: m.subject,
|
|
@@ -90,7 +94,9 @@ export function registerMailTools(client) {
|
|
|
90
94
|
},
|
|
91
95
|
// ── search ───────────────────────────────────────────────────
|
|
92
96
|
async mail_search(args) {
|
|
93
|
-
const top = args.top
|
|
97
|
+
const top = normalizeTop(args.top, 20);
|
|
98
|
+
if (!args.query.trim())
|
|
99
|
+
throw new Error("query cannot be empty");
|
|
94
100
|
const path = `${user}/messages?$search="${encodeURIComponent(args.query.trim())}"&$top=${top}`;
|
|
95
101
|
const msgs = newestFirst(await client.getAll(path, 10, top));
|
|
96
102
|
return JSON.stringify(msgs.map((m) => ({
|
|
@@ -142,7 +148,7 @@ export const mailToolSchemas = [
|
|
|
142
148
|
type: "object",
|
|
143
149
|
properties: {
|
|
144
150
|
folder: { type: "string", description: "Folder name: inbox, sentitems, drafts, etc." },
|
|
145
|
-
top: { type: "
|
|
151
|
+
top: { type: "integer", minimum: 1, maximum: 500, description: "Maximum emails to return" },
|
|
146
152
|
filter: { type: "string", description: "OData filter, e.g. isRead eq false" },
|
|
147
153
|
search: { type: "string", description: "Search query within folder" },
|
|
148
154
|
},
|
|
@@ -195,7 +201,7 @@ export const mailToolSchemas = [
|
|
|
195
201
|
type: "object",
|
|
196
202
|
properties: {
|
|
197
203
|
query: { type: "string", description: "Search query (supports KQL)" },
|
|
198
|
-
top: { type: "
|
|
204
|
+
top: { type: "integer", minimum: 1, maximum: 500, description: "Max results", default: 20 },
|
|
199
205
|
},
|
|
200
206
|
required: ["query"],
|
|
201
207
|
},
|
package/dist/tools/mail.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mail.js","sourceRoot":"","sources":["../../src/tools/mail.ts"],"names":[],"mappings":"AAAA;;GAEG;
|
|
1
|
+
{"version":3,"file":"mail.js","sourceRoot":"","sources":["../../src/tools/mail.ts"],"names":[],"mappings":"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"}
|
package/dist/tools/tasks.d.ts
CHANGED
package/dist/tools/tasks.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Microsoft To Do tasks tools — list lists, list tasks, create, update, delete
|
|
3
3
|
*/
|
|
4
|
+
import { normalizeTop } from "../validation.js";
|
|
4
5
|
export function registerTasksTools(client) {
|
|
5
6
|
const user = "/me";
|
|
6
7
|
return {
|
|
@@ -14,7 +15,7 @@ export function registerTasksTools(client) {
|
|
|
14
15
|
})), null, 2);
|
|
15
16
|
},
|
|
16
17
|
async tasks_list(args) {
|
|
17
|
-
const top = args.top
|
|
18
|
+
const top = normalizeTop(args.top, 50);
|
|
18
19
|
let path = `${user}/todo/lists/${encodeURIComponent(args.listId)}/tasks?$top=${top}&$orderby=createdDateTime desc`;
|
|
19
20
|
if (args.filter)
|
|
20
21
|
path += `&$filter=${encodeURIComponent(args.filter)}`;
|
|
@@ -44,7 +45,7 @@ export function registerTasksTools(client) {
|
|
|
44
45
|
},
|
|
45
46
|
async tasks_update(args) {
|
|
46
47
|
const patch = {};
|
|
47
|
-
if (args.title)
|
|
48
|
+
if (args.title !== undefined)
|
|
48
49
|
patch.title = args.title;
|
|
49
50
|
if (args.status)
|
|
50
51
|
patch.status = args.status;
|
|
@@ -52,6 +53,8 @@ export function registerTasksTools(client) {
|
|
|
52
53
|
patch.importance = args.importance;
|
|
53
54
|
if (args.due)
|
|
54
55
|
patch.dueDateTime = { dateTime: args.due, timeZone: "UTC" };
|
|
56
|
+
if (Object.keys(patch).length === 0)
|
|
57
|
+
throw new Error("Provide at least one task field to update");
|
|
55
58
|
const taskId = encodeURIComponent(args.taskId);
|
|
56
59
|
await client.patch(`${user}/todo/lists/${encodeURIComponent(args.listId)}/tasks/${taskId}`, patch);
|
|
57
60
|
return JSON.stringify({ success: true, taskId: args.taskId });
|
|
@@ -76,7 +79,7 @@ export const tasksToolSchemas = [
|
|
|
76
79
|
type: "object",
|
|
77
80
|
properties: {
|
|
78
81
|
listId: { type: "string", description: "Task list ID (from m365_tasks_lists)" },
|
|
79
|
-
top: { type: "
|
|
82
|
+
top: { type: "integer", minimum: 1, maximum: 500, description: "Max tasks", default: 50 },
|
|
80
83
|
filter: { type: "string", description: "OData filter, e.g. status ne 'completed'" },
|
|
81
84
|
},
|
|
82
85
|
required: ["listId"],
|
package/dist/tools/tasks.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tasks.js","sourceRoot":"","sources":["../../src/tools/tasks.ts"],"names":[],"mappings":"AAAA;;GAEG;
|
|
1
|
+
{"version":3,"file":"tasks.js","sourceRoot":"","sources":["../../src/tools/tasks.ts"],"names":[],"mappings":"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"}
|
package/dist/tools/teams.d.ts
CHANGED
|
@@ -23,6 +23,8 @@ export declare const teamsToolSchemas: ({
|
|
|
23
23
|
properties: {
|
|
24
24
|
top: {
|
|
25
25
|
type: string;
|
|
26
|
+
minimum: number;
|
|
27
|
+
maximum: number;
|
|
26
28
|
description: string;
|
|
27
29
|
default: number;
|
|
28
30
|
};
|
|
@@ -43,6 +45,8 @@ export declare const teamsToolSchemas: ({
|
|
|
43
45
|
};
|
|
44
46
|
top: {
|
|
45
47
|
type: string;
|
|
48
|
+
minimum: number;
|
|
49
|
+
maximum: number;
|
|
46
50
|
description: string;
|
|
47
51
|
default: number;
|
|
48
52
|
};
|
package/dist/tools/teams.js
CHANGED
|
@@ -1,12 +1,13 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Teams tools — list chats, list messages, send message
|
|
3
3
|
*/
|
|
4
|
+
import { normalizeTop } from "../validation.js";
|
|
4
5
|
export function registerTeamsTools(client) {
|
|
5
6
|
const user = "/me";
|
|
6
7
|
return {
|
|
7
8
|
async teams_chats(args) {
|
|
8
|
-
const top = args.top
|
|
9
|
-
const path = `${user}/chats?$top=${top}&$expand=members`;
|
|
9
|
+
const top = normalizeTop(args.top, 20);
|
|
10
|
+
const path = `${user}/chats?$top=${Math.min(top, 50)}&$expand=members`;
|
|
10
11
|
const chats = await client.getAll(path, 10, top);
|
|
11
12
|
chats.sort((a, b) => Date.parse(b.lastUpdatedDateTime ?? "") -
|
|
12
13
|
Date.parse(a.lastUpdatedDateTime ?? ""));
|
|
@@ -19,9 +20,9 @@ export function registerTeamsTools(client) {
|
|
|
19
20
|
})), null, 2);
|
|
20
21
|
},
|
|
21
22
|
async teams_messages(args) {
|
|
22
|
-
const top = args.top
|
|
23
|
+
const top = normalizeTop(args.top, 30);
|
|
23
24
|
const chatId = encodeURIComponent(args.chatId);
|
|
24
|
-
const path = `${user}/chats/${chatId}/messages?$top=${top}&$orderby=createdDateTime desc`;
|
|
25
|
+
const path = `${user}/chats/${chatId}/messages?$top=${Math.min(top, 50)}&$orderby=createdDateTime desc`;
|
|
25
26
|
const msgs = await client.getAll(path, 10, top);
|
|
26
27
|
return JSON.stringify(msgs.map((m) => ({
|
|
27
28
|
id: m.id,
|
|
@@ -33,7 +34,7 @@ export function registerTeamsTools(client) {
|
|
|
33
34
|
},
|
|
34
35
|
async teams_send(args) {
|
|
35
36
|
const chatId = encodeURIComponent(args.chatId);
|
|
36
|
-
const data = await client.post(
|
|
37
|
+
const data = await client.post(`/chats/${chatId}/messages`, { body: { contentType: "text", content: args.message } });
|
|
37
38
|
return JSON.stringify({ id: data.id, success: true }, null, 2);
|
|
38
39
|
},
|
|
39
40
|
};
|
|
@@ -45,7 +46,7 @@ export const teamsToolSchemas = [
|
|
|
45
46
|
inputSchema: {
|
|
46
47
|
type: "object",
|
|
47
48
|
properties: {
|
|
48
|
-
top: { type: "
|
|
49
|
+
top: { type: "integer", minimum: 1, maximum: 500, description: "Max chats", default: 20 },
|
|
49
50
|
},
|
|
50
51
|
},
|
|
51
52
|
},
|
|
@@ -56,7 +57,7 @@ export const teamsToolSchemas = [
|
|
|
56
57
|
type: "object",
|
|
57
58
|
properties: {
|
|
58
59
|
chatId: { type: "string", description: "Chat ID (from m365_teams_chats)" },
|
|
59
|
-
top: { type: "
|
|
60
|
+
top: { type: "integer", minimum: 1, maximum: 500, description: "Max messages", default: 30 },
|
|
60
61
|
},
|
|
61
62
|
required: ["chatId"],
|
|
62
63
|
},
|
package/dist/tools/teams.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"teams.js","sourceRoot":"","sources":["../../src/tools/teams.ts"],"names":[],"mappings":"AAAA;;GAEG;
|
|
1
|
+
{"version":3,"file":"teams.js","sourceRoot":"","sources":["../../src/tools/teams.ts"],"names":[],"mappings":"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"}
|
package/dist/tools/users.d.ts
CHANGED
package/dist/tools/users.js
CHANGED
|
@@ -1,17 +1,20 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Users tools — list org users, get profile, get manager
|
|
3
3
|
*/
|
|
4
|
+
import { normalizeTop } from "../validation.js";
|
|
4
5
|
export function registerUsersTools(client) {
|
|
5
6
|
return {
|
|
6
7
|
async users_list(args) {
|
|
7
|
-
const top = args.top
|
|
8
|
+
const top = normalizeTop(args.top, 50);
|
|
8
9
|
const search = args.search?.trim();
|
|
9
10
|
let path = `/users?$top=${top}&$select=id,displayName,mail,userPrincipalName,jobTitle,department,officeLocation`;
|
|
10
11
|
if (args.filter)
|
|
11
12
|
path += `&$filter=${encodeURIComponent(args.filter)}`;
|
|
12
13
|
const headers = {};
|
|
13
14
|
if (search) {
|
|
14
|
-
|
|
15
|
+
const literal = search.replace(/\\/g, "\\\\").replace(/"/g, '\\"');
|
|
16
|
+
const expression = `"displayName:${literal}" OR "mail:${literal}"`;
|
|
17
|
+
path += `&$search=${encodeURIComponent(expression)}&$count=true`;
|
|
15
18
|
headers.ConsistencyLevel = "eventual";
|
|
16
19
|
}
|
|
17
20
|
const users = await client.getAll(path, 10, top, headers);
|
|
@@ -38,7 +41,7 @@ export const usersToolSchemas = [
|
|
|
38
41
|
inputSchema: {
|
|
39
42
|
type: "object",
|
|
40
43
|
properties: {
|
|
41
|
-
top: { type: "
|
|
44
|
+
top: { type: "integer", minimum: 1, maximum: 500, description: "Max results", default: 50 },
|
|
42
45
|
filter: { type: "string", description: "OData filter" },
|
|
43
46
|
search: { type: "string", description: "Search by displayName or mail" },
|
|
44
47
|
},
|
package/dist/tools/users.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"users.js","sourceRoot":"","sources":["../../src/tools/users.ts"],"names":[],"mappings":"AAAA;;GAEG;
|
|
1
|
+
{"version":3,"file":"users.js","sourceRoot":"","sources":["../../src/tools/users.ts"],"names":[],"mappings":"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"}
|
package/dist/types.d.ts
CHANGED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/** Shared result limits also protect callers using the tool helpers directly. */
|
|
2
|
+
export declare function normalizeTop(value: number | undefined, fallback: number): number;
|
|
3
|
+
/** Compile the advertised schemas once and enforce them before tool dispatch. */
|
|
4
|
+
export declare function createArgumentValidator(tools: readonly {
|
|
5
|
+
name: string;
|
|
6
|
+
inputSchema: unknown;
|
|
7
|
+
}[]): (name: string, args: unknown) => void;
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { AjvJsonSchemaValidator } from "@modelcontextprotocol/sdk/validation/ajv";
|
|
2
|
+
/** Shared result limits also protect callers using the tool helpers directly. */
|
|
3
|
+
export function normalizeTop(value, fallback) {
|
|
4
|
+
if (value === undefined)
|
|
5
|
+
return fallback;
|
|
6
|
+
if (!Number.isInteger(value) || value < 1 || value > 500) {
|
|
7
|
+
throw new Error("top must be an integer between 1 and 500");
|
|
8
|
+
}
|
|
9
|
+
return value;
|
|
10
|
+
}
|
|
11
|
+
/** Compile the advertised schemas once and enforce them before tool dispatch. */
|
|
12
|
+
export function createArgumentValidator(tools) {
|
|
13
|
+
const provider = new AjvJsonSchemaValidator();
|
|
14
|
+
const validators = new Map(tools.map((tool) => [
|
|
15
|
+
tool.name, provider.getValidator(tool.inputSchema),
|
|
16
|
+
]));
|
|
17
|
+
return (name, args) => {
|
|
18
|
+
const validator = validators.get(name);
|
|
19
|
+
if (!validator)
|
|
20
|
+
throw new Error(`Unknown tool: ${name}`);
|
|
21
|
+
const result = validator(args);
|
|
22
|
+
if (!result.valid)
|
|
23
|
+
throw new Error(`Invalid arguments for ${name}: ${result.errorMessage}`);
|
|
24
|
+
};
|
|
25
|
+
}
|
|
26
|
+
//# sourceMappingURL=validation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validation.js","sourceRoot":"","sources":["../src/validation.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,MAAM,0CAA0C,CAAC;AAGlF,iFAAiF;AACjF,MAAM,UAAU,YAAY,CAAC,KAAyB,EAAE,QAAgB;IACtE,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,QAAQ,CAAC;IACzC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,KAAK,GAAG,CAAC,IAAI,KAAK,GAAG,GAAG,EAAE,CAAC;QACzD,MAAM,IAAI,KAAK,CAAC,0CAA0C,CAAC,CAAC;IAC9D,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,iFAAiF;AACjF,MAAM,UAAU,uBAAuB,CAAC,KAAwD;IAC9F,MAAM,QAAQ,GAAG,IAAI,sBAAsB,EAAE,CAAC;IAC9C,MAAM,UAAU,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC;QAC7C,IAAI,CAAC,IAAI,EAAE,QAAQ,CAAC,YAAY,CAAC,IAAI,CAAC,WAA6B,CAAC;KACrE,CAAC,CAAC,CAAC;IACJ,OAAO,CAAC,IAAY,EAAE,IAAa,EAAQ,EAAE;QAC3C,MAAM,SAAS,GAAG,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACvC,IAAI,CAAC,SAAS;YAAE,MAAM,IAAI,KAAK,CAAC,iBAAiB,IAAI,EAAE,CAAC,CAAC;QACzD,MAAM,MAAM,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;QAC/B,IAAI,CAAC,MAAM,CAAC,KAAK;YAAE,MAAM,IAAI,KAAK,CAAC,yBAAyB,IAAI,KAAK,MAAM,CAAC,YAAY,EAAE,CAAC,CAAC;IAC9F,CAAC,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const VERSION: string;
|
package/dist/version.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"version.js","sourceRoot":"","sources":["../src/version.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAEvC,gEAAgE;AAChE,MAAM,CAAC,MAAM,OAAO,GAAI,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,GAAG,CAAC,iBAAiB,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,CAAyB,CAAC,OAAO,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@sam2kb/m365-mcp",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.2.0",
|
|
4
4
|
"description": "Production-grade Microsoft 365 MCP server — email, calendar, contacts, OneDrive, Teams, tasks, and users via delegated OAuth",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|
|
@@ -43,13 +43,13 @@
|
|
|
43
43
|
"access": "public"
|
|
44
44
|
},
|
|
45
45
|
"dependencies": {
|
|
46
|
-
"@modelcontextprotocol/sdk": "^1.
|
|
46
|
+
"@modelcontextprotocol/sdk": "^1.32.1"
|
|
47
47
|
},
|
|
48
48
|
"devDependencies": {
|
|
49
49
|
"@types/node": "^20.10.0",
|
|
50
50
|
"tsx": "^4.7.0",
|
|
51
51
|
"typescript": "^5.3.0",
|
|
52
|
-
"vitest": "^
|
|
52
|
+
"vitest": "^4.1.11"
|
|
53
53
|
},
|
|
54
54
|
"engines": {
|
|
55
55
|
"node": ">=18"
|