@floriscornel/teams-mcp 0.6.0 → 0.8.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.
Files changed (46) hide show
  1. package/README.md +130 -11
  2. package/dist/index.js +77 -32
  3. package/dist/index.js.map +1 -1
  4. package/dist/services/graph.d.ts +10 -0
  5. package/dist/services/graph.d.ts.map +1 -1
  6. package/dist/services/graph.js +24 -5
  7. package/dist/services/graph.js.map +1 -1
  8. package/dist/tools/auth.d.ts +1 -1
  9. package/dist/tools/auth.d.ts.map +1 -1
  10. package/dist/tools/auth.js +1 -1
  11. package/dist/tools/auth.js.map +1 -1
  12. package/dist/tools/chats.d.ts +2 -1
  13. package/dist/tools/chats.d.ts.map +1 -1
  14. package/dist/tools/chats.js +205 -3
  15. package/dist/tools/chats.js.map +1 -1
  16. package/dist/tools/search.d.ts +6 -3
  17. package/dist/tools/search.d.ts.map +1 -1
  18. package/dist/tools/search.js +21 -7
  19. package/dist/tools/search.js.map +1 -1
  20. package/dist/tools/teams.d.ts +1 -1
  21. package/dist/tools/teams.d.ts.map +1 -1
  22. package/dist/tools/teams.js +572 -462
  23. package/dist/tools/teams.js.map +1 -1
  24. package/dist/tools/users.d.ts +1 -1
  25. package/dist/tools/users.d.ts.map +1 -1
  26. package/dist/tools/users.js +1 -1
  27. package/dist/tools/users.js.map +1 -1
  28. package/dist/types/graph.d.ts +10 -2
  29. package/dist/types/graph.d.ts.map +1 -1
  30. package/dist/utils/attachments.d.ts +7 -0
  31. package/dist/utils/attachments.d.ts.map +1 -1
  32. package/dist/utils/attachments.js +22 -0
  33. package/dist/utils/attachments.js.map +1 -1
  34. package/dist/utils/content-type.d.ts +6 -0
  35. package/dist/utils/content-type.d.ts.map +1 -0
  36. package/dist/utils/content-type.js +43 -0
  37. package/dist/utils/content-type.js.map +1 -0
  38. package/dist/utils/file-upload.d.ts +51 -0
  39. package/dist/utils/file-upload.d.ts.map +1 -0
  40. package/dist/utils/file-upload.js +227 -0
  41. package/dist/utils/file-upload.js.map +1 -0
  42. package/dist/utils/html-to-markdown.d.ts +20 -0
  43. package/dist/utils/html-to-markdown.d.ts.map +1 -0
  44. package/dist/utils/html-to-markdown.js +145 -0
  45. package/dist/utils/html-to-markdown.js.map +1 -0
  46. package/package.json +8 -5
package/README.md CHANGED
@@ -75,6 +75,10 @@ To use this MCP server in Cursor/Claude/VS Code, add the following configuration
75
75
  - **Hosted Content**
76
76
  - Download hosted content (images, files) from chat and channel messages
77
77
  - Access inline images and attachments shared in conversations
78
+ - **File Upload**
79
+ - Upload and send any file type (PDF, DOCX, XLSX, ZIP, images, etc.) to channels and chats
80
+ - Large file support (>4 MB) via resumable upload sessions
81
+ - Optional message text, custom filename, formatting, and importance levels
78
82
 
79
83
  ### 🔍 Advanced Search & Discovery
80
84
  - **Message Search**
@@ -140,6 +144,62 @@ If `format` is not specified, the message will be sent as plain text.
140
144
  - **Blockquotes**: `> quoted text`
141
145
  - **Tables**: GitHub-flavored markdown tables
142
146
 
