@floriscornel/teams-mcp 0.1.0 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2025 Floris Cornel
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md CHANGED
@@ -1,7 +1,28 @@
1
1
  # Teams MCP
2
2
 
3
+ [![npm version](https://img.shields.io/npm/v/@floriscornel/teams-mcp.svg)](https://www.npmjs.com/package/@floriscornel/teams-mcp)
4
+ [![npm downloads](https://img.shields.io/npm/dm/@floriscornel/teams-mcp.svg)](https://www.npmjs.com/package/@floriscornel/teams-mcp)
5
+ [![codecov](https://codecov.io/gh/floriscornel/teams-mcp/graph/badge.svg)](https://app.codecov.io/gh/floriscornel/teams-mcp)
6
+ [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
7
+ [![GitHub stars](https://img.shields.io/github/stars/floriscornel/teams-mcp.svg)](https://github.com/floriscornel/teams-mcp/stargazers)
8
+
3
9
  A Model Context Protocol (MCP) server that provides seamless integration with Microsoft Graph APIs, enabling AI assistants to interact with Microsoft Teams, users, and organizational data.
4
10
 
11
+ ## 📦 Installation
12
+
13
+ To use this MCP server in Cursor/Claude/VS Code, add the following configuration:
14
+
15
+ ```json
16
+ {
17
+ "mcpServers": {
18
+ "teams-mcp": {
19
+ "command": "npx",
20
+ "args": ["-y", "@floriscornel/teams-mcp@latest"]
21
+ }
22
+ }
23
+ }
24
+ ```
25
+
5
26
  ## 🚀 Features
6
27
 
7
28
  ### 🔐 Authentication
@@ -51,19 +72,19 @@ A Model Context Protocol (MCP) server that provides seamless integration with Mi
51
72
 
52
73
  ```bash
53
74
  # Install dependencies
54
- bun install
75
+ npm install
55
76
 
56
77
  # Build the project
57
- bun run build
78
+ npm run build
58
79
 
59
80
  # Set up authentication
60
- bun run auth
81
+ npm run auth
61
82
  ```
62
83
 
63
84
  ## 🔧 Configuration
64
85
 
65
86
  ### Prerequisites
66
- - Node.js 18+ or Bun 1.0+
87
+ - Node.js 18+
67
88
  - Microsoft 365 account with appropriate permissions
68
89
  - Azure App Registration with Microsoft Graph permissions
69
90
 
@@ -86,10 +107,10 @@ bun run auth
86
107
  ### Starting the Server
87
108
  ```bash
88
109
  # Development mode with hot reload
89
- bun run dev
110
+ npm run dev
90
111
 
91
112
  # Production mode
92
- bun run build && node dist/index.js
113
+ npm run build && node dist/index.js
93
114
  ```
94
115
 
95
116
  ### Available MCP Tools
package/dist/index.js CHANGED
@@ -2,9 +2,9 @@
2
2
  import { promises as fs } from "node:fs";
3
3
  import { homedir } from "node:os";
4
4
  import { join } from "node:path";
5
+ import { DeviceCodeCredential } from "@azure/identity";
5
6
  import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
6
7
  import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
7
- import { DeviceCodeCredential } from "@azure/identity";
8
8
  import { GraphService } from "./services/graph.js";
9
9
  import { registerAuthTools } from "./tools/auth.js";
10
10
  import { registerChatTools } from "./tools/chats.js";
@@ -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.1.0",
113
+ version: "0.2.0",
114
114
  });
115
115
  // Initialize Graph service (singleton)
116
116
  const graphService = GraphService.getInstance();
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 +1 @@
1
- {"version":3,"file":"graph.d.ts","sourceRoot":"","sources":["../../src/services/graph.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,MAAM,EAAE,MAAM,mCAAmC,CAAC;AAE3D,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;AAUD,qBAAa,YAAY;IACvB,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAe;IACtC,OAAO,CAAC,MAAM,CAAqB;IACnC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAA6C;IACtE,OAAO,CAAC,aAAa,CAAS;IAC9B,OAAO,CAAC,QAAQ,CAA6B;IAE7C,MAAM,CAAC,WAAW,IAAI,YAAY;YAOpB,gBAAgB;IAoCxB,aAAa,IAAI,OAAO,CAAC,UAAU,CAAC;IAqBpC,SAAS,IAAI,OAAO,CAAC,MAAM,CAAC;IAWlC,eAAe,IAAI,OAAO;CAG3B"}
1
+ {"version":3,"file":"graph.d.ts","sourceRoot":"","sources":["../../src/services/graph.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,MAAM,EAAE,MAAM,mCAAmC,CAAC;AAE3D,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;AAUD,qBAAa,YAAY;IACvB,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAe;IACtC,OAAO,CAAC,MAAM,CAAqB;IACnC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAA6C;IACtE,OAAO,CAAC,aAAa,CAAS;IAC9B,OAAO,CAAC,QAAQ,CAA6B;IAE7C,MAAM,CAAC,WAAW,IAAI,YAAY;YAOpB,gBAAgB;IAsCxB,aAAa,IAAI,OAAO,CAAC,UAAU,CAAC;IAqBpC,SAAS,IAAI,OAAO,CAAC,MAAM,CAAC;IAWlC,eAAe,IAAI,OAAO;CAG3B"}
@@ -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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"}
@@ -0,0 +1,19 @@
1
+ import type { Channel, Chat, ChatMessage, ConversationMember, Team, User } from "../types/graph.js";
2
+ export declare const mockUser: User;
3
+ export declare const mockTeam: Team;
4
+ export declare const mockChannel: Channel;
5
+ export declare const mockChat: Chat;
6
+ export declare const mockChatMessage: ChatMessage;
7
+ export declare const mockConversationMember: ConversationMember;
8
+ export declare const graphApiHandlers: import("msw").HttpHandler[];
9
+ export declare const server: import("msw/node").SetupServerApi;
10
+ export declare function createMockGraphService(): any;
11
+ export declare function createMockUnauthenticatedGraphService(): any;
12
+ export declare function createMockMcpServer(): {
13
+ tool: import("vitest").Mock<(...args: any[]) => any>;
14
+ connect: import("vitest").Mock<(...args: any[]) => any>;
15
+ getTool: (name: string) => any;
16
+ getAllTools: () => any[];
17
+ };
18
+ export declare function testMcpTool(toolName: string, parameters: any, mockServer: any, expectedResult?: any): Promise<any>;
19
+ //# sourceMappingURL=setup.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"setup.d.ts","sourceRoot":"","sources":["../../src/test-utils/setup.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EACV,OAAO,EACP,IAAI,EACJ,WAAW,EACX,kBAAkB,EAElB,IAAI,EACJ,IAAI,EACL,MAAM,mBAAmB,CAAC;AAG3B,eAAO,MAAM,QAAQ,EAAE,IAQtB,CAAC;AAEF,eAAO,MAAM,QAAQ,EAAE,IAKtB,CAAC;AAEF,eAAO,MAAM,WAAW,EAAE,OAKzB,CAAC;AAEF,eAAO,MAAM,QAAQ,EAAE,IAItB,CAAC;AAEF,eAAO,MAAM,eAAe,EAAE,WAc7B,CAAC;AAEF,eAAO,MAAM,sBAAsB,EAAE,kBAIpC,CAAC;AAGF,eAAO,MAAM,gBAAgB,6BAoN5B,CAAC;AAGF,eAAO,MAAM,MAAM,mCAAmC,CAAC;AAkCvD,wBAAgB,sBAAsB,QAoBrC;AAGD,wBAAgB,qCAAqC,QAWpD;AAGD,wBAAgB,mBAAmB;;;oBAQf,MAAM;;EAGzB;AAGD,wBAAsB,WAAW,CAC/B,QAAQ,EAAE,MAAM,EAChB,UAAU,EAAE,GAAG,EACf,UAAU,EAAE,GAAG,EACf,cAAc,CAAC,EAAE,GAAG,gBAcrB"}
@@ -0,0 +1,315 @@
1
+ import { http, HttpResponse } from "msw";
2
+ import { setupServer } from "msw/node";
3
+ import { afterEach, beforeEach, expect, vi } from "vitest";
4
+ // Mock data fixtures
5
+ export const mockUser = {
6
+ id: "test-user-id",
7
+ displayName: "Test User",
8
+ userPrincipalName: "test.user@example.com",
9
+ mail: "test.user@example.com",
10
+ jobTitle: "Test Engineer",
11
+ department: "Engineering",
12
+ officeLocation: "Remote",
13
+ };
14
+ export const mockTeam = {
15
+ id: "test-team-id",
16
+ displayName: "Test Team",
17
+ description: "A test team for unit tests",
18
+ isArchived: false,
19
+ };
20
+ export const mockChannel = {
21
+ id: "test-channel-id",
22
+ displayName: "General",
23
+ description: "General discussion channel",
24
+ membershipType: "standard",
25
+ };
26
+ export const mockChat = {
27
+ id: "test-chat-id",
28
+ topic: "Test Chat",
29
+ chatType: "group",
30
+ };
31
+ export const mockChatMessage = {
32
+ id: "test-message-id",
33
+ createdDateTime: "2024-01-01T12:00:00Z",
34
+ body: {
35
+ content: "Test message content",
36
+ contentType: "text",
37
+ },
38
+ from: {
39
+ user: {
40
+ id: "test-user-id",
41
+ displayName: "Test User",
42
+ },
43
+ },
44
+ importance: "normal",
45
+ };
46
+ export const mockConversationMember = {
47
+ id: "test-member-id",
48
+ displayName: "Test Member",
49
+ roles: ["owner"],
50
+ };
51
+ // Microsoft Graph API mock handlers
52
+ export const graphApiHandlers = [
53
+ // User endpoints
54
+ http.get("https://graph.microsoft.com/v1.0/me", () => {
55
+ return HttpResponse.json(mockUser);
56
+ }),
57
+ http.get("https://graph.microsoft.com/v1.0/users", ({ request }) => {
58
+ const url = new URL(request.url);
59
+ const filter = url.searchParams.get("$filter");
60
+ // Simulate search functionality
61
+ const response = {
62
+ value: filter?.includes("test") ? [mockUser] : [],
63
+ };
64
+ return HttpResponse.json(response);
65
+ }),
66
+ http.get("https://graph.microsoft.com/v1.0/users/:userId", ({ params }) => {
67
+ if (params.userId === "test-user-id" || params.userId === "test.user@example.com") {
68
+ return HttpResponse.json(mockUser);
69
+ }
70
+ return new HttpResponse(null, { status: 404 });
71
+ }),
72
+ // Teams endpoints
73
+ http.get("https://graph.microsoft.com/v1.0/me/joinedTeams", () => {
74
+ const response = {
75
+ value: [mockTeam],
76
+ };
77
+ return HttpResponse.json(response);
78
+ }),
79
+ http.get("https://graph.microsoft.com/v1.0/teams/:teamId/channels", ({ params }) => {
80
+ if (params.teamId === "test-team-id") {
81
+ const response = {
82
+ value: [mockChannel],
83
+ };
84
+ return HttpResponse.json(response);
85
+ }
86
+ return new HttpResponse(null, { status: 404 });
87
+ }),
88
+ http.get("https://graph.microsoft.com/v1.0/teams/:teamId/members", ({ params }) => {
89
+ if (params.teamId === "test-team-id") {
90
+ const response = {
91
+ value: [mockConversationMember],
92
+ };
93
+ return HttpResponse.json(response);
94
+ }
95
+ return new HttpResponse(null, { status: 404 });
96
+ }),
97
+ // Channel messages
98
+ http.get("https://graph.microsoft.com/v1.0/teams/:teamId/channels/:channelId/messages", ({ params }) => {
99
+ if (params.teamId === "test-team-id" && params.channelId === "test-channel-id") {
100
+ const response = {
101
+ value: [mockChatMessage],
102
+ };
103
+ return HttpResponse.json(response);
104
+ }
105
+ return new HttpResponse(null, { status: 404 });
106
+ }),
107
+ http.post("https://graph.microsoft.com/v1.0/teams/:teamId/channels/:channelId/messages", async ({ params, request }) => {
108
+ if (params.teamId === "test-team-id" && params.channelId === "test-channel-id") {
109
+ const body = (await request.json());
110
+ const response = {
111
+ ...mockChatMessage,
112
+ id: "new-message-id",
113
+ body: body.body,
114
+ createdDateTime: new Date().toISOString(),
115
+ };
116
+ return HttpResponse.json(response);
117
+ }
118
+ return new HttpResponse(null, { status: 404 });
119
+ }),
120
+ // Chats endpoints
121
+ http.get("https://graph.microsoft.com/v1.0/me/chats", () => {
122
+ const response = {
123
+ value: [mockChat],
124
+ };
125
+ return HttpResponse.json(response);
126
+ }),
127
+ http.get("https://graph.microsoft.com/v1.0/me/chats/:chatId/messages", ({ params, request }) => {
128
+ if (params.chatId === "test-chat-id") {
129
+ const url = new URL(request.url);
130
+ const fromUser = url.searchParams.get("$filter")?.includes("from/user/id");
131
+ const response = {
132
+ value: fromUser ? [] : [mockChatMessage],
133
+ };
134
+ return HttpResponse.json(response);
135
+ }
136
+ return new HttpResponse(null, { status: 404 });
137
+ }),
138
+ http.post("https://graph.microsoft.com/v1.0/me/chats/:chatId/messages", async ({ params, request }) => {
139
+ if (params.chatId === "test-chat-id") {
140
+ const body = (await request.json());
141
+ const response = {
142
+ ...mockChatMessage,
143
+ id: "new-chat-message-id",
144
+ body: body.body,
145
+ createdDateTime: new Date().toISOString(),
146
+ };
147
+ return HttpResponse.json(response);
148
+ }
149
+ return new HttpResponse(null, { status: 404 });
150
+ }),
151
+ http.post("https://graph.microsoft.com/v1.0/me/chats", async ({ request }) => {
152
+ const body = (await request.json());
153
+ const response = {
154
+ ...mockChat,
155
+ id: "new-chat-id",
156
+ topic: body.topic,
157
+ chatType: body.chatType,
158
+ };
159
+ return HttpResponse.json(response);
160
+ }),
161
+ // Search endpoints
162
+ http.post("https://graph.microsoft.com/v1.0/search/query", async ({ request }) => {
163
+ const body = (await request.json());
164
+ const searchRequest = body.requests[0];
165
+ const response = {
166
+ value: [
167
+ {
168
+ searchTerms: [searchRequest.query.queryString],
169
+ hitsContainers: [
170
+ {
171
+ hits: [
172
+ {
173
+ hitId: "search-hit-1",
174
+ rank: 1,
175
+ summary: "Test message found in search",
176
+ resource: {
177
+ "@odata.type": "#microsoft.graph.chatMessage",
178
+ id: "search-message-id",
179
+ createdDateTime: "2024-01-01T12:00:00Z",
180
+ from: {
181
+ user: {
182
+ displayName: "Test User",
183
+ id: "test-user-id",
184
+ },
185
+ },
186
+ body: {
187
+ content: "Test search result message",
188
+ contentType: "text",
189
+ },
190
+ chatId: "test-chat-id",
191
+ },
192
+ },
193
+ ],
194
+ total: 1,
195
+ moreResultsAvailable: false,
196
+ },
197
+ ],
198
+ },
199
+ ],
200
+ };
201
+ return HttpResponse.json(response);
202
+ }),
203
+ // Error scenarios for testing
204
+ http.get("https://graph.microsoft.com/v1.0/error/401", () => {
205
+ return HttpResponse.json({
206
+ error: {
207
+ code: "InvalidAuthenticationToken",
208
+ message: "Access token is empty.",
209
+ },
210
+ }, { status: 401 });
211
+ }),
212
+ http.get("https://graph.microsoft.com/v1.0/error/403", () => {
213
+ return HttpResponse.json({
214
+ error: {
215
+ code: "Forbidden",
216
+ message: "Insufficient privileges to complete the operation.",
217
+ },
218
+ }, { status: 403 });
219
+ }),
220
+ http.get("https://graph.microsoft.com/v1.0/error/429", () => {
221
+ return HttpResponse.json({
222
+ error: {
223
+ code: "TooManyRequests",
224
+ message: "Too many requests",
225
+ },
226
+ }, { status: 429, headers: { "Retry-After": "30" } });
227
+ }),
228
+ ];
229
+ // Setup MSW server
230
+ export const server = setupServer(...graphApiHandlers);
231
+ // Global test setup
232
+ beforeEach(() => {
233
+ // Reset all mocks before each test
234
+ vi.clearAllMocks();
235
+ // Mock file system operations for token storage
236
+ vi.mock("node:fs", async () => {
237
+ const actual = (await vi.importActual("node:fs"));
238
+ return {
239
+ ...actual,
240
+ promises: {
241
+ ...(actual.promises || {}),
242
+ readFile: vi.fn(),
243
+ writeFile: vi.fn(),
244
+ unlink: vi.fn(),
245
+ access: vi.fn(),
246
+ },
247
+ };
248
+ });
249
+ // Mock Azure identity
250
+ vi.mock("@azure/identity", () => ({
251
+ DeviceCodeCredential: vi.fn(),
252
+ }));
253
+ });
254
+ afterEach(() => {
255
+ // Clean up after each test
256
+ vi.resetAllMocks();
257
+ });
258
+ // Helper function to create mock authenticated GraphService
259
+ export function createMockGraphService() {
260
+ const GraphService = vi.fn().mockImplementation(() => ({
261
+ getInstance: vi.fn().mockReturnThis(),
262
+ getAuthStatus: vi.fn().mockResolvedValue({
263
+ isAuthenticated: true,
264
+ userPrincipalName: mockUser.userPrincipalName,
265
+ displayName: mockUser.displayName,
266
+ expiresAt: new Date(Date.now() + 3600000).toISOString(),
267
+ }),
268
+ getClient: vi.fn().mockResolvedValue({
269
+ api: vi.fn().mockReturnValue({
270
+ get: vi.fn(),
271
+ post: vi.fn(),
272
+ filter: vi.fn().mockReturnThis(),
273
+ }),
274
+ }),
275
+ isAuthenticated: vi.fn().mockReturnValue(true),
276
+ }));
277
+ return new GraphService();
278
+ }
279
+ // Helper function to create mock unauthenticated GraphService
280
+ export function createMockUnauthenticatedGraphService() {
281
+ const GraphService = vi.fn().mockImplementation(() => ({
282
+ getInstance: vi.fn().mockReturnThis(),
283
+ getAuthStatus: vi.fn().mockResolvedValue({
284
+ isAuthenticated: false,
285
+ }),
286
+ getClient: vi.fn().mockRejectedValue(new Error("Not authenticated")),
287
+ isAuthenticated: vi.fn().mockReturnValue(false),
288
+ }));
289
+ return new GraphService();
290
+ }
291
+ // Helper function to create mock MCP server
292
+ export function createMockMcpServer() {
293
+ const tools = new Map();
294
+ return {
295
+ tool: vi.fn().mockImplementation((name, schema, handler) => {
296
+ tools.set(name, { schema, handler });
297
+ }),
298
+ connect: vi.fn(),
299
+ getTool: (name) => tools.get(name),
300
+ getAllTools: () => Array.from(tools.keys()),
301
+ };
302
+ }
303
+ // Helper function to test MCP tool execution
304
+ export async function testMcpTool(toolName, parameters, mockServer, expectedResult) {
305
+ const tool = mockServer.getTool(toolName);
306
+ if (!tool) {
307
+ throw new Error(`Tool ${toolName} not found`);
308
+ }
309
+ const result = await tool.handler(parameters);
310
+ if (expectedResult) {
311
+ expect(result).toEqual(expectedResult);
312
+ }
313
+ return result;
314
+ }
315
+ //# sourceMappingURL=setup.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"setup.js","sourceRoot":"","sources":["../../src/test-utils/setup.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=vitest.setup.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vitest.setup.d.ts","sourceRoot":"","sources":["../../src/test-utils/vitest.setup.ts"],"names":[],"mappings":""}
@@ -0,0 +1,30 @@
1
+ import { afterAll, afterEach, beforeAll } from "vitest";
2
+ import { server } from "./setup.js";
3
+ // Start MSW server before all tests
4
+ beforeAll(() => {
5
+ server.listen({ onUnhandledRequest: "error" });
6
+ });
7
+ // Reset handlers after each test
8
+ afterEach(() => {
9
+ server.resetHandlers();
10
+ });
11
+ // Clean up after all tests
12
+ afterAll(() => {
13
+ server.close();
14
+ });
15
+ // Global test environment setup
16
+ global.TextEncoder = TextEncoder;
17
+ global.TextDecoder = TextDecoder;
18
+ // Mock console methods to reduce noise in tests
19
+ const originalError = console.error;
20
+ console.error = (...args) => {
21
+ // Suppress specific known warnings/errors during tests
22
+ if (typeof args[0] === "string" &&
23
+ (args[0].includes("MSW") ||
24
+ args[0].includes("Warning") ||
25
+ args[0].includes("Failed to initialize"))) {
26
+ return;
27
+ }
28
+ originalError.apply(console, args);
29
+ };
30
+ //# sourceMappingURL=vitest.setup.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vitest.setup.js","sourceRoot":"","sources":["../../src/test-utils/vitest.setup.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AACxD,OAAO,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AAEpC,oCAAoC;AACpC,SAAS,CAAC,GAAG,EAAE;IACb,MAAM,CAAC,MAAM,CAAC,EAAE,kBAAkB,EAAE,OAAO,EAAE,CAAC,CAAC;AACjD,CAAC,CAAC,CAAC;AAEH,iCAAiC;AACjC,SAAS,CAAC,GAAG,EAAE;IACb,MAAM,CAAC,aAAa,EAAE,CAAC;AACzB,CAAC,CAAC,CAAC;AAEH,2BAA2B;AAC3B,QAAQ,CAAC,GAAG,EAAE;IACZ,MAAM,CAAC,KAAK,EAAE,CAAC;AACjB,CAAC,CAAC,CAAC;AAEH,gCAAgC;AAChC,MAAM,CAAC,WAAW,GAAG,WAAW,CAAC;AACjC,MAAM,CAAC,WAAW,GAAG,WAAW,CAAC;AAEjC,gDAAgD;AAChD,MAAM,aAAa,GAAG,OAAO,CAAC,KAAK,CAAC;AACpC,OAAO,CAAC,KAAK,GAAG,CAAC,GAAG,IAAW,EAAE,EAAE;IACjC,uDAAuD;IACvD,IACE,OAAO,IAAI,CAAC,CAAC,CAAC,KAAK,QAAQ;QAC3B,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC;YACtB,IAAI,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,SAAS,CAAC;YAC3B,IAAI,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,sBAAsB,CAAC,CAAC,EAC3C,CAAC;QACD,OAAO;IACT,CAAC;IACD,aAAa,CAAC,KAAK,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;AACrC,CAAC,CAAC"}
@@ -7,7 +7,7 @@ export function registerAuthTools(server, graphService) {
7
7
  {
8
8
  type: "text",
9
9
  text: status.isAuthenticated
10
- ? `✅ Authenticated as ${status.displayName} (${status.userPrincipalName})`
10
+ ? `✅ Authenticated as ${status.displayName || "Unknown User"} (${status.userPrincipalName || "No email available"})`
11
11
  : "❌ Not authenticated. Please run: npx @floriscornel/teams-mcp@latest authenticate",
12
12
  },
13
13
  ],
@@ -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,CAAC,aAAa,EAAE,EAAE,EAAE,KAAK,IAAI,EAAE;QACxC,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,KAAK,MAAM,CAAC,iBAAiB,GAAG;wBAC1E,CAAC,CAAC,kFAAkF;iBACvF;aACF;SACF,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC"}
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,CAAC,aAAa,EAAE,EAAE,EAAE,KAAK,IAAI,EAAE;QACxC,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,CAAC,CAAC;AACL,CAAC"}
package/package.json CHANGED
@@ -1,33 +1,33 @@
1
1
  {
2
2
  "name": "@floriscornel/teams-mcp",
3
- "version": "0.1.0",
3
+ "version": "0.2.0",
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": [
11
- "dist/**/*",
12
- "README.md",
13
- "package.json"
14
- ],
10
+ "files": ["dist/**/*", "README.md", "package.json"],
15
11
  "publishConfig": {
16
12
  "access": "public"
17
13
  },
18
14
  "scripts": {
19
- "build": "bun run clean && bun run compile",
15
+ "build": "npm run clean && npm run compile",
20
16
  "clean": "rm -rf dist",
21
17
  "compile": "tsc",
22
- "dev": "bun run --hot src/index.ts",
18
+ "dev": "node --watch src/index.ts",
23
19
  "auth": "node dist/index.js authenticate",
24
20
  "auth:check": "node dist/index.js check",
25
21
  "auth:logout": "node dist/index.js logout",
22
+ "test": "vitest run",
23
+ "test:watch": "vitest",
24
+ "test:coverage": "vitest run --coverage",
25
+ "test:ui": "vitest --ui",
26
26
  "lint": "biome check .",
27
27
  "lint:fix": "biome check --apply .",
28
28
  "format": "biome format --write .",
29
- "bump": "bunx npm-check-updates -u -p bun",
30
- "prepublishOnly": "bun run build"
29
+ "bump": "npx npm-check-updates -u",
30
+ "prepublishOnly": "npm run build"
31
31
  },
32
32
  "keywords": ["mcp", "microsoft-graph", "teams", "model-context-protocol"],
33
33
  "author": "Floris Cornel",
@@ -50,10 +50,37 @@
50
50
  "devDependencies": {
51
51
  "@biomejs/biome": "^1.9.4",
52
52
  "@types/node": "^22.15.29",
53
- "typescript": "^5.8.3"
53
+ "@types/sinon": "^17.0.4",
54
+ "@vitest/coverage-v8": "^3.2.2",
55
+ "msw": "^2.9.0",
56
+ "nock": "^14.0.5",
57
+ "sinon": "^20.0.0",
58
+ "typescript": "^5.8.3",
59
+ "vitest": "^3.2.2"
60
+ },
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"
54
82
  },
55
83
  "engines": {
56
- "node": ">=18.0.0",
57
- "bun": ">=1.0.0"
84
+ "node": ">=18.0.0"
58
85
  }
59
86
  }