@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.
- package/.env.example +11 -0
- package/LICENSE +21 -0
- package/README.md +257 -0
- package/SKILL.md +59 -0
- package/dist/auth-cli.d.ts +13 -0
- package/dist/auth-cli.js +127 -0
- package/dist/auth-cli.js.map +1 -0
- package/dist/auth.d.ts +44 -0
- package/dist/auth.js +288 -0
- package/dist/auth.js.map +1 -0
- package/dist/graph.d.ts +32 -0
- package/dist/graph.js +189 -0
- package/dist/graph.js.map +1 -0
- package/dist/index.d.ts +9 -0
- package/dist/index.js +152 -0
- package/dist/index.js.map +1 -0
- package/dist/tools/calendar.d.ts +236 -0
- package/dist/tools/calendar.js +255 -0
- package/dist/tools/calendar.js.map +1 -0
- package/dist/tools/contacts.d.ts +207 -0
- package/dist/tools/contacts.js +169 -0
- package/dist/tools/contacts.js.map +1 -0
- package/dist/tools/files.d.ts +135 -0
- package/dist/tools/files.js +127 -0
- package/dist/tools/files.js.map +1 -0
- package/dist/tools/mail.d.ts +300 -0
- package/dist/tools/mail.js +233 -0
- package/dist/tools/mail.js.map +1 -0
- package/dist/tools/tasks.d.ts +171 -0
- package/dist/tools/tasks.js +129 -0
- package/dist/tools/tasks.js.map +1 -0
- package/dist/tools/teams.d.ts +71 -0
- package/dist/tools/teams.js +75 -0
- package/dist/tools/teams.js.map +1 -0
- package/dist/tools/users.d.ts +55 -0
- package/dist/tools/users.js +64 -0
- package/dist/tools/users.js.map +1 -0
- package/dist/types.d.ts +197 -0
- package/dist/types.js +5 -0
- package/dist/types.js.map +1 -0
- package/package.json +48 -0
- package/tsconfig.json +19 -0
|
@@ -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"}
|