147
+ ## LLM-Friendly Content Format
148
+
149
+ Messages retrieved from the Microsoft Graph API are returned as raw HTML containing Teams-specific tags. To make this content more consumable by AI assistants, the following tools support automatic HTML-to-Markdown conversion:
150
+
151
+ - `get_chat_messages`
152
+ - `get_channel_messages`
153
+ - `get_channel_message_replies`
154
+ - `search_messages`
155
+ - `get_my_mentions`
156
+
157
+ ### Content Format Options
158
+
159
+ Use the `contentFormat` parameter to control how message content is returned:
160
+ - `markdown` (default): Converts Teams HTML to clean Markdown, optimized for LLM consumption
161
+ - `raw`: Returns the original HTML from the Microsoft Graph API
162
+
163
+ ### What Gets Converted
164
+
165
+ | HTML Element | Markdown Output |
166
+ | -------------------------------------- | -------------------------------------------------------- |
167
+ | `<at id="0">Name</at>` (Teams mention) | `@Name` (multi-word names merged using mentions metadata) |
168
+ | `<strong>text</strong>` | `**text**` |
169
+ | `<em>text</em>` | `*text*` |
170
+ | `<code>text</code>` | `` `text` `` |
171
+ | `<a href="url">text</a>` | `[text](url)` |
172
+ | `<ul><li>item</li></ul>` | `- item` |
173
+ | `<table>...</table>` | GFM Markdown table |
174
+ | `<attachment id="...">` | `{attachment:id}` |
175
+ | `<systemEventMessage/>` | *(removed)* |
176
+ | `<hr>` | `---` |
177
+ | `&nbsp;`, `&amp;`, etc. | Decoded to plain characters |
178
+
179
+ ### Attachment Metadata
180
+
181
+ Messages that contain file attachments or inline images include an `attachments` array in the response with metadata for each attachment (id, name, contentType, contentUrl, thumbnailUrl). The inline `{attachment:id}` markers in the markdown content correlate with entries in this array, allowing consumers to identify and download attachments via `download_message_hosted_content` or `download_chat_hosted_content`.
182
+
183
+ ### Example Usage
184
+
185
+ ```json
186
+ {
187
+ "chatId": "19:meeting_...",
188
+ "limit": 10,
189
+ "contentFormat": "markdown"
190
+ }
191
+ ```
192
+
193
+ To get the original HTML (previous default behavior):
194
+
195
+ ```json
196
+ {
197
+ "chatId": "19:meeting_...",
198
+ "limit": 10,
199
+ "contentFormat": "raw"
200
+ }
201
+ ```
202
+
143
203
  ## 📦 Installation
144
204
 
145
205
  ```bash
@@ -161,19 +221,28 @@ npm run auth
161
221
  - Azure App Registration with Microsoft Graph permissions
162
222
 
163
223
  ### Required Microsoft Graph Permissions
224
+
225
+ **Full mode (default):**
164
226
  - `User.Read` - Read user profile
165
227
  - `User.ReadBasic.All` - Read basic user info
166
228
  - `Team.ReadBasic.All` - Read team information
167
229
  - `Channel.ReadBasic.All` - Read channel information
168
230
  - `ChannelMessage.Read.All` - Read channel messages
169
- - `ChannelMessage.Send` - Send channel messages
231
+ - `ChannelMessage.Send` - Send channel messages and replies
170
232
  - `ChannelMessage.ReadWrite` - Edit and delete channel messages
171
- - `Chat.Read` - Read chat messages
172
- - `Chat.ReadWrite` - Create and manage chats (including edit/delete messages)
173
- - `Mail.Read` - Required for Microsoft Search API
174
- - `Calendars.Read` - Required for Microsoft Search API
175
- - `Files.Read.All` - Required for Microsoft Search API
176
- - `Sites.Read.All` - Required for Microsoft Search API
233
+ - `Chat.Read` - Read chat messages (included via read-only scopes)
234
+ - `Chat.ReadWrite` - Create and manage chats, send/edit/delete chat messages (supersedes `Chat.Read`)
235
+ - `TeamMember.Read.All` - Read team members
236
+ - `Files.ReadWrite.All` - Required for file uploads to channels and chats
237
+
238
+ **Read-only mode** (`TEAMS_MCP_READ_ONLY=true`) only these scopes are requested:
239
+ - `User.Read`
240
+ - `User.ReadBasic.All`
241
+ - `Team.ReadBasic.All`
242
+ - `Channel.ReadBasic.All`
243
+ - `ChannelMessage.Read.All`
244
+ - `TeamMember.Read.All`
245
+ - `Chat.Read`
177
246
 
178
247
  ## 🛠️ Usage
179
248
 
@@ -184,13 +253,54 @@ npm run dev
184
253
 
185
254
  # Production mode
186
255
  npm run build && node dist/index.js
256
+
257
+ # Start in read-only mode (disables all write tools)
258
+ TEAMS_MCP_READ_ONLY=true node dist/index.js
187
259
  ```
188
260
 
