@floriscornel/teams-mcp 0.2.0 → 0.3.1
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 +52 -0
- package/dist/index.js +1 -1
- package/dist/tools/chats.d.ts.map +1 -1
- package/dist/tools/chats.js +76 -9
- package/dist/tools/chats.js.map +1 -1
- package/dist/tools/teams.d.ts.map +1 -1
- package/dist/tools/teams.js +325 -18
- package/dist/tools/teams.js.map +1 -1
- package/dist/utils/attachments.d.ts +37 -0
- package/dist/utils/attachments.d.ts.map +1 -0
- package/dist/utils/attachments.js +91 -0
- package/dist/utils/attachments.js.map +1 -0
- package/dist/utils/markdown.d.ts +13 -0
- package/dist/utils/markdown.d.ts.map +1 -0
- package/dist/utils/markdown.js +100 -0
- package/dist/utils/markdown.js.map +1 -0
- package/dist/utils/users.d.ts +48 -0
- package/dist/utils/users.d.ts.map +1 -0
- package/dist/utils/users.js +122 -0
- package/dist/utils/users.js.map +1 -0
- package/package.json +22 -28
package/README.md
CHANGED
|
@@ -66,7 +66,59 @@ To use this MCP server in Cursor/Claude/VS Code, add the following configuration
|
|
|
66
66
|
- Get recent messages with advanced filtering options
|
|
67
67
|
- Find messages mentioning specific users
|
|
68
68
|
|
|
69
|
+
## Rich Message Formatting Support
|
|
69
70
|
|
|
71
|
+
The following tools now support rich message formatting in Teams channels and chats:
|
|
72
|
+
- `send_channel_message`
|
|
73
|
+
- `send_chat_message`
|
|
74
|
+
- `reply_to_channel_message`
|
|
75
|
+
|
|
76
|
+
### Format Options
|
|
77
|
+
|
|
78
|
+
You can specify the `format` parameter to control the message formatting:
|
|
79
|
+
- `text` (default): Plain text
|
|
80
|
+
- `markdown`: Markdown formatting (bold, italic, lists, links, code, etc.) - converted to sanitized HTML
|
|
81
|
+
|
|
82
|
+
When `format` is set to `markdown`, the message content is converted to HTML using a secure markdown parser and sanitized to remove potentially dangerous content before being sent to Teams.
|
|
83
|
+
|
|
84
|
+
If `format` is not specified, the message will be sent as plain text.
|
|
85
|
+
|
|
86
|
+
### Example Usage
|
|
87
|
+
|
|
88
|
+
```json
|
|
89
|
+
{
|
|
90
|
+
"teamId": "...",
|
|
91
|
+
"channelId": "...",
|
|
92
|
+
"message": "**Bold text** and _italic text_\n\n- List item 1\n- List item 2\n\n[Link](https://example.com)",
|
|
93
|
+
"format": "markdown"
|
|
94
|
+
}
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
```json
|
|
98
|
+
{
|
|
99
|
+
"chatId": "...",
|
|
100
|
+
"message": "Simple plain text message",
|
|
101
|
+
"format": "text"
|
|
102
|
+
}
|
|
103
|
+
```
|
|
104
|
+
|
|
105
|
+
### Security Features
|
|
106
|
+
|
|
107
|
+
- **HTML Sanitization**: All markdown content is converted to HTML and sanitized to remove potentially dangerous elements (scripts, event handlers, etc.)
|
|
108
|
+
- **Allowed Tags**: Only safe HTML tags are permitted (p, strong, em, a, ul, ol, li, h1-h6, code, pre, etc.)
|
|
109
|
+
- **Safe Attributes**: Only safe attributes are allowed (href, target, src, alt, title, width, height)
|
|
110
|
+
- **XSS Prevention**: Content is automatically sanitized to prevent cross-site scripting attacks
|
|
111
|
+
|
|
112
|
+
### Supported Markdown Features
|
|
113
|
+
|
|
114
|
+
- **Text formatting**: Bold (`**text**`), italic (`_text_`), strikethrough (`~~text~~`)
|
|
115
|
+
- **Links**: `[text](url)`
|
|
116
|
+
- **Lists**: Bulleted (`- item`) and numbered (`1. item`)
|
|
117
|
+
- **Code**: Inline `` `code` `` and blocks ``` ```code``` ```
|
|
118
|
+
- **Headings**: `# H1` through `###### H6`
|
|
119
|
+
- **Line breaks**: Automatic conversion of newlines to `<br>` tags
|
|
120
|
+
- **Blockquotes**: `> quoted text`
|
|
121
|
+
- **Tables**: GitHub-flavored markdown tables
|
|
70
122
|
|
|
71
123
|
## 📦 Installation
|
|
72
124
|
|
package/dist/index.js
CHANGED
|
@@ -110,7 +110,7 @@ async function startMcpServer() {
|
|
|
110
110
|
// Create MCP server
|
|
111
111
|
const server = new McpServer({
|
|
112
112
|
name: "teams-mcp",
|
|
113
|
-
version: "0.
|
|
113
|
+
version: "0.3.1",
|
|
114
114
|
});
|
|
115
115
|
// Initialize Graph service (singleton)
|
|
116
116
|
const graphService = GraphService.getInstance();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chats.d.ts","sourceRoot":"","sources":["../../src/tools/chats.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAEzE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"chats.d.ts","sourceRoot":"","sources":["../../src/tools/chats.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAEzE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAczD,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,SAAS,EAAE,YAAY,EAAE,YAAY,QA4W9E"}
|
package/dist/tools/chats.js
CHANGED
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
import { z } from "zod";
|
|
2
|
+
import { markdownToHtml } from "../utils/markdown.js";
|
|
3
|
+
import { processMentionsInHtml } from "../utils/users.js";
|
|
2
4
|
export function registerChatTools(server, graphService) {
|
|
3
5
|
// List user's chats
|
|
4
6
|
server.tool("list_chats", {}, async () => {
|
|
@@ -153,37 +155,102 @@ export function registerChatTools(server, graphService) {
|
|
|
153
155
|
chatId: z.string().describe("Chat ID"),
|
|
154
156
|
message: z.string().describe("Message content"),
|
|
155
157
|
importance: z.enum(["normal", "high", "urgent"]).optional().describe("Message importance"),
|
|
156
|
-
|
|
158
|
+
format: z.enum(["text", "markdown"]).optional().describe("Message format (text or markdown)"),
|
|
159
|
+
mentions: z
|
|
160
|
+
.array(z.object({
|
|
161
|
+
mention: z
|
|
162
|
+
.string()
|
|
163
|
+
.describe("The @mention text (e.g., 'john.doe' or 'john.doe@company.com')"),
|
|
164
|
+
userId: z.string().describe("Azure AD User ID of the mentioned user"),
|
|
165
|
+
}))
|
|
166
|
+
.optional()
|
|
167
|
+
.describe("Array of @mentions to include in the message"),
|
|
168
|
+
}, async ({ chatId, message, importance = "normal", format = "text", mentions }) => {
|
|
157
169
|
try {
|
|
158
170
|
const client = await graphService.getClient();
|
|
159
|
-
|
|
171
|
+
// Process message content based on format
|
|
172
|
+
let content;
|
|
173
|
+
let contentType;
|
|
174
|
+
if (format === "markdown") {
|
|
175
|
+
content = await markdownToHtml(message);
|
|
176
|
+
contentType = "html";
|
|
177
|
+
}
|
|
178
|
+
else {
|
|
179
|
+
content = message;
|
|
180
|
+
contentType = "text";
|
|
181
|
+
}
|
|
182
|
+
// Process @mentions if provided
|
|
183
|
+
const mentionMappings = [];
|
|
184
|
+
if (mentions && mentions.length > 0) {
|
|
185
|
+
// Convert provided mentions to mappings with display names
|
|
186
|
+
for (const mention of mentions) {
|
|
187
|
+
try {
|
|
188
|
+
// Get user info to get display name
|
|
189
|
+
const userResponse = await client
|
|
190
|
+
.api(`/users/${mention.userId}`)
|
|
191
|
+
.select("displayName")
|
|
192
|
+
.get();
|
|
193
|
+
mentionMappings.push({
|
|
194
|
+
mention: mention.mention,
|
|
195
|
+
userId: mention.userId,
|
|
196
|
+
displayName: userResponse.displayName || mention.mention,
|
|
197
|
+
});
|
|
198
|
+
}
|
|
199
|
+
catch (error) {
|
|
200
|
+
console.warn(`Could not resolve user ${mention.userId}, using mention text as display name`);
|
|
201
|
+
mentionMappings.push({
|
|
202
|
+
mention: mention.mention,
|
|
203
|
+
userId: mention.userId,
|
|
204
|
+
displayName: mention.mention,
|
|
205
|
+
});
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
// Process mentions in HTML content
|
|
210
|
+
let finalMentions = [];
|
|
211
|
+
if (mentionMappings.length > 0) {
|
|
212
|
+
const result = processMentionsInHtml(content, mentionMappings);
|
|
213
|
+
content = result.content;
|
|
214
|
+
finalMentions = result.mentions;
|
|
215
|
+
// Ensure we're using HTML content type when mentions are present
|
|
216
|
+
contentType = "html";
|
|
217
|
+
}
|
|
218
|
+
// Build message payload
|
|
219
|
+
const messagePayload = {
|
|
160
220
|
body: {
|
|
161
|
-
content
|
|
162
|
-
contentType
|
|
221
|
+
content,
|
|
222
|
+
contentType,
|
|
163
223
|
},
|
|
164
|
-
importance
|
|
224
|
+
importance,
|
|
165
225
|
};
|
|
226
|
+
if (finalMentions.length > 0) {
|
|
227
|
+
messagePayload.mentions = finalMentions;
|
|
228
|
+
}
|
|
166
229
|
const result = (await client
|
|
167
230
|
.api(`/me/chats/${chatId}/messages`)
|
|
168
|
-
.post(
|
|
231
|
+
.post(messagePayload));
|
|
232
|
+
// Build success message
|
|
233
|
+
const successText = `✅ Message sent successfully. Message ID: ${result.id}${finalMentions.length > 0
|
|
234
|
+
? `\n📱 Mentions: ${finalMentions.map((m) => m.mentionText).join(", ")}`
|
|
235
|
+
: ""}`;
|
|
169
236
|
return {
|
|
170
237
|
content: [
|
|
171
238
|
{
|
|
172
239
|
type: "text",
|
|
173
|
-
text:
|
|
240
|
+
text: successText,
|
|
174
241
|
},
|
|
175
242
|
],
|
|
176
243
|
};
|
|
177
244
|
}
|
|
178
245
|
catch (error) {
|
|
179
|
-
const errorMessage = error instanceof Error ? error.message : "Unknown error occurred";
|
|
180
246
|
return {
|
|
181
247
|
content: [
|
|
182
248
|
{
|
|
183
249
|
type: "text",
|
|
184
|
-
text: `❌
|
|
250
|
+
text: `❌ Failed to send message: ${error.message}`,
|
|
185
251
|
},
|
|
186
252
|
],
|
|
253
|
+
isError: true,
|
|
187
254
|
};
|
|
188
255
|
}
|
|
189
256
|
});
|
package/dist/tools/chats.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chats.js","sourceRoot":"","sources":["../../src/tools/chats.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;
|
|
1
|
+
{"version":3,"file":"chats.js","sourceRoot":"","sources":["../../src/tools/chats.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAYxB,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAC;AAE1D,MAAM,UAAU,iBAAiB,CAAC,MAAiB,EAAE,YAA0B;IAC7E,oBAAoB;IACpB,MAAM,CAAC,IAAI,CAAC,YAAY,EAAE,EAAE,EAAE,KAAK,IAAI,EAAE;QACvC,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC,SAAS,EAAE,CAAC;YAC9C,MAAM,QAAQ,GAAG,CAAC,MAAM,MAAM,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,GAAG,EAAE,CAA2B,CAAC;YAEjF,IAAI,CAAC,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC;gBAC7B,OAAO;oBACL,OAAO,EAAE;wBACP;4BACE,IAAI,EAAE,MAAM;4BACZ,IAAI,EAAE,iBAAiB;yBACxB;qBACF;iBACF,CAAC;YACJ,CAAC;YAED,MAAM,QAAQ,GAAkB,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAU,EAAE,EAAE,CAAC,CAAC;gBAClE,EAAE,EAAE,IAAI,CAAC,EAAE;gBACX,KAAK,EAAE,IAAI,CAAC,KAAK,IAAI,UAAU;gBAC/B,QAAQ,EAAE,IAAI,CAAC,QAAQ;gBACvB,WAAW,EAAE,IAAI,CAAC,OAAO,EAAE,MAAM;aAClC,CAAC,CAAC,CAAC;YAEJ,OAAO;gBACL,OAAO,EAAE;oBACP;wBACE,IAAI,EAAE,MAAM;wBACZ,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;qBACxC;iBACF;aACF,CAAC;QACJ,CAAC;QAAC,OAAO,KAAc,EAAE,CAAC;YACxB,MAAM,YAAY,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,wBAAwB,CAAC;YACvF,OAAO;gBACL,OAAO,EAAE;oBACP;wBACE,IAAI,EAAE,MAAM;wBACZ,IAAI,EAAE,YAAY,YAAY,EAAE;qBACjC;iBACF;aACF,CAAC;QACJ,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,oBAAoB;IACpB,MAAM,CAAC,IAAI,CACT,mBAAmB,EACnB;QACE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC;QACtC,KAAK,EAAE,CAAC;aACL,MAAM,EAAE;aACR,GAAG,CAAC,CAAC,CAAC;aACN,GAAG,CAAC,EAAE,CAAC;aACP,QAAQ,EAAE;aACV,OAAO,CAAC,EAAE,CAAC;aACX,QAAQ,CAAC,gCAAgC,CAAC;QAC7C,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,sCAAsC,CAAC;QAC7E,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,sCAAsC,CAAC;QAC7E,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,uCAAuC,CAAC;QACjF,OAAO,EAAE,CAAC;aACP,IAAI,CAAC,CAAC,iBAAiB,EAAE,sBAAsB,CAAC,CAAC;aACjD,QAAQ,EAAE;aACV,OAAO,CAAC,iBAAiB,CAAC;aAC1B,QAAQ,CAAC,YAAY,CAAC;QACzB,UAAU,EAAE,CAAC;aACV,OAAO,EAAE;aACT,QAAQ,EAAE;aACV,OAAO,CAAC,IAAI,CAAC;aACb,QAAQ,CAAC,yCAAyC,CAAC;KACvD,EACD,KAAK,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,UAAU,EAAE,EAAE,EAAE;QACvE,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC,SAAS,EAAE,CAAC;YAE9C,yBAAyB;YACzB,MAAM,WAAW,GAAa,CAAC,QAAQ,KAAK,EAAE,CAAC,CAAC;YAEhD,eAAe;YACf,MAAM,aAAa,GAAG,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC;YAClD,WAAW,CAAC,IAAI,CAAC,YAAY,OAAO,IAAI,aAAa,EAAE,CAAC,CAAC;YAEzD,uDAAuD;YACvD,MAAM,OAAO,GAAa,EAAE,CAAC;YAC7B,IAAI,QAAQ,EAAE,CAAC;gBACb,OAAO,CAAC,IAAI,CAAC,oBAAoB,QAAQ,GAAG,CAAC,CAAC;YAChD,CAAC;YAED,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACvB,WAAW,CAAC,IAAI,CAAC,WAAW,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;YACvD,CAAC;YAED,MAAM,WAAW,GAAG,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YAE1C,MAAM,QAAQ,GAAG,CAAC,MAAM,MAAM;iBAC3B,GAAG,CAAC,aAAa,MAAM,aAAa,WAAW,EAAE,CAAC;iBAClD,GAAG,EAAE,CAAkC,CAAC;YAE3C,IAAI,CAAC,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC;gBAC7B,OAAO;oBACL,OAAO,EAAE;wBACP;4BACE,IAAI,EAAE,MAAM;4BACZ,IAAI,EAAE,4DAA4D;yBACnE;qBACF;iBACF,CAAC;YACJ,CAAC;YAED,gFAAgF;YAChF,IAAI,gBAAgB,GAAG,QAAQ,CAAC,KAAK,CAAC;YAEtC,IAAI,KAAK,IAAI,KAAK,EAAE,CAAC;gBACnB,gBAAgB,GAAG,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,OAAoB,EAAE,EAAE;oBAChE,IAAI,CAAC,OAAO,CAAC,eAAe;wBAAE,OAAO,IAAI,CAAC;oBAE1C,MAAM,WAAW,GAAG,IAAI,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC;oBACtD,IAAI,KAAK,EAAE,CAAC;wBACV,MAAM,SAAS,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC;wBAClC,IAAI,WAAW,IAAI,SAAS;4BAAE,OAAO,KAAK,CAAC;oBAC7C,CAAC;oBACD,IAAI,KAAK,EAAE,CAAC;wBACV,MAAM,SAAS,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC;wBAClC,IAAI,WAAW,IAAI,SAAS;4BAAE,OAAO,KAAK,CAAC;oBAC7C,CAAC;oBACD,OAAO,IAAI,CAAC;gBACd,CAAC,CAAC,CAAC;YACL,CAAC;YAED,MAAM,WAAW,GAAqB,gBAAgB,CAAC,GAAG,CAAC,CAAC,OAAoB,EAAE,EAAE,CAAC,CAAC;gBACpF,EAAE,EAAE,OAAO,CAAC,EAAE;gBACd,OAAO,EAAE,OAAO,CAAC,IAAI,EAAE,OAAO;gBAC9B,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,IAAI,EAAE,WAAW;gBACrC,eAAe,EAAE,OAAO,CAAC,eAAe;aACzC,CAAC,CAAC,CAAC;YAEJ,OAAO;gBACL,OAAO,EAAE;oBACP;wBACE,IAAI,EAAE,MAAM;wBACZ,IAAI,EAAE,IAAI,CAAC,SAAS,CAClB;4BACE,OAAO,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE;4BACnC,eAAe,EAAE,KAAK,IAAI,KAAK,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,aAAa;4BAC/D,aAAa,EAAE,WAAW,CAAC,MAAM;4BACjC,OAAO,EAAE,CAAC,CAAC,QAAQ,CAAC,iBAAiB,CAAC;4BACtC,QAAQ,EAAE,WAAW;yBACtB,EACD,IAAI,EACJ,CAAC,CACF;qBACF;iBACF;aACF,CAAC;QACJ,CAAC;QAAC,OAAO,KAAc,EAAE,CAAC;YACxB,MAAM,YAAY,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,wBAAwB,CAAC;YACvF,OAAO;gBACL,OAAO,EAAE;oBACP;wBACE,IAAI,EAAE,MAAM;wBACZ,IAAI,EAAE,YAAY,YAAY,EAAE;qBACjC;iBACF;aACF,CAAC;QACJ,CAAC;IACH,CAAC,CACF,CAAC;IAEF,oBAAoB;IACpB,MAAM,CAAC,IAAI,CACT,mBAAmB,EACnB;QACE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC;QACtC,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,iBAAiB,CAAC;QAC/C,UAAU,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,oBAAoB,CAAC;QAC1F,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,mCAAmC,CAAC;QAC7F,QAAQ,EAAE,CAAC;aACR,KAAK,CACJ,CAAC,CAAC,MAAM,CAAC;YACP,OAAO,EAAE,CAAC;iBACP,MAAM,EAAE;iBACR,QAAQ,CAAC,gEAAgE,CAAC;YAC7E,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,wCAAwC,CAAC;SACtE,CAAC,CACH;aACA,QAAQ,EAAE;aACV,QAAQ,CAAC,8CAA8C,CAAC;KAC5D,EACD,KAAK,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,UAAU,GAAG,QAAQ,EAAE,MAAM,GAAG,MAAM,EAAE,QAAQ,EAAE,EAAE,EAAE;QAC9E,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC,SAAS,EAAE,CAAC;YAE9C,0CAA0C;YAC1C,IAAI,OAAe,CAAC;YACpB,IAAI,WAA4B,CAAC;YAEjC,IAAI,MAAM,KAAK,UAAU,EAAE,CAAC;gBAC1B,OAAO,GAAG,MAAM,cAAc,CAAC,OAAO,CAAC,CAAC;gBACxC,WAAW,GAAG,MAAM,CAAC;YACvB,CAAC;iBAAM,CAAC;gBACN,OAAO,GAAG,OAAO,CAAC;gBAClB,WAAW,GAAG,MAAM,CAAC;YACvB,CAAC;YAED,gCAAgC;YAChC,MAAM,eAAe,GAAoE,EAAE,CAAC;YAC5F,IAAI,QAAQ,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACpC,2DAA2D;gBAC3D,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;oBAC/B,IAAI,CAAC;wBACH,oCAAoC;wBACpC,MAAM,YAAY,GAAG,MAAM,MAAM;6BAC9B,GAAG,CAAC,UAAU,OAAO,CAAC,MAAM,EAAE,CAAC;6BAC/B,MAAM,CAAC,aAAa,CAAC;6BACrB,GAAG,EAAE,CAAC;wBACT,eAAe,CAAC,IAAI,CAAC;4BACnB,OAAO,EAAE,OAAO,CAAC,OAAO;4BACxB,MAAM,EAAE,OAAO,CAAC,MAAM;4BACtB,WAAW,EAAE,YAAY,CAAC,WAAW,IAAI,OAAO,CAAC,OAAO;yBACzD,CAAC,CAAC;oBACL,CAAC;oBAAC,OAAO,KAAK,EAAE,CAAC;wBACf,OAAO,CAAC,IAAI,CACV,0BAA0B,OAAO,CAAC,MAAM,sCAAsC,CAC/E,CAAC;wBACF,eAAe,CAAC,IAAI,CAAC;4BACnB,OAAO,EAAE,OAAO,CAAC,OAAO;4BACxB,MAAM,EAAE,OAAO,CAAC,MAAM;4BACtB,WAAW,EAAE,OAAO,CAAC,OAAO;yBAC7B,CAAC,CAAC;oBACL,CAAC;gBACH,CAAC;YACH,CAAC;YAED,mCAAmC;YACnC,IAAI,aAAa,GAIZ,EAAE,CAAC;YACR,IAAI,eAAe,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC/B,MAAM,MAAM,GAAG,qBAAqB,CAAC,OAAO,EAAE,eAAe,CAAC,CAAC;gBAC/D,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC;gBACzB,aAAa,GAAG,MAAM,CAAC,QAAQ,CAAC;gBAEhC,iEAAiE;gBACjE,WAAW,GAAG,MAAM,CAAC;YACvB,CAAC;YAED,wBAAwB;YACxB,MAAM,cAAc,GAAQ;gBAC1B,IAAI,EAAE;oBACJ,OAAO;oBACP,WAAW;iBACZ;gBACD,UAAU;aACX,CAAC;YAEF,IAAI,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC7B,cAAc,CAAC,QAAQ,GAAG,aAAa,CAAC;YAC1C,CAAC;YAED,MAAM,MAAM,GAAG,CAAC,MAAM,MAAM;iBACzB,GAAG,CAAC,aAAa,MAAM,WAAW,CAAC;iBACnC,IAAI,CAAC,cAAc,CAAC,CAAgB,CAAC;YAExC,wBAAwB;YACxB,MAAM,WAAW,GAAG,4CAA4C,MAAM,CAAC,EAAE,GACvE,aAAa,CAAC,MAAM,GAAG,CAAC;gBACtB,CAAC,CAAC,kBAAkB,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;gBACxE,CAAC,CAAC,EACN,EAAE,CAAC;YAEH,OAAO;gBACL,OAAO,EAAE;oBACP;wBACE,IAAI,EAAE,MAAe;wBACrB,IAAI,EAAE,WAAW;qBAClB;iBACF;aACF,CAAC;QACJ,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YACpB,OAAO;gBACL,OAAO,EAAE;oBACP;wBACE,IAAI,EAAE,MAAe;wBACrB,IAAI,EAAE,6BAA6B,KAAK,CAAC,OAAO,EAAE;qBACnD;iBACF;gBACD,OAAO,EAAE,IAAI;aACd,CAAC;QACJ,CAAC;IACH,CAAC,CACF,CAAC;IAEF,iCAAiC;IACjC,MAAM,CAAC,IAAI,CACT,aAAa,EACb;QACE,UAAU,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,CAAC,8CAA8C,CAAC;QACxF,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,8BAA8B,CAAC;KACtE,EACD,KAAK,EAAE,EAAE,UAAU,EAAE,KAAK,EAAE,EAAE,EAAE;QAC9B,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC,SAAS,EAAE,CAAC;YAE9C,sBAAsB;YACtB,MAAM,EAAE,GAAG,CAAC,MAAM,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,CAAS,CAAC;YAEnD,uBAAuB;YACvB,MAAM,OAAO,GAAyB;gBACpC;oBACE,aAAa,EAAE,4CAA4C;oBAC3D,IAAI,EAAE;wBACJ,EAAE,EAAE,EAAE,EAAE,EAAE;qBACX;oBACD,KAAK,EAAE,CAAC,OAAO,CAAC;iBACK;aACxB,CAAC;YAEF,6BAA6B;YAC7B,KAAK,MAAM,KAAK,IAAI,UAAU,EAAE,CAAC;gBAC/B,MAAM,IAAI,GAAG,CAAC,MAAM,MAAM,CAAC,GAAG,CAAC,UAAU,KAAK,EAAE,CAAC,CAAC,GAAG,EAAE,CAAS,CAAC;gBACjE,OAAO,CAAC,IAAI,CAAC;oBACX,aAAa,EAAE,4CAA4C;oBAC3D,IAAI,EAAE;wBACJ,EAAE,EAAE,IAAI,EAAE,EAAE;qBACb;oBACD,KAAK,EAAE,CAAC,QAAQ,CAAC;iBACI,CAAC,CAAC;YAC3B,CAAC;YAED,MAAM,QAAQ,GAAsB;gBAClC,QAAQ,EAAE,UAAU,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,OAAO;gBACxD,OAAO;aACR,CAAC;YAEF,IAAI,KAAK,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACnC,QAAQ,CAAC,KAAK,GAAG,KAAK,CAAC;YACzB,CAAC;YAED,MAAM,OAAO,GAAG,CAAC,MAAM,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAS,CAAC;YAEpE,OAAO;gBACL,OAAO,EAAE;oBACP;wBACE,IAAI,EAAE,MAAM;wBACZ,IAAI,EAAE,yCAAyC,OAAO,EAAE,EAAE,EAAE;qBAC7D;iBACF;aACF,CAAC;QACJ,CAAC;QAAC,OAAO,KAAc,EAAE,CAAC;YACxB,MAAM,YAAY,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,wBAAwB,CAAC;YACvF,OAAO;gBACL,OAAO,EAAE;oBACP;wBACE,IAAI,EAAE,MAAM;wBACZ,IAAI,EAAE,YAAY,YAAY,EAAE;qBACjC;iBACF;aACF,CAAC;QACJ,CAAC;IACH,CAAC,CACF,CAAC;AACJ,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"teams.d.ts","sourceRoot":"","sources":["../../src/tools/teams.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAEzE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"teams.d.ts","sourceRoot":"","sources":["../../src/tools/teams.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAEzE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAqBzD,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,SAAS,EAAE,YAAY,EAAE,YAAY,QAkyB/E"}
|
package/dist/tools/teams.js
CHANGED
|
@@ -1,4 +1,7 @@
|
|
|
1
1
|
import { z } from "zod";
|
|
2
|
+
import { imageUrlToBase64, isValidImageType, uploadImageAsHostedContent, } from "../utils/attachments.js";
|
|
3
|
+
import { markdownToHtml } from "../utils/markdown.js";
|
|
4
|
+
import { processMentionsInHtml, searchUsers } from "../utils/users.js";
|
|
2
5
|
export function registerTeamsTools(server, graphService) {
|
|
3
6
|
// List user's teams
|
|
4
7
|
server.tool("list_teams", {}, async () => {
|
|
@@ -163,37 +166,162 @@ export function registerTeamsTools(server, graphService) {
|
|
|
163
166
|
channelId: z.string().describe("Channel ID"),
|
|
164
167
|
message: z.string().describe("Message content"),
|
|
165
168
|
importance: z.enum(["normal", "high", "urgent"]).optional().describe("Message importance"),
|
|
166
|
-
|
|
169
|
+
format: z.enum(["text", "markdown"]).optional().describe("Message format (text or markdown)"),
|
|
170
|
+
mentions: z
|
|
171
|
+
.array(z.object({
|
|
172
|
+
mention: z
|
|
173
|
+
.string()
|
|
174
|
+
.describe("The @mention text (e.g., 'john.doe' or 'john.doe@company.com')"),
|
|
175
|
+
userId: z.string().describe("Azure AD User ID of the mentioned user"),
|
|
176
|
+
}))
|
|
177
|
+
.optional()
|
|
178
|
+
.describe("Array of @mentions to include in the message"),
|
|
179
|
+
imageUrl: z.string().optional().describe("URL of an image to attach to the message"),
|
|
180
|
+
imageData: z.string().optional().describe("Base64 encoded image data to attach"),
|
|
181
|
+
imageContentType: z
|
|
182
|
+
.string()
|
|
183
|
+
.optional()
|
|
184
|
+
.describe("MIME type of the image (e.g., 'image/jpeg', 'image/png')"),
|
|
185
|
+
imageFileName: z.string().optional().describe("Name for the attached image file"),
|
|
186
|
+
}, async ({ teamId, channelId, message, importance = "normal", format = "text", mentions, imageUrl, imageData, imageContentType, imageFileName, }) => {
|
|
167
187
|
try {
|
|
168
188
|
const client = await graphService.getClient();
|
|
169
|
-
|
|
189
|
+
// Process message content based on format
|
|
190
|
+
let content;
|
|
191
|
+
let contentType;
|
|
192
|
+
if (format === "markdown") {
|
|
193
|
+
content = await markdownToHtml(message);
|
|
194
|
+
contentType = "html";
|
|
195
|
+
}
|
|
196
|
+
else {
|
|
197
|
+
content = message;
|
|
198
|
+
contentType = "text";
|
|
199
|
+
}
|
|
200
|
+
// Process @mentions if provided
|
|
201
|
+
const mentionMappings = [];
|
|
202
|
+
if (mentions && mentions.length > 0) {
|
|
203
|
+
// Convert provided mentions to mappings with display names
|
|
204
|
+
for (const mention of mentions) {
|
|
205
|
+
try {
|
|
206
|
+
// Get user info to get display name
|
|
207
|
+
const userResponse = await client
|
|
208
|
+
.api(`/users/${mention.userId}`)
|
|
209
|
+
.select("displayName")
|
|
210
|
+
.get();
|
|
211
|
+
mentionMappings.push({
|
|
212
|
+
mention: mention.mention,
|
|
213
|
+
userId: mention.userId,
|
|
214
|
+
displayName: userResponse.displayName || mention.mention,
|
|
215
|
+
});
|
|
216
|
+
}
|
|
217
|
+
catch (error) {
|
|
218
|
+
console.warn(`Could not resolve user ${mention.userId}, using mention text as display name`);
|
|
219
|
+
mentionMappings.push({
|
|
220
|
+
mention: mention.mention,
|
|
221
|
+
userId: mention.userId,
|
|
222
|
+
displayName: mention.mention,
|
|
223
|
+
});
|
|
224
|
+
}
|
|
225
|
+
}
|
|
226
|
+
}
|
|
227
|
+
// Process mentions in HTML content
|
|
228
|
+
let finalMentions = [];
|
|
229
|
+
if (mentionMappings.length > 0) {
|
|
230
|
+
const result = processMentionsInHtml(content, mentionMappings);
|
|
231
|
+
content = result.content;
|
|
232
|
+
finalMentions = result.mentions;
|
|
233
|
+
// Ensure we're using HTML content type when mentions are present
|
|
234
|
+
contentType = "html";
|
|
235
|
+
}
|
|
236
|
+
// Handle image attachment
|
|
237
|
+
const attachments = [];
|
|
238
|
+
if (imageUrl || imageData) {
|
|
239
|
+
let imageInfo = null;
|
|
240
|
+
if (imageUrl) {
|
|
241
|
+
imageInfo = await imageUrlToBase64(imageUrl);
|
|
242
|
+
if (!imageInfo) {
|
|
243
|
+
return {
|
|
244
|
+
content: [
|
|
245
|
+
{
|
|
246
|
+
type: "text",
|
|
247
|
+
text: `❌ Failed to download image from URL: ${imageUrl}`,
|
|
248
|
+
},
|
|
249
|
+
],
|
|
250
|
+
isError: true,
|
|
251
|
+
};
|
|
252
|
+
}
|
|
253
|
+
}
|
|
254
|
+
else if (imageData && imageContentType) {
|
|
255
|
+
if (!isValidImageType(imageContentType)) {
|
|
256
|
+
return {
|
|
257
|
+
content: [
|
|
258
|
+
{
|
|
259
|
+
type: "text",
|
|
260
|
+
text: `❌ Unsupported image type: ${imageContentType}`,
|
|
261
|
+
},
|
|
262
|
+
],
|
|
263
|
+
isError: true,
|
|
264
|
+
};
|
|
265
|
+
}
|
|
266
|
+
imageInfo = { data: imageData, contentType: imageContentType };
|
|
267
|
+
}
|
|
268
|
+
if (imageInfo) {
|
|
269
|
+
const uploadResult = await uploadImageAsHostedContent(graphService, teamId, channelId, imageInfo.data, imageInfo.contentType, imageFileName);
|
|
270
|
+
if (uploadResult) {
|
|
271
|
+
attachments.push(uploadResult.attachment);
|
|
272
|
+
}
|
|
273
|
+
else {
|
|
274
|
+
return {
|
|
275
|
+
content: [
|
|
276
|
+
{
|
|
277
|
+
type: "text",
|
|
278
|
+
text: "❌ Failed to upload image attachment",
|
|
279
|
+
},
|
|
280
|
+
],
|
|
281
|
+
isError: true,
|
|
282
|
+
};
|
|
283
|
+
}
|
|
284
|
+
}
|
|
285
|
+
}
|
|
286
|
+
// Build message payload
|
|
287
|
+
const messagePayload = {
|
|
170
288
|
body: {
|
|
171
|
-
content
|
|
172
|
-
contentType
|
|
289
|
+
content,
|
|
290
|
+
contentType,
|
|
173
291
|
},
|
|
174
|
-
importance
|
|
292
|
+
importance,
|
|
175
293
|
};
|
|
294
|
+
if (finalMentions.length > 0) {
|
|
295
|
+
messagePayload.mentions = finalMentions;
|
|
296
|
+
}
|
|
297
|
+
if (attachments.length > 0) {
|
|
298
|
+
messagePayload.attachments = attachments;
|
|
299
|
+
}
|
|
176
300
|
const result = (await client
|
|
177
301
|
.api(`/teams/${teamId}/channels/${channelId}/messages`)
|
|
178
|
-
.post(
|
|
302
|
+
.post(messagePayload));
|
|
303
|
+
// Build success message
|
|
304
|
+
const successText = `✅ Message sent successfully. Message ID: ${result.id}${finalMentions.length > 0
|
|
305
|
+
? `\n📱 Mentions: ${finalMentions.map((m) => m.mentionText).join(", ")}`
|
|
306
|
+
: ""}${attachments.length > 0 ? `\n🖼️ Image attached: ${attachments[0].name}` : ""}`;
|
|
179
307
|
return {
|
|
180
308
|
content: [
|
|
181
309
|
{
|
|
182
310
|
type: "text",
|
|
183
|
-
text:
|
|
311
|
+
text: successText,
|
|
184
312
|
},
|
|
185
313
|
],
|
|
186
314
|
};
|
|
187
315
|
}
|
|
188
316
|
catch (error) {
|
|
189
|
-
const errorMessage = error instanceof Error ? error.message : "Unknown error occurred";
|
|
190
317
|
return {
|
|
191
318
|
content: [
|
|
192
319
|
{
|
|
193
320
|
type: "text",
|
|
194
|
-
text: `❌
|
|
321
|
+
text: `❌ Failed to send message: ${error.message}`,
|
|
195
322
|
},
|
|
196
323
|
],
|
|
324
|
+
isError: true,
|
|
197
325
|
};
|
|
198
326
|
}
|
|
199
327
|
});
|
|
@@ -274,37 +402,162 @@ export function registerTeamsTools(server, graphService) {
|
|
|
274
402
|
messageId: z.string().describe("Message ID to reply to"),
|
|
275
403
|
message: z.string().describe("Reply content"),
|
|
276
404
|
importance: z.enum(["normal", "high", "urgent"]).optional().describe("Message importance"),
|
|
277
|
-
|
|
405
|
+
format: z.enum(["text", "markdown"]).optional().describe("Message format (text or markdown)"),
|
|
406
|
+
mentions: z
|
|
407
|
+
.array(z.object({
|
|
408
|
+
mention: z
|
|
409
|
+
.string()
|
|
410
|
+
.describe("The @mention text (e.g., 'john.doe' or 'john.doe@company.com')"),
|
|
411
|
+
userId: z.string().describe("Azure AD User ID of the mentioned user"),
|
|
412
|
+
}))
|
|
413
|
+
.optional()
|
|
414
|
+
.describe("Array of @mentions to include in the reply"),
|
|
415
|
+
imageUrl: z.string().optional().describe("URL of an image to attach to the reply"),
|
|
416
|
+
imageData: z.string().optional().describe("Base64 encoded image data to attach"),
|
|
417
|
+
imageContentType: z
|
|
418
|
+
.string()
|
|
419
|
+
.optional()
|
|
420
|
+
.describe("MIME type of the image (e.g., 'image/jpeg', 'image/png')"),
|
|
421
|
+
imageFileName: z.string().optional().describe("Name for the attached image file"),
|
|
422
|
+
}, async ({ teamId, channelId, messageId, message, importance = "normal", format = "text", mentions, imageUrl, imageData, imageContentType, imageFileName, }) => {
|
|
278
423
|
try {
|
|
279
424
|
const client = await graphService.getClient();
|
|
280
|
-
|
|
425
|
+
// Process message content based on format
|
|
426
|
+
let content;
|
|
427
|
+
let contentType;
|
|
428
|
+
if (format === "markdown") {
|
|
429
|
+
content = await markdownToHtml(message);
|
|
430
|
+
contentType = "html";
|
|
431
|
+
}
|
|
432
|
+
else {
|
|
433
|
+
content = message;
|
|
434
|
+
contentType = "text";
|
|
435
|
+
}
|
|
436
|
+
// Process @mentions if provided
|
|
437
|
+
const mentionMappings = [];
|
|
438
|
+
if (mentions && mentions.length > 0) {
|
|
439
|
+
// Convert provided mentions to mappings with display names
|
|
440
|
+
for (const mention of mentions) {
|
|
441
|
+
try {
|
|
442
|
+
// Get user info to get display name
|
|
443
|
+
const userResponse = await client
|
|
444
|
+
.api(`/users/${mention.userId}`)
|
|
445
|
+
.select("displayName")
|
|
446
|
+
.get();
|
|
447
|
+
mentionMappings.push({
|
|
448
|
+
mention: mention.mention,
|
|
449
|
+
userId: mention.userId,
|
|
450
|
+
displayName: userResponse.displayName || mention.mention,
|
|
451
|
+
});
|
|
452
|
+
}
|
|
453
|
+
catch (error) {
|
|
454
|
+
console.warn(`Could not resolve user ${mention.userId}, using mention text as display name`);
|
|
455
|
+
mentionMappings.push({
|
|
456
|
+
mention: mention.mention,
|
|
457
|
+
userId: mention.userId,
|
|
458
|
+
displayName: mention.mention,
|
|
459
|
+
});
|
|
460
|
+
}
|
|
461
|
+
}
|
|
462
|
+
}
|
|
463
|
+
// Process mentions in HTML content
|
|
464
|
+
let finalMentions = [];
|
|
465
|
+
if (mentionMappings.length > 0) {
|
|
466
|
+
const result = processMentionsInHtml(content, mentionMappings);
|
|
467
|
+
content = result.content;
|
|
468
|
+
finalMentions = result.mentions;
|
|
469
|
+
// Ensure we're using HTML content type when mentions are present
|
|
470
|
+
contentType = "html";
|
|
471
|
+
}
|
|
472
|
+
// Handle image attachment
|
|
473
|
+
const attachments = [];
|
|
474
|
+
if (imageUrl || imageData) {
|
|
475
|
+
let imageInfo = null;
|
|
476
|
+
if (imageUrl) {
|
|
477
|
+
imageInfo = await imageUrlToBase64(imageUrl);
|
|
478
|
+
if (!imageInfo) {
|
|
479
|
+
return {
|
|
480
|
+
content: [
|
|
481
|
+
{
|
|
482
|
+
type: "text",
|
|
483
|
+
text: `❌ Failed to download image from URL: ${imageUrl}`,
|
|
484
|
+
},
|
|
485
|
+
],
|
|
486
|
+
isError: true,
|
|
487
|
+
};
|
|
488
|
+
}
|
|
489
|
+
}
|
|
490
|
+
else if (imageData && imageContentType) {
|
|
491
|
+
if (!isValidImageType(imageContentType)) {
|
|
492
|
+
return {
|
|
493
|
+
content: [
|
|
494
|
+
{
|
|
495
|
+
type: "text",
|
|
496
|
+
text: `❌ Unsupported image type: ${imageContentType}`,
|
|
497
|
+
},
|
|
498
|
+
],
|
|
499
|
+
isError: true,
|
|
500
|
+
};
|
|
501
|
+
}
|
|
502
|
+
imageInfo = { data: imageData, contentType: imageContentType };
|
|
503
|
+
}
|
|
504
|
+
if (imageInfo) {
|
|
505
|
+
const uploadResult = await uploadImageAsHostedContent(graphService, teamId, channelId, imageInfo.data, imageInfo.contentType, imageFileName);
|
|
506
|
+
if (uploadResult) {
|
|
507
|
+
attachments.push(uploadResult.attachment);
|
|
508
|
+
}
|
|
509
|
+
else {
|
|
510
|
+
return {
|
|
511
|
+
content: [
|
|
512
|
+
{
|
|
513
|
+
type: "text",
|
|
514
|
+
text: "❌ Failed to upload image attachment",
|
|
515
|
+
},
|
|
516
|
+
],
|
|
517
|
+
isError: true,
|
|
518
|
+
};
|
|
519
|
+
}
|
|
520
|
+
}
|
|
521
|
+
}
|
|
522
|
+
// Build message payload
|
|
523
|
+
const messagePayload = {
|
|
281
524
|
body: {
|
|
282
|
-
content
|
|
283
|
-
contentType
|
|
525
|
+
content,
|
|
526
|
+
contentType,
|
|
284
527
|
},
|
|
285
|
-
importance
|
|
528
|
+
importance,
|
|
286
529
|
};
|
|
530
|
+
if (finalMentions.length > 0) {
|
|
531
|
+
messagePayload.mentions = finalMentions;
|
|
532
|
+
}
|
|
533
|
+
if (attachments.length > 0) {
|
|
534
|
+
messagePayload.attachments = attachments;
|
|
535
|
+
}
|
|
287
536
|
const result = (await client
|
|
288
537
|
.api(`/teams/${teamId}/channels/${channelId}/messages/${messageId}/replies`)
|
|
289
|
-
.post(
|
|
538
|
+
.post(messagePayload));
|
|
539
|
+
// Build success message
|
|
540
|
+
const successText = `✅ Reply sent successfully. Reply ID: ${result.id}${finalMentions.length > 0
|
|
541
|
+
? `\n📱 Mentions: ${finalMentions.map((m) => m.mentionText).join(", ")}`
|
|
542
|
+
: ""}${attachments.length > 0 ? `\n🖼️ Image attached: ${attachments[0].name}` : ""}`;
|
|
290
543
|
return {
|
|
291
544
|
content: [
|
|
292
545
|
{
|
|
293
546
|
type: "text",
|
|
294
|
-
text:
|
|
547
|
+
text: successText,
|
|
295
548
|
},
|
|
296
549
|
],
|
|
297
550
|
};
|
|
298
551
|
}
|
|
299
552
|
catch (error) {
|
|
300
|
-
const errorMessage = error instanceof Error ? error.message : "Unknown error occurred";
|
|
301
553
|
return {
|
|
302
554
|
content: [
|
|
303
555
|
{
|
|
304
556
|
type: "text",
|
|
305
|
-
text: `❌
|
|
557
|
+
text: `❌ Failed to send reply: ${error.message}`,
|
|
306
558
|
},
|
|
307
559
|
],
|
|
560
|
+
isError: true,
|
|
308
561
|
};
|
|
309
562
|
}
|
|
310
563
|
});
|
|
@@ -353,5 +606,59 @@ export function registerTeamsTools(server, graphService) {
|
|
|
353
606
|
};
|
|
354
607
|
}
|
|
355
608
|
});
|
|
609
|
+
// Search users for @mentions
|
|
610
|
+
server.tool("search_users_for_mentions", {
|
|
611
|
+
query: z.string().describe("Search query (name or email)"),
|
|
612
|
+
limit: z
|
|
613
|
+
.number()
|
|
614
|
+
.min(1)
|
|
615
|
+
.max(50)
|
|
616
|
+
.optional()
|
|
617
|
+
.default(10)
|
|
618
|
+
.describe("Maximum number of results to return"),
|
|
619
|
+
}, async ({ query, limit }) => {
|
|
620
|
+
try {
|
|
621
|
+
const users = await searchUsers(graphService, query, limit);
|
|
622
|
+
if (users.length === 0) {
|
|
623
|
+
return {
|
|
624
|
+
content: [
|
|
625
|
+
{
|
|
626
|
+
type: "text",
|
|
627
|
+
text: `No users found matching "${query}".`,
|
|
628
|
+
},
|
|
629
|
+
],
|
|
630
|
+
};
|
|
631
|
+
}
|
|
632
|
+
return {
|
|
633
|
+
content: [
|
|
634
|
+
{
|
|
635
|
+
type: "text",
|
|
636
|
+
text: JSON.stringify({
|
|
637
|
+
query,
|
|
638
|
+
totalResults: users.length,
|
|
639
|
+
users: users.map((user) => ({
|
|
640
|
+
id: user.id,
|
|
641
|
+
displayName: user.displayName,
|
|
642
|
+
userPrincipalName: user.userPrincipalName,
|
|
643
|
+
mentionText: user.userPrincipalName?.split("@")[0] ||
|
|
644
|
+
user.displayName.toLowerCase().replace(/\s+/g, ""),
|
|
645
|
+
})),
|
|
646
|
+
}, null, 2),
|
|
647
|
+
},
|
|
648
|
+
],
|
|
649
|
+
};
|
|
650
|
+
}
|
|
651
|
+
catch (error) {
|
|
652
|
+
const errorMessage = error instanceof Error ? error.message : "Unknown error occurred";
|
|
653
|
+
return {
|
|
654
|
+
content: [
|
|
655
|
+
{
|
|
656
|
+
type: "text",
|
|
657
|
+
text: `❌ Error: ${errorMessage}`,
|
|
658
|
+
},
|
|
659
|
+
],
|
|
660
|
+
};
|
|
661
|
+
}
|
|
662
|
+
});
|
|
356
663
|
}
|
|
357
664
|
//# sourceMappingURL=teams.js.map
|
package/dist/tools/teams.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"teams.js","sourceRoot":"","sources":["../../src/tools/teams.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"teams.js","sourceRoot":"","sources":["../../src/tools/teams.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import type { GraphService } from "../services/graph.js";
|
|
2
|
+
export interface ImageAttachment {
|
|
3
|
+
id: string;
|
|
4
|
+
contentType: string;
|
|
5
|
+
contentUrl?: string;
|
|
6
|
+
name?: string;
|
|
7
|
+
thumbnailUrl?: string;
|
|
8
|
+
}
|
|
9
|
+
export interface HostedContent {
|
|
10
|
+
"@microsoft.graph.temporaryId": string;
|
|
11
|
+
contentBytes: string;
|
|
12
|
+
contentType: string;
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Upload image as hosted content for Teams messages
|
|
16
|
+
* This creates a temporary hosted content that can be referenced in message attachments
|
|
17
|
+
*/
|
|
18
|
+
export declare function uploadImageAsHostedContent(graphService: GraphService, teamId: string, channelId: string, imageData: Buffer | string, contentType: string, fileName?: string): Promise<{
|
|
19
|
+
hostedContentId: string;
|
|
20
|
+
attachment: ImageAttachment;
|
|
21
|
+
} | null>;
|
|
22
|
+
/**
|
|
23
|
+
* Validate image content type
|
|
24
|
+
*/
|
|
25
|
+
export declare function isValidImageType(contentType: string): boolean;
|
|
26
|
+
/**
|
|
27
|
+
* Get file extension from MIME type
|
|
28
|
+
*/
|
|
29
|
+
export declare function getFileExtensionFromMimeType(mimeType: string): string;
|
|
30
|
+
/**
|
|
31
|
+
* Convert image URL to base64 for upload
|
|
32
|
+
*/
|
|
33
|
+
export declare function imageUrlToBase64(imageUrl: string): Promise<{
|
|
34
|
+
data: string;
|
|
35
|
+
contentType: string;
|
|
36
|
+
} | null>;
|
|
37
|
+
//# sourceMappingURL=attachments.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"attachments.d.ts","sourceRoot":"","sources":["../../src/utils/attachments.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAEzD,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,aAAa;IAC5B,8BAA8B,EAAE,MAAM,CAAC;IACvC,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED;;;GAGG;AACH,wBAAsB,0BAA0B,CAC9C,YAAY,EAAE,YAAY,EAC1B,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,GAAG,MAAM,EAC1B,WAAW,EAAE,MAAM,EACnB,QAAQ,CAAC,EAAE,MAAM,GAChB,OAAO,CAAC;IAAE,eAAe,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,eAAe,CAAA;CAAE,GAAG,IAAI,CAAC,CAkC1E;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAY7D;AAED;;GAEG;AACH,wBAAgB,4BAA4B,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAYrE;AAED;;GAEG;AACH,wBAAsB,gBAAgB,CACpC,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAAC,CA0BvD"}
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Upload image as hosted content for Teams messages
|
|
3
|
+
* This creates a temporary hosted content that can be referenced in message attachments
|
|
4
|
+
*/
|
|
5
|
+
export async function uploadImageAsHostedContent(graphService, teamId, channelId, imageData, contentType, fileName) {
|
|
6
|
+
try {
|
|
7
|
+
const client = await graphService.getClient();
|
|
8
|
+
// Convert Buffer to base64 if needed
|
|
9
|
+
const contentBytes = typeof imageData === "string" ? imageData : imageData.toString("base64");
|
|
10
|
+
// Create hosted content
|
|
11
|
+
const hostedContent = {
|
|
12
|
+
"@microsoft.graph.temporaryId": `temp_${Date.now()}_${Math.random().toString(36).substring(7)}`,
|
|
13
|
+
contentBytes,
|
|
14
|
+
contentType,
|
|
15
|
+
};
|
|
16
|
+
// Upload hosted content
|
|
17
|
+
const response = await client
|
|
18
|
+
.api(`/teams/${teamId}/channels/${channelId}/messages/hostedContents`)
|
|
19
|
+
.post(hostedContent);
|
|
20
|
+
const hostedContentId = response.id;
|
|
21
|
+
// Create attachment reference
|
|
22
|
+
const attachment = {
|
|
23
|
+
id: hostedContentId,
|
|
24
|
+
contentType,
|
|
25
|
+
contentUrl: `https://graph.microsoft.com/v1.0/teams/${teamId}/channels/${channelId}/messages/hostedContents/${hostedContentId}/$value`,
|
|
26
|
+
name: fileName || `image.${getFileExtensionFromMimeType(contentType)}`,
|
|
27
|
+
};
|
|
28
|
+
return { hostedContentId, attachment };
|
|
29
|
+
}
|
|
30
|
+
catch (error) {
|
|
31
|
+
console.error("Error uploading image as hosted content:", error);
|
|
32
|
+
return null;
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Validate image content type
|
|
37
|
+
*/
|
|
38
|
+
export function isValidImageType(contentType) {
|
|
39
|
+
const validTypes = [
|
|
40
|
+
"image/jpeg",
|
|
41
|
+
"image/jpg",
|
|
42
|
+
"image/png",
|
|
43
|
+
"image/gif",
|
|
44
|
+
"image/webp",
|
|
45
|
+
"image/bmp",
|
|
46
|
+
"image/svg+xml",
|
|
47
|
+
];
|
|
48
|
+
return validTypes.includes(contentType.toLowerCase());
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Get file extension from MIME type
|
|
52
|
+
*/
|
|
53
|
+
export function getFileExtensionFromMimeType(mimeType) {
|
|
54
|
+
const extensions = {
|
|
55
|
+
"image/jpeg": "jpg",
|
|
56
|
+
"image/jpg": "jpg",
|
|
57
|
+
"image/png": "png",
|
|
58
|
+
"image/gif": "gif",
|
|
59
|
+
"image/webp": "webp",
|
|
60
|
+
"image/bmp": "bmp",
|
|
61
|
+
"image/svg+xml": "svg",
|
|
62
|
+
};
|
|
63
|
+
return extensions[mimeType.toLowerCase()] || "img";
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Convert image URL to base64 for upload
|
|
67
|
+
*/
|
|
68
|
+
export async function imageUrlToBase64(imageUrl) {
|
|
69
|
+
try {
|
|
70
|
+
const response = await fetch(imageUrl);
|
|
71
|
+
if (!response.ok) {
|
|
72
|
+
throw new Error(`Failed to fetch image: ${response.statusText}`);
|
|
73
|
+
}
|
|
74
|
+
const contentType = response.headers.get("content-type") || "image/jpeg";
|
|
75
|
+
if (!isValidImageType(contentType)) {
|
|
76
|
+
throw new Error(`Unsupported image type: ${contentType}`);
|
|
77
|
+
}
|
|
78
|
+
const arrayBuffer = await response.arrayBuffer();
|
|
79
|
+
const buffer = Buffer.from(arrayBuffer);
|
|
80
|
+
const base64Data = buffer.toString("base64");
|
|
81
|
+
return {
|
|
82
|
+
data: base64Data,
|
|
83
|
+
contentType,
|
|
84
|
+
};
|
|
85
|
+
}
|
|
86
|
+
catch (error) {
|
|
87
|
+
console.error("Error converting image URL to base64:", error);
|
|
88
|
+
return null;
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
//# sourceMappingURL=attachments.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"attachments.js","sourceRoot":"","sources":["../../src/utils/attachments.ts"],"names":[],"mappings":"AAgBA;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,0BAA0B,CAC9C,YAA0B,EAC1B,MAAc,EACd,SAAiB,EACjB,SAA0B,EAC1B,WAAmB,EACnB,QAAiB;IAEjB,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC,SAAS,EAAE,CAAC;QAE9C,qCAAqC;QACrC,MAAM,YAAY,GAAG,OAAO,SAAS,KAAK,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;QAE9F,wBAAwB;QACxB,MAAM,aAAa,GAAkB;YACnC,8BAA8B,EAAE,QAAQ,IAAI,CAAC,GAAG,EAAE,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE;YAC/F,YAAY;YACZ,WAAW;SACZ,CAAC;QAEF,wBAAwB;QACxB,MAAM,QAAQ,GAAG,MAAM,MAAM;aAC1B,GAAG,CAAC,UAAU,MAAM,aAAa,SAAS,0BAA0B,CAAC;aACrE,IAAI,CAAC,aAAa,CAAC,CAAC;QAEvB,MAAM,eAAe,GAAG,QAAQ,CAAC,EAAE,CAAC;QAEpC,8BAA8B;QAC9B,MAAM,UAAU,GAAoB;YAClC,EAAE,EAAE,eAAe;YACnB,WAAW;YACX,UAAU,EAAE,0CAA0C,MAAM,aAAa,SAAS,4BAA4B,eAAe,SAAS;YACtI,IAAI,EAAE,QAAQ,IAAI,SAAS,4BAA4B,CAAC,WAAW,CAAC,EAAE;SACvE,CAAC;QAEF,OAAO,EAAE,eAAe,EAAE,UAAU,EAAE,CAAC;IACzC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,0CAA0C,EAAE,KAAK,CAAC,CAAC;QACjE,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,gBAAgB,CAAC,WAAmB;IAClD,MAAM,UAAU,GAAG;QACjB,YAAY;QACZ,WAAW;QACX,WAAW;QACX,WAAW;QACX,YAAY;QACZ,WAAW;QACX,eAAe;KAChB,CAAC;IAEF,OAAO,UAAU,CAAC,QAAQ,CAAC,WAAW,CAAC,WAAW,EAAE,CAAC,CAAC;AACxD,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,4BAA4B,CAAC,QAAgB;IAC3D,MAAM,UAAU,GAA2B;QACzC,YAAY,EAAE,KAAK;QACnB,WAAW,EAAE,KAAK;QAClB,WAAW,EAAE,KAAK;QAClB,WAAW,EAAE,KAAK;QAClB,YAAY,EAAE,MAAM;QACpB,WAAW,EAAE,KAAK;QAClB,eAAe,EAAE,KAAK;KACvB,CAAC;IAEF,OAAO,UAAU,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC,IAAI,KAAK,CAAC;AACrD,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,QAAgB;IAEhB,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,QAAQ,CAAC,CAAC;QAEvC,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YACjB,MAAM,IAAI,KAAK,CAAC,0BAA0B,QAAQ,CAAC,UAAU,EAAE,CAAC,CAAC;QACnE,CAAC;QAED,MAAM,WAAW,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,IAAI,YAAY,CAAC;QAEzE,IAAI,CAAC,gBAAgB,CAAC,WAAW,CAAC,EAAE,CAAC;YACnC,MAAM,IAAI,KAAK,CAAC,2BAA2B,WAAW,EAAE,CAAC,CAAC;QAC5D,CAAC;QAED,MAAM,WAAW,GAAG,MAAM,QAAQ,CAAC,WAAW,EAAE,CAAC;QACjD,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QACxC,MAAM,UAAU,GAAG,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;QAE7C,OAAO;YACL,IAAI,EAAE,UAAU;YAChB,WAAW;SACZ,CAAC;IACJ,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,uCAAuC,EAAE,KAAK,CAAC,CAAC;QAC9D,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Converts Markdown text to sanitized HTML
|
|
3
|
+
* @param markdown The markdown text to convert
|
|
4
|
+
* @returns Sanitized HTML string
|
|
5
|
+
*/
|
|
6
|
+
export declare function markdownToHtml(markdown: string): Promise<string>;
|
|
7
|
+
/**
|
|
8
|
+
* Basic HTML sanitization for user-provided HTML content
|
|
9
|
+
* @param html The HTML content to sanitize
|
|
10
|
+
* @returns Sanitized HTML string
|
|
11
|
+
*/
|
|
12
|
+
export declare function sanitizeHtml(html: string): string;
|
|
13
|
+
//# sourceMappingURL=markdown.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"markdown.d.ts","sourceRoot":"","sources":["../../src/utils/markdown.ts"],"names":[],"mappings":"AAcA;;;;GAIG;AACH,wBAAsB,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CA0CtE;AAED;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAoCjD"}
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
import DOMPurify from "dompurify";
|
|
2
|
+
import { JSDOM } from "jsdom";
|
|
3
|
+
import { marked } from "marked";
|
|
4
|
+
// Create a JSDOM window for DOMPurify in Node.js environment
|
|
5
|
+
const window = new JSDOM("").window;
|
|
6
|
+
const createDOMPurify = DOMPurify(window);
|
|
7
|
+
// Configure marked for Teams compatibility
|
|
8
|
+
marked.setOptions({
|
|
9
|
+
gfm: true, // GitHub Flavored Markdown
|
|
10
|
+
breaks: true, // Convert \n to <br>
|
|
11
|
+
});
|
|
12
|
+
/**
|
|
13
|
+
* Converts Markdown text to sanitized HTML
|
|
14
|
+
* @param markdown The markdown text to convert
|
|
15
|
+
* @returns Sanitized HTML string
|
|
16
|
+
*/
|
|
17
|
+
export async function markdownToHtml(markdown) {
|
|
18
|
+
// Convert Markdown to HTML
|
|
19
|
+
const rawHtml = await marked(markdown);
|
|
20
|
+
// Sanitize HTML for security - allow common formatting tags safe for Teams
|
|
21
|
+
const cleanHtml = createDOMPurify.sanitize(rawHtml, {
|
|
22
|
+
ALLOWED_TAGS: [
|
|
23
|
+
"p",
|
|
24
|
+
"br",
|
|
25
|
+
"strong",
|
|
26
|
+
"em",
|
|
27
|
+
"b",
|
|
28
|
+
"i",
|
|
29
|
+
"u",
|
|
30
|
+
"s",
|
|
31
|
+
"del",
|
|
32
|
+
"a",
|
|
33
|
+
"ul",
|
|
34
|
+
"ol",
|
|
35
|
+
"li",
|
|
36
|
+
"h1",
|
|
37
|
+
"h2",
|
|
38
|
+
"h3",
|
|
39
|
+
"h4",
|
|
40
|
+
"h5",
|
|
41
|
+
"h6",
|
|
42
|
+
"blockquote",
|
|
43
|
+
"code",
|
|
44
|
+
"pre",
|
|
45
|
+
"hr",
|
|
46
|
+
"table",
|
|
47
|
+
"thead",
|
|
48
|
+
"tbody",
|
|
49
|
+
"tr",
|
|
50
|
+
"th",
|
|
51
|
+
"td",
|
|
52
|
+
"img",
|
|
53
|
+
],
|
|
54
|
+
ALLOWED_ATTR: ["href", "target", "src", "alt", "title", "width", "height"],
|
|
55
|
+
});
|
|
56
|
+
return cleanHtml;
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Basic HTML sanitization for user-provided HTML content
|
|
60
|
+
* @param html The HTML content to sanitize
|
|
61
|
+
* @returns Sanitized HTML string
|
|
62
|
+
*/
|
|
63
|
+
export function sanitizeHtml(html) {
|
|
64
|
+
return createDOMPurify.sanitize(html, {
|
|
65
|
+
ALLOWED_TAGS: [
|
|
66
|
+
"p",
|
|
67
|
+
"br",
|
|
68
|
+
"strong",
|
|
69
|
+
"em",
|
|
70
|
+
"b",
|
|
71
|
+
"i",
|
|
72
|
+
"u",
|
|
73
|
+
"s",
|
|
74
|
+
"del",
|
|
75
|
+
"a",
|
|
76
|
+
"ul",
|
|
77
|
+
"ol",
|
|
78
|
+
"li",
|
|
79
|
+
"h1",
|
|
80
|
+
"h2",
|
|
81
|
+
"h3",
|
|
82
|
+
"h4",
|
|
83
|
+
"h5",
|
|
84
|
+
"h6",
|
|
85
|
+
"blockquote",
|
|
86
|
+
"code",
|
|
87
|
+
"pre",
|
|
88
|
+
"hr",
|
|
89
|
+
"table",
|
|
90
|
+
"thead",
|
|
91
|
+
"tbody",
|
|
92
|
+
"tr",
|
|
93
|
+
"th",
|
|
94
|
+
"td",
|
|
95
|
+
"img",
|
|
96
|
+
],
|
|
97
|
+
ALLOWED_ATTR: ["href", "target", "src", "alt", "title", "width", "height"],
|
|
98
|
+
});
|
|
99
|
+
}
|
|
100
|
+
//# sourceMappingURL=markdown.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"markdown.js","sourceRoot":"","sources":["../../src/utils/markdown.ts"],"names":[],"mappings":"AAAA,OAAO,SAAS,MAAM,WAAW,CAAC;AAClC,OAAO,EAAE,KAAK,EAAE,MAAM,OAAO,CAAC;AAC9B,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAEhC,6DAA6D;AAC7D,MAAM,MAAM,GAAG,IAAI,KAAK,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC;AACpC,MAAM,eAAe,GAAG,SAAS,CAAC,MAAa,CAAC,CAAC;AAEjD,2CAA2C;AAC3C,MAAM,CAAC,UAAU,CAAC;IAChB,GAAG,EAAE,IAAI,EAAE,2BAA2B;IACtC,MAAM,EAAE,IAAI,EAAE,qBAAqB;CACpC,CAAC,CAAC;AAEH;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,QAAgB;IACnD,2BAA2B;IAC3B,MAAM,OAAO,GAAG,MAAM,MAAM,CAAC,QAAQ,CAAC,CAAC;IAEvC,2EAA2E;IAC3E,MAAM,SAAS,GAAG,eAAe,CAAC,QAAQ,CAAC,OAAO,EAAE;QAClD,YAAY,EAAE;YACZ,GAAG;YACH,IAAI;YACJ,QAAQ;YACR,IAAI;YACJ,GAAG;YACH,GAAG;YACH,GAAG;YACH,GAAG;YACH,KAAK;YACL,GAAG;YACH,IAAI;YACJ,IAAI;YACJ,IAAI;YACJ,IAAI;YACJ,IAAI;YACJ,IAAI;YACJ,IAAI;YACJ,IAAI;YACJ,IAAI;YACJ,YAAY;YACZ,MAAM;YACN,KAAK;YACL,IAAI;YACJ,OAAO;YACP,OAAO;YACP,OAAO;YACP,IAAI;YACJ,IAAI;YACJ,IAAI;YACJ,KAAK;SACN;QACD,YAAY,EAAE,CAAC,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,CAAC;KAC3E,CAAC,CAAC;IAEH,OAAO,SAAS,CAAC;AACnB,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,YAAY,CAAC,IAAY;IACvC,OAAO,eAAe,CAAC,QAAQ,CAAC,IAAI,EAAE;QACpC,YAAY,EAAE;YACZ,GAAG;YACH,IAAI;YACJ,QAAQ;YACR,IAAI;YACJ,GAAG;YACH,GAAG;YACH,GAAG;YACH,GAAG;YACH,KAAK;YACL,GAAG;YACH,IAAI;YACJ,IAAI;YACJ,IAAI;YACJ,IAAI;YACJ,IAAI;YACJ,IAAI;YACJ,IAAI;YACJ,IAAI;YACJ,IAAI;YACJ,YAAY;YACZ,MAAM;YACN,KAAK;YACL,IAAI;YACJ,OAAO;YACP,OAAO;YACP,OAAO;YACP,IAAI;YACJ,IAAI;YACJ,IAAI;YACJ,KAAK;SACN;QACD,YAAY,EAAE,CAAC,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,CAAC;KAC3E,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import type { GraphService } from "../services/graph.js";
|
|
2
|
+
export interface UserInfo {
|
|
3
|
+
id: string;
|
|
4
|
+
displayName: string;
|
|
5
|
+
userPrincipalName?: string;
|
|
6
|
+
}
|
|
7
|
+
/**
|
|
8
|
+
* Search for users by display name or email
|
|
9
|
+
*/
|
|
10
|
+
export declare function searchUsers(graphService: GraphService, query: string, limit?: number): Promise<UserInfo[]>;
|
|
11
|
+
/**
|
|
12
|
+
* Get user by exact email or UPN
|
|
13
|
+
*/
|
|
14
|
+
export declare function getUserByEmail(graphService: GraphService, email: string): Promise<UserInfo | null>;
|
|
15
|
+
/**
|
|
16
|
+
* Get user by ID
|
|
17
|
+
*/
|
|
18
|
+
export declare function getUserById(graphService: GraphService, userId: string): Promise<UserInfo | null>;
|
|
19
|
+
/**
|
|
20
|
+
* Parse @mentions from text and return user lookup suggestions
|
|
21
|
+
* @param text - Message text containing @mentions
|
|
22
|
+
* @param graphService - Graph service instance
|
|
23
|
+
* @returns Array of mention patterns found and suggested users
|
|
24
|
+
*/
|
|
25
|
+
export declare function parseMentions(text: string, graphService: GraphService): Promise<Array<{
|
|
26
|
+
mention: string;
|
|
27
|
+
users: UserInfo[];
|
|
28
|
+
}>>;
|
|
29
|
+
/**
|
|
30
|
+
* Generate HTML content with @mentions converted to proper format
|
|
31
|
+
*/
|
|
32
|
+
export declare function processMentionsInHtml(html: string, mentionMappings: Array<{
|
|
33
|
+
mention: string;
|
|
34
|
+
userId: string;
|
|
35
|
+
displayName: string;
|
|
36
|
+
}>): {
|
|
37
|
+
content: string;
|
|
38
|
+
mentions: Array<{
|
|
39
|
+
id: number;
|
|
40
|
+
mentionText: string;
|
|
41
|
+
mentioned: {
|
|
42
|
+
user: {
|
|
43
|
+
id: string;
|
|
44
|
+
};
|
|
45
|
+
};
|
|
46
|
+
}>;
|
|
47
|
+
};
|
|
48
|
+
//# sourceMappingURL=users.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"users.d.ts","sourceRoot":"","sources":["../../src/utils/users.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAGzD,MAAM,WAAW,QAAQ;IACvB,EAAE,EAAE,MAAM,CAAC;IACX,WAAW,EAAE,MAAM,CAAC;IACpB,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B;AAED;;GAEG;AACH,wBAAsB,WAAW,CAC/B,YAAY,EAAE,YAAY,EAC1B,KAAK,EAAE,MAAM,EACb,KAAK,SAAK,GACT,OAAO,CAAC,QAAQ,EAAE,CAAC,CAsBrB;AAED;;GAEG;AACH,wBAAsB,cAAc,CAClC,YAAY,EAAE,YAAY,EAC1B,KAAK,EAAE,MAAM,GACZ,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC,CAe1B;AAED;;GAEG;AACH,wBAAsB,WAAW,CAC/B,YAAY,EAAE,YAAY,EAC1B,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC,CAkB1B;AAED;;;;;GAKG;AACH,wBAAsB,aAAa,CACjC,IAAI,EAAE,MAAM,EACZ,YAAY,EAAE,YAAY,GACzB,OAAO,CAAC,KAAK,CAAC;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,QAAQ,EAAE,CAAA;CAAE,CAAC,CAAC,CAiCxD;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CACnC,IAAI,EAAE,MAAM,EACZ,eAAe,EAAE,KAAK,CAAC;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAA;CAAE,CAAC,GAC/E;IACD,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,KAAK,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE;YAAE,IAAI,EAAE;gBAAE,EAAE,EAAE,MAAM,CAAA;aAAE,CAAA;SAAE,CAAA;KAAE,CAAC,CAAC;CAC3F,CA8BA"}
|
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Search for users by display name or email
|
|
3
|
+
*/
|
|
4
|
+
export async function searchUsers(graphService, query, limit = 10) {
|
|
5
|
+
try {
|
|
6
|
+
const client = await graphService.getClient();
|
|
7
|
+
// Use filter query to search users by displayName or userPrincipalName
|
|
8
|
+
const searchQuery = `$filter=startswith(displayName,'${query}') or startswith(userPrincipalName,'${query}')&$top=${limit}&$select=id,displayName,userPrincipalName`;
|
|
9
|
+
const response = await client.api(`/users?${searchQuery}`).get();
|
|
10
|
+
if (!response?.value?.length) {
|
|
11
|
+
return [];
|
|
12
|
+
}
|
|
13
|
+
return response.value.map((user) => ({
|
|
14
|
+
id: user.id || "",
|
|
15
|
+
displayName: user.displayName || "Unknown User",
|
|
16
|
+
userPrincipalName: user.userPrincipalName || undefined,
|
|
17
|
+
}));
|
|
18
|
+
}
|
|
19
|
+
catch (error) {
|
|
20
|
+
console.error("Error searching users:", error);
|
|
21
|
+
return [];
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Get user by exact email or UPN
|
|
26
|
+
*/
|
|
27
|
+
export async function getUserByEmail(graphService, email) {
|
|
28
|
+
try {
|
|
29
|
+
const client = await graphService.getClient();
|
|
30
|
+
const response = await client.api(`/users/${email}`).get();
|
|
31
|
+
return {
|
|
32
|
+
id: response.id,
|
|
33
|
+
displayName: response.displayName || "Unknown User",
|
|
34
|
+
userPrincipalName: response.userPrincipalName,
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
catch (error) {
|
|
38
|
+
// User not found or access denied
|
|
39
|
+
return null;
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Get user by ID
|
|
44
|
+
*/
|
|
45
|
+
export async function getUserById(graphService, userId) {
|
|
46
|
+
try {
|
|
47
|
+
const client = await graphService.getClient();
|
|
48
|
+
const response = await client
|
|
49
|
+
.api(`/users/${userId}`)
|
|
50
|
+
.select("id,displayName,userPrincipalName")
|
|
51
|
+
.get();
|
|
52
|
+
return {
|
|
53
|
+
id: response.id,
|
|
54
|
+
displayName: response.displayName || "Unknown User",
|
|
55
|
+
userPrincipalName: response.userPrincipalName,
|
|
56
|
+
};
|
|
57
|
+
}
|
|
58
|
+
catch (error) {
|
|
59
|
+
// User not found or access denied
|
|
60
|
+
return null;
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Parse @mentions from text and return user lookup suggestions
|
|
65
|
+
* @param text - Message text containing @mentions
|
|
66
|
+
* @param graphService - Graph service instance
|
|
67
|
+
* @returns Array of mention patterns found and suggested users
|
|
68
|
+
*/
|
|
69
|
+
export async function parseMentions(text, graphService) {
|
|
70
|
+
// Match @mentions in the format @username, @email@domain.com, or @"User Name"
|
|
71
|
+
const mentionRegex = /@(?:"([^"]+)"|([^\s@]+(?:@[^\s@]+\.[^\s@]+)?|[^\s@]+))/g;
|
|
72
|
+
const mentions = [];
|
|
73
|
+
let match = mentionRegex.exec(text);
|
|
74
|
+
while (match !== null) {
|
|
75
|
+
const mentionText = match[1] || match[2]; // Quoted name or unquoted
|
|
76
|
+
let users = [];
|
|
77
|
+
// If it looks like an email, try exact lookup first
|
|
78
|
+
if (mentionText.includes("@") && mentionText.includes(".")) {
|
|
79
|
+
const user = await getUserByEmail(graphService, mentionText);
|
|
80
|
+
if (user) {
|
|
81
|
+
users = [user];
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
// If no exact match found, search by name
|
|
85
|
+
if (users.length === 0) {
|
|
86
|
+
users = await searchUsers(graphService, mentionText, 5);
|
|
87
|
+
}
|
|
88
|
+
mentions.push({
|
|
89
|
+
mention: mentionText,
|
|
90
|
+
users,
|
|
91
|
+
});
|
|
92
|
+
match = mentionRegex.exec(text);
|
|
93
|
+
}
|
|
94
|
+
return mentions;
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* Generate HTML content with @mentions converted to proper format
|
|
98
|
+
*/
|
|
99
|
+
export function processMentionsInHtml(html, mentionMappings) {
|
|
100
|
+
let processedContent = html;
|
|
101
|
+
const mentions = [];
|
|
102
|
+
mentionMappings.forEach((mapping, index) => {
|
|
103
|
+
// Replace @mention with HTML mention format
|
|
104
|
+
const mentionRegex = new RegExp(`@(?:"${escapeRegex(mapping.mention)}"|${escapeRegex(mapping.mention)})`, "g");
|
|
105
|
+
const mentionId = index;
|
|
106
|
+
processedContent = processedContent.replace(mentionRegex, `<at id="${mentionId}">${mapping.displayName}</at>`);
|
|
107
|
+
mentions.push({
|
|
108
|
+
id: mentionId,
|
|
109
|
+
mentionText: mapping.displayName,
|
|
110
|
+
mentioned: {
|
|
111
|
+
user: {
|
|
112
|
+
id: mapping.userId,
|
|
113
|
+
},
|
|
114
|
+
},
|
|
115
|
+
});
|
|
116
|
+
});
|
|
117
|
+
return { content: processedContent, mentions };
|
|
118
|
+
}
|
|
119
|
+
function escapeRegex(text) {
|
|
120
|
+
return text.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
|
|
121
|
+
}
|
|
122
|
+
//# sourceMappingURL=users.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"users.js","sourceRoot":"","sources":["../../src/utils/users.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,13 +1,17 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@floriscornel/teams-mcp",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.3.1",
|
|
4
4
|
"description": "MCP server for Microsoft Graph Teams integration",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|
|
7
7
|
"bin": {
|
|
8
8
|
"teams-mcp": "dist/index.js"
|
|
9
9
|
},
|
|
10
|
-
"files": [
|
|
10
|
+
"files": [
|
|
11
|
+
"dist/**/*",
|
|
12
|
+
"README.md",
|
|
13
|
+
"package.json"
|
|
14
|
+
],
|
|
11
15
|
"publishConfig": {
|
|
12
16
|
"access": "public"
|
|
13
17
|
},
|
|
@@ -22,14 +26,20 @@
|
|
|
22
26
|
"test": "vitest run",
|
|
23
27
|
"test:watch": "vitest",
|
|
24
28
|
"test:coverage": "vitest run --coverage",
|
|
29
|
+
"test:coverage:ci": "vitest run --coverage --reporter=default --reporter=junit --outputFile.junit=test-results.xml",
|
|
25
30
|
"test:ui": "vitest --ui",
|
|
26
31
|
"lint": "biome check .",
|
|
27
|
-
"lint:fix": "biome check --
|
|
32
|
+
"lint:fix": "biome check --write --unsafe .",
|
|
28
33
|
"format": "biome format --write .",
|
|
29
34
|
"bump": "npx npm-check-updates -u",
|
|
30
35
|
"prepublishOnly": "npm run build"
|
|
31
36
|
},
|
|
32
|
-
"keywords": [
|
|
37
|
+
"keywords": [
|
|
38
|
+
"mcp",
|
|
39
|
+
"microsoft-graph",
|
|
40
|
+
"teams",
|
|
41
|
+
"model-context-protocol"
|
|
42
|
+
],
|
|
33
43
|
"author": "Floris Cornel",
|
|
34
44
|
"license": "MIT",
|
|
35
45
|
"repository": {
|
|
@@ -45,11 +55,17 @@
|
|
|
45
55
|
"@microsoft/microsoft-graph-client": "^3.0.7",
|
|
46
56
|
"@microsoft/microsoft-graph-types": "^2.40.0",
|
|
47
57
|
"@modelcontextprotocol/sdk": "^1.12.1",
|
|
48
|
-
"
|
|
58
|
+
"@types/dompurify": "^3.2.0",
|
|
59
|
+
"@types/jsdom": "^21.1.7",
|
|
60
|
+
"@types/marked": "^6.0.0",
|
|
61
|
+
"dompurify": "^3.2.6",
|
|
62
|
+
"jsdom": "^26.1.0",
|
|
63
|
+
"marked": "^15.0.12",
|
|
64
|
+
"zod": "^3.25.55"
|
|
49
65
|
},
|
|
50
66
|
"devDependencies": {
|
|
51
67
|
"@biomejs/biome": "^1.9.4",
|
|
52
|
-
"@types/node": "^22.15.
|
|
68
|
+
"@types/node": "^22.15.30",
|
|
53
69
|
"@types/sinon": "^17.0.4",
|
|
54
70
|
"@vitest/coverage-v8": "^3.2.2",
|
|
55
71
|
"msw": "^2.9.0",
|
|
@@ -58,28 +74,6 @@
|
|
|
58
74
|
"typescript": "^5.8.3",
|
|
59
75
|
"vitest": "^3.2.2"
|
|
60
76
|
},
|
|
61
|
-
"optionalDependencies": {
|
|
62
|
-
"@biomejs/cli-darwin-arm64": "^1.9.4",
|
|
63
|
-
"@biomejs/cli-darwin-x64": "^1.9.4",
|
|
64
|
-
"@biomejs/cli-linux-arm64": "^1.9.4",
|
|
65
|
-
"@biomejs/cli-linux-x64": "^1.9.4",
|
|
66
|
-
"@biomejs/cli-win32-arm64": "^1.9.4",
|
|
67
|
-
"@biomejs/cli-win32-x64": "^1.9.4",
|
|
68
|
-
"@rollup/rollup-android-arm-eabi": "^4.0.0",
|
|
69
|
-
"@rollup/rollup-android-arm64": "^4.0.0",
|
|
70
|
-
"@rollup/rollup-darwin-arm64": "^4.0.0",
|
|
71
|
-
"@rollup/rollup-darwin-x64": "^4.0.0",
|
|
72
|
-
"@rollup/rollup-linux-arm-gnueabihf": "^4.0.0",
|
|
73
|
-
"@rollup/rollup-linux-arm64-gnu": "^4.0.0",
|
|
74
|
-
"@rollup/rollup-linux-arm64-musl": "^4.0.0",
|
|
75
|
-
"@rollup/rollup-linux-riscv64-gnu": "^4.0.0",
|
|
76
|
-
"@rollup/rollup-linux-s390x-gnu": "^4.0.0",
|
|
77
|
-
"@rollup/rollup-linux-x64-gnu": "^4.0.0",
|
|
78
|
-
"@rollup/rollup-linux-x64-musl": "^4.0.0",
|
|
79
|
-
"@rollup/rollup-win32-arm64-msvc": "^4.0.0",
|
|
80
|
-
"@rollup/rollup-win32-ia32-msvc": "^4.0.0",
|
|
81
|
-
"@rollup/rollup-win32-x64-msvc": "^4.0.0"
|
|
82
|
-
},
|
|
83
77
|
"engines": {
|
|
84
78
|
"node": ">=18.0.0"
|
|
85
79
|
}
|