@sam2kb/m365-mcp 1.0.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.
@@ -0,0 +1,171 @@
1
+ /**
2
+ * Microsoft To Do tasks tools — list lists, list tasks, create, update, delete
3
+ */
4
+ import type { GraphClient } from "../graph.js";
5
+ export declare function registerTasksTools(client: GraphClient): {
6
+ tasks_lists(): Promise<string>;
7
+ tasks_list(args: {
8
+ listId: string;
9
+ top?: number;
10
+ filter?: string;
11
+ }): Promise<string>;
12
+ tasks_create(args: {
13
+ listId: string;
14
+ title: string;
15
+ body?: string;
16
+ due?: string;
17
+ importance?: string;
18
+ }): Promise<string>;
19
+ tasks_update(args: {
20
+ listId: string;
21
+ taskId: string;
22
+ title?: string;
23
+ status?: string;
24
+ importance?: string;
25
+ due?: string;
26
+ }): Promise<string>;
27
+ tasks_delete(args: {
28
+ listId: string;
29
+ taskId: string;
30
+ }): Promise<string>;
31
+ };
32
+ export declare const tasksToolSchemas: ({
33
+ name: string;
34
+ description: string;
35
+ inputSchema: {
36
+ type: string;
37
+ properties: {
38
+ listId?: undefined;
39
+ top?: undefined;
40
+ filter?: undefined;
41
+ title?: undefined;
42
+ body?: undefined;
43
+ due?: undefined;
44
+ importance?: undefined;
45
+ taskId?: undefined;
46
+ status?: undefined;
47
+ };
48
+ required?: undefined;
49
+ };
50
+ } | {
51
+ name: string;
52
+ description: string;
53
+ inputSchema: {
54
+ type: string;
55
+ properties: {
56
+ listId: {
57
+ type: string;
58
+ description: string;
59
+ };
60
+ top: {
61
+ type: string;
62
+ description: string;
63
+ default: number;
64
+ };
65
+ filter: {
66
+ type: string;
67
+ description: string;
68
+ };
69
+ title?: undefined;
70
+ body?: undefined;
71
+ due?: undefined;
72
+ importance?: undefined;
73
+ taskId?: undefined;
74
+ status?: undefined;
75
+ };
76
+ required: string[];
77
+ };
78
+ } | {
79
+ name: string;
80
+ description: string;
81
+ inputSchema: {
82
+ type: string;
83
+ properties: {
84
+ listId: {
85
+ type: string;
86
+ description: string;
87
+ };
88
+ title: {
89
+ type: string;
90
+ description: string;
91
+ };
92
+ body: {
93
+ type: string;
94
+ description: string;
95
+ };
96
+ due: {
97
+ type: string;
98
+ description: string;
99
+ };
100
+ importance: {
101
+ type: string;
102
+ description: string;
103
+ };
104
+ top?: undefined;
105
+ filter?: undefined;
106
+ taskId?: undefined;
107
+ status?: undefined;
108
+ };
109
+ required: string[];
110
+ };
111
+ } | {
112
+ name: string;
113
+ description: string;
114
+ inputSchema: {
115
+ type: string;
116
+ properties: {
117
+ listId: {
118
+ type: string;
119
+ description: string;
120
+ };
121
+ taskId: {
122
+ type: string;
123
+ description: string;
124
+ };
125
+ title: {
126
+ type: string;
127
+ description: string;
128
+ };
129
+ status: {
130
+ type: string;
131
+ description: string;
132
+ };
133
+ importance: {
134
+ type: string;
135
+ description: string;
136
+ };
137
+ due: {
138
+ type: string;
139
+ description: string;
140
+ };
141
+ top?: undefined;
142
+ filter?: undefined;
143
+ body?: undefined;
144
+ };
145
+ required: string[];
146
+ };
147
+ } | {
148
+ name: string;
149
+ description: string;
150
+ inputSchema: {
151
+ type: string;
152
+ properties: {
153
+ listId: {
154
+ type: string;
155
+ description: string;
156
+ };
157
+ taskId: {
158
+ type: string;
159
+ description: string;
160
+ };
161
+ top?: undefined;
162
+ filter?: undefined;
163
+ title?: undefined;
164
+ body?: undefined;
165
+ due?: undefined;
166
+ importance?: undefined;
167
+ status?: undefined;
168
+ };
169
+ required: string[];
170
+ };
171
+ })[];
@@ -0,0 +1,129 @@
1
+ /**
2
+ * Microsoft To Do tasks tools — list lists, list tasks, create, update, delete
3
+ */
4
+ export function registerTasksTools(client) {
5
+ const user = "/me";
6
+ return {
7
+ async tasks_lists() {
8
+ const lists = await client.getAll(`${user}/todo/lists?$select=id,displayName,isOwner,wellknownListName`);
9
+ return JSON.stringify(lists.map((l) => ({
10
+ id: l.id,
11
+ name: l.displayName,
12
+ wellknown: l.wellknownListName,
13
+ isOwner: l.isOwner,
14
+ })), null, 2);
15
+ },
16
+ async tasks_list(args) {
17
+ const top = args.top || 50;
18
+ let path = `${user}/todo/lists/${encodeURIComponent(args.listId)}/tasks?$top=${top}&$orderby=createdDateTime desc`;
19
+ if (args.filter)
20
+ path += `&$filter=${encodeURIComponent(args.filter)}`;
21
+ const tasks = await client.getAll(path, 10, top);
22
+ return JSON.stringify(tasks.map((t) => ({
23
+ id: t.id,
24
+ title: t.title,
25
+ status: t.status,
26
+ importance: t.importance,
27
+ due: t.dueDateTime,
28
+ body: t.body?.content?.slice(0, 500),
29
+ created: t.createdDateTime,
30
+ })), null, 2);
31
+ },
32
+ async tasks_create(args) {
33
+ const task = { title: args.title };
34
+ if (args.importance)
35
+ task.importance = args.importance;
36
+ if (args.due) {
37
+ task.dueDateTime = { dateTime: args.due, timeZone: "UTC" };
38
+ }
39
+ if (args.body) {
40
+ task.body = { contentType: "text", content: args.body };
41
+ }
42
+ const data = await client.post(`${user}/todo/lists/${encodeURIComponent(args.listId)}/tasks`, task);
43
+ return JSON.stringify({ id: data.id, title: data.title, status: data.status }, null, 2);
44
+ },
45
+ async tasks_update(args) {
46
+ const patch = {};
47
+ if (args.title)
48
+ patch.title = args.title;
49
+ if (args.status)
50
+ patch.status = args.status;
51
+ if (args.importance)
52
+ patch.importance = args.importance;
53
+ if (args.due)
54
+ patch.dueDateTime = { dateTime: args.due, timeZone: "UTC" };
55
+ const taskId = encodeURIComponent(args.taskId);
56
+ await client.patch(`${user}/todo/lists/${encodeURIComponent(args.listId)}/tasks/${taskId}`, patch);
57
+ return JSON.stringify({ success: true, taskId: args.taskId });
58
+ },
59
+ async tasks_delete(args) {
60
+ const taskId = encodeURIComponent(args.taskId);
61
+ await client.delete(`${user}/todo/lists/${encodeURIComponent(args.listId)}/tasks/${taskId}`);
62
+ return JSON.stringify({ success: true });
63
+ },
64
+ };
65
+ }
66
+ export const tasksToolSchemas = [
67
+ {
68
+ name: "m365_tasks_lists",
69
+ description: "List your Microsoft To Do task lists",
70
+ inputSchema: { type: "object", properties: {} },
71
+ },
72
+ {
73
+ name: "m365_tasks_list",
74
+ description: "List tasks in a task list",
75
+ inputSchema: {
76
+ type: "object",
77
+ properties: {
78
+ listId: { type: "string", description: "Task list ID (from m365_tasks_lists)" },
79
+ top: { type: "number", description: "Max tasks", default: 50 },
80
+ filter: { type: "string", description: "OData filter, e.g. status ne 'completed'" },
81
+ },
82
+ required: ["listId"],
83
+ },
84
+ },
85
+ {
86
+ name: "m365_tasks_create",
87
+ description: "Create a new task",
88
+ inputSchema: {
89
+ type: "object",
90
+ properties: {
91
+ listId: { type: "string", description: "Task list ID" },
92
+ title: { type: "string", description: "Task title" },
93
+ body: { type: "string", description: "Task notes/description" },
94
+ due: { type: "string", description: "Due date (ISO 8601)" },
95
+ importance: { type: "string", description: "low, normal, or high" },
96
+ },
97
+ required: ["listId", "title"],
98
+ },
99
+ },
100
+ {
101
+ name: "m365_tasks_update",
102
+ description: "Update an existing task",
103
+ inputSchema: {
104
+ type: "object",
105
+ properties: {
106
+ listId: { type: "string", description: "Task list ID" },
107
+ taskId: { type: "string", description: "Task ID" },
108
+ title: { type: "string", description: "New title" },
109
+ status: { type: "string", description: "notStarted, inProgress, completed, waitingOnOthers, deferred" },
110
+ importance: { type: "string", description: "low, normal, or high" },
111
+ due: { type: "string", description: "New due date (ISO 8601)" },
112
+ },
113
+ required: ["listId", "taskId"],
114
+ },
115
+ },
116
+ {
117
+ name: "m365_tasks_delete",
118
+ description: "Delete a task",
119
+ inputSchema: {
120
+ type: "object",
121
+ properties: {
122
+ listId: { type: "string", description: "Task list ID" },
123
+ taskId: { type: "string", description: "Task ID" },
124
+ },
125
+ required: ["listId", "taskId"],
126
+ },
127
+ },
128
+ ];
129
+ //# sourceMappingURL=tasks.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tasks.js","sourceRoot":"","sources":["../../src/tools/tasks.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,71 @@
1
+ /**
2
+ * Teams tools — list chats, list messages, send message
3
+ */
4
+ import type { GraphClient } from "../graph.js";
5
+ export declare function registerTeamsTools(client: GraphClient): {
6
+ teams_chats(args: {
7
+ top?: number;
8
+ }): Promise<string>;
9
+ teams_messages(args: {
10
+ chatId: string;
11
+ top?: number;
12
+ }): Promise<string>;
13
+ teams_send(args: {
14
+ chatId: string;
15
+ message: string;
16
+ }): Promise<string>;
17
+ };
18
+ export declare const teamsToolSchemas: ({
19
+ name: string;
20
+ description: string;
21
+ inputSchema: {
22
+ type: string;
23
+ properties: {
24
+ top: {
25
+ type: string;
26
+ description: string;
27
+ default: number;
28
+ };
29
+ chatId?: undefined;
30
+ message?: undefined;
31
+ };
32
+ required?: undefined;
33
+ };
34
+ } | {
35
+ name: string;
36
+ description: string;
37
+ inputSchema: {
38
+ type: string;
39
+ properties: {
40
+ chatId: {
41
+ type: string;
42
+ description: string;
43
+ };
44
+ top: {
45
+ type: string;
46
+ description: string;
47
+ default: number;
48
+ };
49
+ message?: undefined;
50
+ };
51
+ required: string[];
52
+ };
53
+ } | {
54
+ name: string;
55
+ description: string;
56
+ inputSchema: {
57
+ type: string;
58
+ properties: {
59
+ chatId: {
60
+ type: string;
61
+ description: string;
62
+ };
63
+ message: {
64
+ type: string;
65
+ description: string;
66
+ };
67
+ top?: undefined;
68
+ };
69
+ required: string[];
70
+ };
71
+ })[];
@@ -0,0 +1,75 @@
1
+ /**
2
+ * Teams tools — list chats, list messages, send message
3
+ */
4
+ export function registerTeamsTools(client) {
5
+ const user = "/me";
6
+ return {
7
+ async teams_chats(args) {
8
+ const top = args.top || 20;
9
+ const path = `${user}/chats?$top=${top}&$expand=members&$orderby=lastUpdatedDateTime desc`;
10
+ const chats = await client.getAll(path, 10, top);
11
+ return JSON.stringify(chats.map((c) => ({
12
+ id: c.id,
13
+ topic: c.topic || "(no topic)",
14
+ type: c.chatType,
15
+ members: c.members?.map((m) => m.displayName) ?? [],
16
+ lastUpdated: c.lastUpdatedDateTime,
17
+ })), null, 2);
18
+ },
19
+ async teams_messages(args) {
20
+ const top = args.top || 30;
21
+ const chatId = encodeURIComponent(args.chatId);
22
+ const path = `${user}/chats/${chatId}/messages?$top=${top}&$orderby=createdDateTime desc`;
23
+ const msgs = await client.getAll(path, 10, top);
24
+ return JSON.stringify(msgs.map((m) => ({
25
+ id: m.id,
26
+ from: m.from?.user?.displayName ?? "Unknown",
27
+ content: m.body?.content?.slice(0, 2000),
28
+ contentType: m.body?.contentType,
29
+ sent: m.createdDateTime,
30
+ })), null, 2);
31
+ },
32
+ async teams_send(args) {
33
+ const chatId = encodeURIComponent(args.chatId);
34
+ const data = await client.post(`${user}/chats/${chatId}/messages`, { body: { contentType: "text", content: args.message } });
35
+ return JSON.stringify({ id: data.id, success: true }, null, 2);
36
+ },
37
+ };
38
+ }
39
+ export const teamsToolSchemas = [
40
+ {
41
+ name: "m365_teams_chats",
42
+ description: "List your Teams chats",
43
+ inputSchema: {
44
+ type: "object",
45
+ properties: {
46
+ top: { type: "number", description: "Max chats", default: 20 },
47
+ },
48
+ },
49
+ },
50
+ {
51
+ name: "m365_teams_messages",
52
+ description: "Get messages from a Teams chat",
53
+ inputSchema: {
54
+ type: "object",
55
+ properties: {
56
+ chatId: { type: "string", description: "Chat ID (from m365_teams_chats)" },
57
+ top: { type: "number", description: "Max messages", default: 30 },
58
+ },
59
+ required: ["chatId"],
60
+ },
61
+ },
62
+ {
63
+ name: "m365_teams_send",
64
+ description: "Send a message to a Teams chat",
65
+ inputSchema: {
66
+ type: "object",
67
+ properties: {
68
+ chatId: { type: "string", description: "Chat ID" },
69
+ message: { type: "string", description: "Message text" },
70
+ },
71
+ required: ["chatId", "message"],
72
+ },
73
+ },
74
+ ];
75
+ //# sourceMappingURL=teams.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"teams.js","sourceRoot":"","sources":["../../src/tools/teams.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,55 @@
1
+ /**
2
+ * Users tools — list org users, get profile, get manager
3
+ */
4
+ import type { GraphClient } from "../graph.js";
5
+ export declare function registerUsersTools(client: GraphClient): {
6
+ users_list(args: {
7
+ top?: number;
8
+ filter?: string;
9
+ search?: string;
10
+ }): Promise<string>;
11
+ users_profile(args: {
12
+ user?: string;
13
+ }): Promise<string>;
14
+ users_manager(args: {
15
+ user?: string;
16
+ }): Promise<string>;
17
+ };
18
+ export declare const usersToolSchemas: ({
19
+ name: string;
20
+ description: string;
21
+ inputSchema: {
22
+ type: string;
23
+ properties: {
24
+ top: {
25
+ type: string;
26
+ description: string;
27
+ default: number;
28
+ };
29
+ filter: {
30
+ type: string;
31
+ description: string;
32
+ };
33
+ search: {
34
+ type: string;
35
+ description: string;
36
+ };
37
+ user?: undefined;
38
+ };
39
+ };
40
+ } | {
41
+ name: string;
42
+ description: string;
43
+ inputSchema: {
44
+ type: string;
45
+ properties: {
46
+ user: {
47
+ type: string;
48
+ description: string;
49
+ };
50
+ top?: undefined;
51
+ filter?: undefined;
52
+ search?: undefined;
53
+ };
54
+ };
55
+ })[];
@@ -0,0 +1,64 @@
1
+ /**
2
+ * Users tools — list org users, get profile, get manager
3
+ */
4
+ export function registerUsersTools(client) {
5
+ return {
6
+ async users_list(args) {
7
+ const top = args.top || 50;
8
+ let path = `/users?$top=${top}&$select=id,displayName,mail,userPrincipalName,jobTitle,department,officeLocation`;
9
+ if (args.filter)
10
+ path += `&$filter=${encodeURIComponent(args.filter)}`;
11
+ if (args.search)
12
+ path += `&$search="${encodeURIComponent(args.search)}"`;
13
+ const users = await client.getAll(path, 10, top);
14
+ return JSON.stringify(users, null, 2);
15
+ },
16
+ async users_profile(args) {
17
+ const userId = args.user || "me";
18
+ const userPath = userId === "me" ? "/me" : `/users/${encodeURIComponent(userId)}`;
19
+ const data = await client.get(`${userPath}?$select=id,displayName,mail,userPrincipalName,jobTitle,department,officeLocation,mobilePhone,businessPhones`);
20
+ return JSON.stringify(data, null, 2);
21
+ },
22
+ async users_manager(args) {
23
+ const userId = args.user || "me";
24
+ const userPath = userId === "me" ? "/me" : `/users/${encodeURIComponent(userId)}`;
25
+ const data = await client.get(`${userPath}/manager?$select=id,displayName,mail,userPrincipalName,jobTitle`);
26
+ return JSON.stringify(data, null, 2);
27
+ },
28
+ };
29
+ }
30
+ export const usersToolSchemas = [
31
+ {
32
+ name: "m365_users_list",
33
+ description: "List users in your organization (requires User.Read.All — may need admin consent)",
34
+ inputSchema: {
35
+ type: "object",
36
+ properties: {
37
+ top: { type: "number", description: "Max results", default: 50 },
38
+ filter: { type: "string", description: "OData filter" },
39
+ search: { type: "string", description: "Search by displayName or mail" },
40
+ },
41
+ },
42
+ },
43
+ {
44
+ name: "m365_users_profile",
45
+ description: "Get a user's profile (or your own if no user specified)",
46
+ inputSchema: {
47
+ type: "object",
48
+ properties: {
49
+ user: { type: "string", description: "User email or ID (defaults to 'me')" },
50
+ },
51
+ },
52
+ },
53
+ {
54
+ name: "m365_users_manager",
55
+ description: "Get a user's manager (or your own)",
56
+ inputSchema: {
57
+ type: "object",
58
+ properties: {
59
+ user: { type: "string", description: "User email or ID (defaults to 'me')" },
60
+ },
61
+ },
62
+ },
63
+ ];
64
+ //# sourceMappingURL=users.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"users.js","sourceRoot":"","sources":["../../src/tools/users.ts"],"names":[],"mappings":"AAAA;;GAEG;AAKH,MAAM,UAAU,kBAAkB,CAAC,MAAmB;IACpD,OAAO;QACL,KAAK,CAAC,UAAU,CAAC,IAAwD;YACvE,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,IAAI,EAAE,CAAC;YAC3B,IAAI,IAAI,GAAG,eAAe,GAAG,mFAAmF,CAAC;YACjH,IAAI,IAAI,CAAC,MAAM;gBAAE,IAAI,IAAI,YAAY,kBAAkB,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;YACvE,IAAI,IAAI,CAAC,MAAM;gBAAE,IAAI,IAAI,aAAa,kBAAkB,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC;YACzE,MAAM,KAAK,GAAG,MAAM,MAAM,CAAC,MAAM,CAAU,IAAI,EAAE,EAAE,EAAE,GAAG,CAAC,CAAC;YAC1D,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;QACxC,CAAC;QAED,KAAK,CAAC,aAAa,CAAC,IAAuB;YACzC,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC;YACjC,MAAM,QAAQ,GAAG,MAAM,KAAK,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,UAAU,kBAAkB,CAAC,MAAM,CAAC,EAAE,CAAC;YAClF,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,GAAG,CAC3B,GAAG,QAAQ,8GAA8G,CAC1H,CAAC;YACF,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;QACvC,CAAC;QAED,KAAK,CAAC,aAAa,CAAC,IAAuB;YACzC,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC;YACjC,MAAM,QAAQ,GAAG,MAAM,KAAK,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,UAAU,kBAAkB,CAAC,MAAM,CAAC,EAAE,CAAC;YAClF,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,GAAG,CAC3B,GAAG,QAAQ,iEAAiE,CAC7E,CAAC;YACF,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;QACvC,CAAC;KACF,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,MAAM,gBAAgB,GAAG;IAC9B;QACE,IAAI,EAAE,iBAAiB;QACvB,WAAW,EAAE,mFAAmF;QAChG,WAAW,EAAE;YACX,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE;gBACV,GAAG,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,aAAa,EAAE,OAAO,EAAE,EAAE,EAAE;gBAChE,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,cAAc,EAAE;gBACvD,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,+BAA+B,EAAE;aACzE;SACF;KACF;IACD;QACE,IAAI,EAAE,oBAAoB;QAC1B,WAAW,EAAE,yDAAyD;QACtE,WAAW,EAAE;YACX,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE;gBACV,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,qCAAqC,EAAE;aAC7E;SACF;KACF;IACD;QACE,IAAI,EAAE,oBAAoB;QAC1B,WAAW,EAAE,oCAAoC;QACjD,WAAW,EAAE;YACX,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE;gBACV,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,qCAAqC,EAAE;aAC7E;SACF;KACF;CACF,CAAC"}