261
+ ### Read-Only Mode
262
+
263
+ The server supports a read-only mode that disables all write operations (sending messages, creating chats, uploading files, editing/deleting messages) and requests only read-permission scopes from Microsoft Graph.
264
+
265
+ **Enable read-only mode** using either:
266
+ - Environment variable: `TEAMS_MCP_READ_ONLY=true`
267
+ - CLI flag: `--read-only`
268
+
269
+ **Authenticate with reduced scopes:**
270
+ ```bash
271
+ npx @floriscornel/teams-mcp@latest authenticate --read-only
272
+ ```
273
+
274
+ **MCP server configuration (read-only):**
275
+ ```json
276
+ {
277
+ "mcpServers": {
278
+ "teams-mcp": {
279
+ "command": "npx",
280
+ "args": ["-y", "@floriscornel/teams-mcp@latest"],
281
+ "env": {
282
+ "TEAMS_MCP_READ_ONLY": "true"
283
+ }
284
+ }
285
+ }
286
+ }
287
+ ```
288
+
289
+ **Switching modes:** When switching from read-only to full mode, the server detects the scope mismatch and warns you to re-authenticate:
290
+ ```bash
291
+ npx @floriscornel/teams-mcp@latest authenticate
292
+ ```
293
+
294
+ **Read-only tools (15):**
295
+ `auth_status`, `get_current_user`, `search_users`, `get_user`, `list_teams`, `list_channels`, `get_channel_messages`, `get_channel_message_replies`, `list_team_members`, `search_users_for_mentions`, `download_message_hosted_content`, `list_chats`, `get_chat_messages`, `search_messages`, `get_my_mentions`
296
+
297
+ **Write tools disabled in read-only mode (10):**
298
+ `send_channel_message`, `reply_to_channel_message`, `update_channel_message`, `delete_channel_message`, `send_file_to_channel`, `send_chat_message`, `create_chat`, `update_chat_message`, `delete_chat_message`, `send_file_to_chat`
299
+
189
300
  ### Available MCP Tools
190
301
 
191
302
  #### Authentication
192
- - `authenticate` - Initiate OAuth authentication flow
193
- - `logout` - Clear authentication tokens
303
+ - `auth_status` - Check current authentication status
194
304
  - `get_current_user` - Get authenticated user information
195
305
 
196
306
  #### User Operations
@@ -201,10 +311,14 @@ npm run build && node dist/index.js
201
311
  - `list_teams` - List user's joined teams
202
312
  - `list_channels` - List channels in a specific team
203
313
  - `get_channel_messages` - Retrieve messages from a team channel with pagination and filtering
314
+ - `get_channel_message_replies` - Get replies to a specific channel message
204
315
  - `send_channel_message` - Send a message to a team channel
316
+ - `reply_to_channel_message` - Reply to an existing channel message
205
317
  - `update_channel_message` - Edit a previously sent channel message
206
318
  - `delete_channel_message` - Soft delete a channel message (supports replies)
207
319
  - `list_team_members` - List members of a specific team
320
+ - `search_users_for_mentions` - Search for team members to @mention in messages
321
+ - `send_file_to_channel` - Upload a local file and send it as a message to a channel
208
322
 
209
323
  #### Chat Operations
210
324
  - `list_chats` - List user's chats (1:1 and group)
@@ -213,13 +327,14 @@ npm run build && node dist/index.js
213
327
  - `create_chat` - Create a new 1:1 or group chat
214
328
  - `update_chat_message` - Edit a previously sent chat message
215
329
  - `delete_chat_message` - Soft delete a chat message
330
+ - `send_file_to_chat` - Upload a local file and send it as a message to a chat
216
331
 
217
332
  #### Media Operations
218
- - `download_message_hosted_content` - Download hosted content (images, files) from messages
333
+ - `download_message_hosted_content` - Download hosted content (images, files) from channel messages
334
+ - `download_chat_hosted_content` - Download hosted content (images, files) from chat messages
219
335
 
220
336
  #### Search Operations
221
337
  - `search_messages` - Search across all Teams messages using KQL syntax
222
- - `get_recent_messages` - Get recent messages with advanced filtering options
223
338
  - `get_my_mentions` - Find messages mentioning the current user
224
339
 
225
340
  ## 📋 Examples
@@ -229,7 +344,11 @@ npm run build && node dist/index.js
229
344
  First, authenticate with Microsoft Graph:
230
345
 
231
346
  ```bash
347
+ # Full access (default)
232
348
  npx @floriscornel/teams-mcp@latest authenticate
349
+
350
+ # Read-only (reduced permission scopes)
351
+ npx @floriscornel/teams-mcp@latest authenticate --read-only
233
352
  ```
234
353
 
235
354
  Check your authentication status:
package/dist/index.js CHANGED
@@ -6,7 +6,7 @@ import { PublicClientApplication, } from "@azure/msal-node";
6
6
  import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
7
7
  import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
8
8
  import { cachePlugin } from "./msal-cache.js";
9
- import { GraphService } from "./services/graph.js";
9
+ import { FULL_SCOPES, GraphService, READ_ONLY_SCOPES } from "./services/graph.js";
10
10
  import { registerAuthTools } from "./tools/auth.js";
11
11
  import { registerChatTools } from "./tools/chats.js";
12
12
  import { registerSearchTools } from "./tools/search.js";
@@ -16,23 +16,27 @@ import { registerUsersTools } from "./tools/users.js";
16
16
  const CLIENT_ID = "14d82eec-204b-4c2f-b7e8-296a70dab67e";
17
17
  const AUTHORITY = "https://login.microsoftonline.com/common";
18
18
  const AUTH_INFO_PATH = join(homedir(), ".msgraph-mcp-auth.json");
19
- // Scopes for delegated (user) authentication
20
- const DELEGATED_SCOPES = [
21
- "User.Read",
22
- "User.ReadBasic.All",
23
- "Team.ReadBasic.All",
24
- "Channel.ReadBasic.All",
25
- "ChannelMessage.Read.All",
26
- "ChannelMessage.Send",
27
- "TeamMember.Read.All",
28
- "Chat.ReadBasic",
29
- "Chat.ReadWrite",
30
- ];
19
+ /** Check whether CLI args contain --read-only. */
20
+ function hasReadOnlyFlag(args) {
21
+ return args.includes("--read-only");
22
+ }
23
+ /** Read the persisted auth info file (best-effort). */
24
+ async function readAuthInfo() {
25
+ try {
26
+ const data = await fs.readFile(AUTH_INFO_PATH, "utf8");
27
+ return JSON.parse(data);
28
+ }
29
+ catch {
30
+ return undefined;
31
+ }
32
+ }
31
33
  // Authentication functions
32
- async function authenticate() {
34
+ async function authenticate(readOnly) {
35
+ const scopes = readOnly ? READ_ONLY_SCOPES : FULL_SCOPES;
36
+ const modeLabel = readOnly ? "read-only" : "full access";
33
37
  console.log("🔐 Microsoft Graph Authentication for MCP Server");
34
38
  console.log("=".repeat(50));
35
- console.log("Using Microsoft Graph CLI app");
39
+ console.log(`Using Microsoft Graph CLI app (${modeLabel})`);
36
40
  try {
37
41
  console.log("\n📱 Using device code flow...");
38
42
  const msalConfig = {
@@ -46,7 +50,7 @@ async function authenticate() {
46
50
  };
47
51
  const client = new PublicClientApplication(msalConfig);
48
52
  const result = await client.acquireTokenByDeviceCode({
49
- scopes: DELEGATED_SCOPES,
53
+ scopes,
50
54
  deviceCodeCallback: (response) => {
51
55
  console.log("\n📱 Please complete authentication:");
52
56
  console.log(`🌐 Visit: ${response.verificationUri}`);
@@ -62,10 +66,12 @@ async function authenticate() {
62
66
  timestamp: new Date().toISOString(),
63
67
  expiresAt: result.expiresOn?.toISOString(),
64
68
  account: result.account?.username,
69
+ grantedScopes: result.scopes,
65
70
  };
66
71
  await fs.writeFile(AUTH_INFO_PATH, JSON.stringify(authInfo, null, 2));
67
72
  console.log("\n✅ Authentication successful!");
68
73
  console.log(`👤 Signed in as: ${result.account?.username || "Unknown"}`);
74
+ console.log(`🔒 Mode: ${modeLabel}`);
69
75
  console.log(`💾 Credentials saved to: ${AUTH_INFO_PATH}`);
70
76
  console.log("🔄 Refresh token cached for automatic renewal");
71
77
  console.log("\n🚀 You can now use the MCP server in Cursor!");
@@ -96,6 +102,18 @@ async function checkAuth() {
96
102
  console.log("✅ Authentication found");
97
103
  console.log(`👤 Account: ${authInfo.account || "Unknown"}`);
98
104
  console.log(`📅 Authenticated on: ${authInfo.timestamp}`);
105
+ // Show granted scope mode
106
+ const grantedScopes = authInfo.grantedScopes;
107
+ if (grantedScopes) {
108
+ const hasWriteScopes = grantedScopes.some((s) => s === "ChannelMessage.Send" ||
109
+ s === "ChannelMessage.ReadWrite" ||
110
+ s === "Chat.ReadWrite" ||
111
+ s === "Files.ReadWrite.All");
112
+ console.log(`🔒 Scope mode: ${hasWriteScopes ? "full access" : "read-only"}`);
113
+ }
114
+ else {
115
+ console.log("⚠️ Scope mode: unknown (authenticated before read-only support)");
116
+ }
99
117
  // Check if we have expiration info
100
118
  if (authInfo.expiresAt) {
101
119
  const expiresAt = new Date(authInfo.expiresAt);
@@ -140,34 +158,56 @@ async function logout() {
140
158
  console.log("🔄 Run 'npx @floriscornel/teams-mcp@latest authenticate' to re-authenticate");
141
159
  }
142
160
  // MCP Server setup
143
- async function startMcpServer() {
161
+ async function startMcpServer(readOnly) {
144
162
  // Create MCP server
145
163
  const server = new McpServer({
146
164
  name: "teams-mcp",
147
- version: "0.6.0",
165
+ version: "0.8.0",
148
166
  });
149
167
  // Initialize Graph service (singleton)
150
168
  const graphService = GraphService.getInstance();
151
- // Register all tools
152
- registerAuthTools(server, graphService);
153
- registerUsersTools(server, graphService);
154
- registerTeamsTools(server, graphService);
155
- registerChatTools(server, graphService);
156
- registerSearchTools(server, graphService);
169
+ graphService.readOnlyMode = readOnly;
170
+ // Detect scope mismatch: warn when switching from read-only → full mode
171
+ if (!readOnly && !process.env.AUTH_TOKEN) {
172
+ const authInfo = await readAuthInfo();
173
+ if (authInfo) {
174
+ const grantedScopes = authInfo.grantedScopes;
175
+ const hasWriteScopes = grantedScopes?.some((s) => s === "ChannelMessage.Send" ||
176
+ s === "ChannelMessage.ReadWrite" ||
177
+ s === "Chat.ReadWrite" ||
178
+ s === "Files.ReadWrite.All");
179
+ if (grantedScopes && !hasWriteScopes) {
180
+ console.error("⚠️ Warning: You authenticated with read-only scopes but the server is running in full mode.");
181
+ console.error(" Write operations may fail. Re-authenticate without --read-only:");
182
+ console.error(" npx @floriscornel/teams-mcp@latest authenticate");
183
+ }
184
+ else if (!grantedScopes) {
185
+ console.error("⚠️ Warning: Could not determine granted scopes. If you experience permission errors,");
186
+ console.error(" re-authenticate: npx @floriscornel/teams-mcp@latest authenticate");
187
+ }
188
+ }
189
+ }
190
+ // Register all tools (write tools are skipped when readOnly is true)
191
+ registerAuthTools(server, graphService, readOnly);
192
+ registerUsersTools(server, graphService, readOnly);
193
+ registerTeamsTools(server, graphService, readOnly);
194
+ registerChatTools(server, graphService, readOnly);
195
+ registerSearchTools(server, graphService, readOnly);
157
196
  // Start server
158
197
  const transport = new StdioServerTransport();
159
198
  await server.connect(transport);
160
- console.error("Microsoft Graph MCP Server started");
199
+ console.error(`Microsoft Graph MCP Server started${readOnly ? " (read-only mode)" : ""}`);
161
200
  }
162
201
  // Main function to handle both CLI and MCP server modes
163
202
  async function main() {
164
203
  const args = process.argv.slice(2);
165
- const command = args[0];
204
+ const command = args.find((arg) => arg !== "--read-only");
205
+ const readOnly = hasReadOnlyFlag(args) || process.env.TEAMS_MCP_READ_ONLY === "true";
166
206
  // CLI commands
167
207
  switch (command) {
168
208
  case "authenticate":
169
209
  case "auth":
170
- await authenticate();
210
+ await authenticate(readOnly);
171
211
  return;
172
212
  case "check":
173
213
  await checkAuth();
@@ -181,14 +221,19 @@ async function main() {
181
221
  console.log("Microsoft Graph MCP Server");
182
222
  console.log("");
183
223
  console.log("Usage:");
184
- console.log(" npx @floriscornel/teams-mcp@latest authenticate # Authenticate with Microsoft");
185
- console.log(" npx @floriscornel/teams-mcp@latest check # Check authentication status");
186
- console.log(" npx @floriscornel/teams-mcp@latest logout # Clear authentication");
187
- console.log(" npx @floriscornel/teams-mcp@latest # Start MCP server (default)");
224
+ console.log(" npx @floriscornel/teams-mcp@latest authenticate # Authenticate with full scopes");
225
+ console.log(" npx @floriscornel/teams-mcp@latest authenticate --read-only # Authenticate with read-only scopes");
226
+ console.log(" npx @floriscornel/teams-mcp@latest check # Check authentication status");
227
+ console.log(" npx @floriscornel/teams-mcp@latest logout # Clear authentication");
228
+ console.log(" npx @floriscornel/teams-mcp@latest # Start MCP server (default)");
229
+ console.log("");
230
+ console.log("Environment variables:");
231
+ console.log(" TEAMS_MCP_READ_ONLY=true # Start MCP server in read-only mode");
232
+ console.log(" AUTH_TOKEN=<jwt> # Use a pre-existing access token");
188
233
  return;
189
234
  case undefined:
190
235
  // No command = start MCP server
191
- await startMcpServer();
236
+ await startMcpServer(readOnly);
192
237
  return;
193
238
  default:
194
239
  console.error(`Unknown command: ${command}`);
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,8 @@
1
1
  import { Client } from "@microsoft/microsoft-graph-client";
2
+ /** Scopes sufficient for read-only operations (no message sending, no file uploads). */
3
+ export declare const READ_ONLY_SCOPES: string[];
4
+ /** Full scopes including write operations. */
5
+ export declare const FULL_SCOPES: string[];
2
6
  export interface AuthStatus {
3
7
  isAuthenticated: boolean;
4
8
  userPrincipalName?: string | undefined;
@@ -12,7 +16,13 @@ export declare class GraphService {
12
16
  private tokenExpiresAt;
13
17
  private msalApp;
14
18
  private msalAccount;
19
+ private _readOnlyMode;
15
20
  static getInstance(): GraphService;
21
+ /** Whether the service operates in read-only mode (reduced permission scopes). */
22
+ get readOnlyMode(): boolean;
23
+ set readOnlyMode(value: boolean);
24
+ /** Returns the scopes to request based on the current mode. */
25
+ get scopes(): string[];
16
26
  private initializeClient;
17
27
  private acquireToken;
18
28
  getAuthStatus(): Promise<AuthStatus>;
@@ -1 +1 @@
1
- {"version":3,"file":"graph.d.ts","sourceRoot":"","sources":["../../src/services/graph.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,mCAAmC,CAAC;AAkB3D,MAAM,WAAW,UAAU;IACzB,eAAe,EAAE,OAAO,CAAC;IACzB,iBAAiB,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACvC,WAAW,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACjC,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAChC;AAED,qBAAa,YAAY;IACvB,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAe;IACtC,OAAO,CAAC,MAAM,CAAqB;IACnC,OAAO,CAAC,aAAa,CAAS;IAC9B,OAAO,CAAC,cAAc,CAAmB;IACzC,OAAO,CAAC,OAAO,CAAsC;IACrD,OAAO,CAAC,WAAW,CAA0B;IAE7C,MAAM,CAAC,WAAW,IAAI,YAAY;YAOpB,gBAAgB;YA8DhB,YAAY;IAoBpB,aAAa,IAAI,OAAO,CAAC,UAAU,CAAC;IAqBpC,SAAS,IAAI,OAAO,CAAC,MAAM,CAAC;IAWlC,eAAe,IAAI,OAAO;IAI1B,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;CAqBjD"}
1
+ {"version":3,"file":"graph.d.ts","sourceRoot":"","sources":["../../src/services/graph.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,mCAAmC,CAAC;AAM3D,wFAAwF;AACxF,eAAO,MAAM,gBAAgB,UAQ5B,CAAC;AAEF,8CAA8C;AAC9C,eAAO,MAAM,WAAW,UAMvB,CAAC;AAEF,MAAM,WAAW,UAAU;IACzB,eAAe,EAAE,OAAO,CAAC;IACzB,iBAAiB,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACvC,WAAW,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACjC,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAChC;AAED,qBAAa,YAAY;IACvB,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAe;IACtC,OAAO,CAAC,MAAM,CAAqB;IACnC,OAAO,CAAC,aAAa,CAAS;IAC9B,OAAO,CAAC,cAAc,CAAmB;IACzC,OAAO,CAAC,OAAO,CAAsC;IACrD,OAAO,CAAC,WAAW,CAA0B;IAC7C,OAAO,CAAC,aAAa,CAAS;IAE9B,MAAM,CAAC,WAAW,IAAI,YAAY;IAOlC,kFAAkF;IAClF,IAAI,YAAY,IAAI,OAAO,CAE1B;IAED,IAAI,YAAY,CAAC,KAAK,EAAE,OAAO,EAE9B;IAED,+DAA+D;IAC/D,IAAI,MAAM,IAAI,MAAM,EAAE,CAErB;YAEa,gBAAgB;YA8DhB,YAAY;IAoBpB,aAAa,IAAI,OAAO,CAAC,UAAU,CAAC;IAqBpC,SAAS,IAAI,OAAO,CAAC,MAAM,CAAC;IAWlC,eAAe,IAAI,OAAO;IAI1B,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;CAqBjD"}
@@ -3,16 +3,23 @@ import { Client } from "@microsoft/microsoft-graph-client";
3
3
  import { cachePlugin } from "../msal-cache.js";
4
4
  const CLIENT_ID = "14d82eec-204b-4c2f-b7e8-296a70dab67e";
5
5
  const AUTHORITY = "https://login.microsoftonline.com/common";
6
- const DELEGATED_SCOPES = [
6
+ /** Scopes sufficient for read-only operations (no message sending, no file uploads). */
7
+ export const READ_ONLY_SCOPES = [
7
8
  "User.Read",
8
9
  "User.ReadBasic.All",
9
10
  "Team.ReadBasic.All",
10
11
  "Channel.ReadBasic.All",
11
12
  "ChannelMessage.Read.All",
12
- "ChannelMessage.Send",
13
13
  "TeamMember.Read.All",
14
- "Chat.ReadBasic",
14
+ "Chat.Read",
15
+ ];
16
+ /** Full scopes including write operations. */
17
+ export const FULL_SCOPES = [
18
+ ...READ_ONLY_SCOPES,
19
+ "ChannelMessage.Send",
20
+ "ChannelMessage.ReadWrite",
15
21
  "Chat.ReadWrite",
22
+ "Files.ReadWrite.All",
16
23
  ];
17
24
  export class GraphService {
18
25
  static instance;
@@ -21,12 +28,24 @@ export class GraphService {
21
28
  tokenExpiresAt;
22
29
  msalApp;
23
30
  msalAccount;
31
+ _readOnlyMode = false;
24
32
  static getInstance() {
25
33
  if (!GraphService.instance) {
26
34
  GraphService.instance = new GraphService();
27
35
  }
28
36
  return GraphService.instance;
29
37
  }
38
+ /** Whether the service operates in read-only mode (reduced permission scopes). */
39
+ get readOnlyMode() {
40
+ return this._readOnlyMode;
41
+ }
42
+ set readOnlyMode(value) {
43
+ this._readOnlyMode = value;
44
+ }
45
+ /** Returns the scopes to request based on the current mode. */
46
+ get scopes() {
47
+ return this._readOnlyMode ? READ_ONLY_SCOPES : FULL_SCOPES;
48
+ }
30
49
  async initializeClient() {
31
50
  if (this.isInitialized)
32
51
  return;
@@ -62,7 +81,7 @@ export class GraphService {
62
81
  this.msalAccount = accounts[0];
63
82
  // Verify we can acquire a token
64
83
  const result = await this.msalApp.acquireTokenSilent({
65
- scopes: DELEGATED_SCOPES,
84
+ scopes: this.scopes,
66
85
  account: this.msalAccount,
67
86
  });
68
87
  if (!result) {
@@ -86,7 +105,7 @@ export class GraphService {
86
105
  throw new Error("MSAL not initialized");
87
106
  }
88
107
  const result = await this.msalApp.acquireTokenSilent({
89
- scopes: DELEGATED_SCOPES,
108
+ scopes: this.scopes,
90
109
  account: this.msalAccount,
91
110
  });
92
111
  if (!result) {
@@ -1 +1 @@
1
- {"version":3,"file":"graph.js","sourceRoot":"","sources":["../../src/services/graph.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"graph.js","sourceRoot":"","sources":["../../src/services/graph.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,4 @@
1
1
  import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
2
  import type { GraphService } from "../services/graph.js";
3
- export declare function registerAuthTools(server: McpServer, graphService: GraphService): void;
3
+ export declare function registerAuthTools(server: McpServer, graphService: GraphService, _readOnly: boolean): void;
4
4
  //# sourceMappingURL=auth.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../src/tools/auth.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACzE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAEzD,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,SAAS,EAAE,YAAY,EAAE,YAAY,QAoB9E"}
1
+ {"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../src/tools/auth.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACzE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAEzD,wBAAgB,iBAAiB,CAC/B,MAAM,EAAE,SAAS,EACjB,YAAY,EAAE,YAAY,EAC1B,SAAS,EAAE,OAAO,QAqBnB"}
@@ -1,4 +1,4 @@
1
- export function registerAuthTools(server, graphService) {
1
+ export function registerAuthTools(server, graphService, _readOnly) {
2
2
  // Authentication status tool
3
3
  server.tool("auth_status", "Check the authentication status of the Microsoft Graph connection. Returns whether the user is authenticated and shows their basic profile information.", {}, async () => {
4
4
  const status = await graphService.getAuthStatus();
@@ -1 +1 @@
1
- {"version":3,"file":"auth.js","sourceRoot":"","sources":["../../src/tools/auth.ts"],"names":[],"mappings":"AAGA,MAAM,UAAU,iBAAiB,CAAC,MAAiB,EAAE,YAA0B;IAC7E,6BAA6B;IAC7B,MAAM,CAAC,IAAI,CACT,aAAa,EACb,yJAAyJ,EACzJ,EAAE,EACF,KAAK,IAAI,EAAE;QACT,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC,aAAa,EAAE,CAAC;QAClD,OAAO;YACL,OAAO,EAAE;gBACP;oBACE,IAAI,EAAE,MAAM;oBACZ,IAAI,EAAE,MAAM,CAAC,eAAe;wBAC1B,CAAC,CAAC,sBAAsB,MAAM,CAAC,WAAW,IAAI,cAAc,KAAK,MAAM,CAAC,iBAAiB,IAAI,oBAAoB,GAAG;wBACpH,CAAC,CAAC,kFAAkF;iBACvF;aACF;SACF,CAAC;IACJ,CAAC,CACF,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"auth.js","sourceRoot":"","sources":["../../src/tools/auth.ts"],"names":[],"mappings":"AAGA,MAAM,UAAU,iBAAiB,CAC/B,MAAiB,EACjB,YAA0B,EAC1B,SAAkB;IAElB,6BAA6B;IAC7B,MAAM,CAAC,IAAI,CACT,aAAa,EACb,yJAAyJ,EACzJ,EAAE,EACF,KAAK,IAAI,EAAE;QACT,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC,aAAa,EAAE,CAAC;QAClD,OAAO;YACL,OAAO,EAAE;gBACP;oBACE,IAAI,EAAE,MAAM;oBACZ,IAAI,EAAE,MAAM,CAAC,eAAe;wBAC1B,CAAC,CAAC,sBAAsB,MAAM,CAAC,WAAW,IAAI,cAAc,KAAK,MAAM,CAAC,iBAAiB,IAAI,oBAAoB,GAAG;wBACpH,CAAC,CAAC,kFAAkF;iBACvF;aACF;SACF,CAAC;IACJ,CAAC,CACF,CAAC;AACJ,CAAC"}
@@ -7,6 +7,7 @@ import type { GraphService } from "../services/graph.js";
7
7
  *
8
8
  * @param server - The MCP server instance to register tools on.
9
9
  * @param graphService - The Microsoft Graph service used for API calls.
10
+ * @param readOnly - When true, skips registration of write tools (send, create, update, delete, file upload).
10
11
  */
11
- export declare function registerChatTools(server: McpServer, graphService: GraphService): void;
12
+ export declare function registerChatTools(server: McpServer, graphService: GraphService, readOnly: boolean): void;
12
13
  //# sourceMappingURL=chats.d.ts.map
@@ -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;AAczD;;;;;;;GAOG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,SAAS,EAAE,YAAY,EAAE,YAAY,QAinB9E"}
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;AAuBzD;;;;;;;;GAQG;AACH,wBAAgB,iBAAiB,CAC/B,MAAM,EAAE,SAAS,EACjB,YAAY,EAAE,YAAY,EAC1B,QAAQ,EAAE,OAAO,QA83BlB"}