@meetbot/mcp 1.1.0 → 1.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.
Files changed (40) hide show
  1. package/README.md +30 -2
  2. package/dist/__tests__/meetbot-client.test.js +12 -14
  3. package/dist/__tests__/meetbot-client.test.js.map +1 -1
  4. package/dist/__tests__/types.test.js +11 -13
  5. package/dist/__tests__/types.test.js.map +1 -1
  6. package/dist/cli-http.js +12 -24
  7. package/dist/cli-http.js.map +1 -1
  8. package/dist/cli-streamable.d.ts +3 -0
  9. package/dist/cli-streamable.d.ts.map +1 -0
  10. package/dist/cli-streamable.js +36 -0
  11. package/dist/cli-streamable.js.map +1 -0
  12. package/dist/cli.js +2 -4
  13. package/dist/cli.js.map +1 -1
  14. package/dist/in-memory-event-store.d.ts +14 -0
  15. package/dist/in-memory-event-store.d.ts.map +1 -0
  16. package/dist/in-memory-event-store.js +33 -0
  17. package/dist/in-memory-event-store.js.map +1 -0
  18. package/dist/index.d.ts +1 -1
  19. package/dist/index.d.ts.map +1 -1
  20. package/dist/index.js +4 -21
  21. package/dist/index.js.map +1 -1
  22. package/dist/mcp-server-streamable.d.ts +16 -0
  23. package/dist/mcp-server-streamable.d.ts.map +1 -0
  24. package/dist/mcp-server-streamable.js +347 -0
  25. package/dist/mcp-server-streamable.js.map +1 -0
  26. package/dist/mcp-server.js +11 -15
  27. package/dist/mcp-server.js.map +1 -1
  28. package/dist/meetbot-client.d.ts +1 -1
  29. package/dist/meetbot-client.d.ts.map +1 -1
  30. package/dist/meetbot-client.js +9 -16
  31. package/dist/meetbot-client.js.map +1 -1
  32. package/dist/schemas.js +50 -53
  33. package/dist/schemas.js.map +1 -1
  34. package/dist/types.js +1 -2
  35. package/dist/types.js.map +1 -1
  36. package/package.json +12 -7
  37. package/dist/mcp-server-http.d.ts +0 -26
  38. package/dist/mcp-server-http.d.ts.map +0 -1
  39. package/dist/mcp-server-http.js +0 -350
  40. package/dist/mcp-server-http.js.map +0 -1
package/dist/schemas.js CHANGED
@@ -1,68 +1,65 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.MeetbotConfigSchema = exports.ApiErrorSchema = exports.GetInfoParamsSchema = exports.GetSlotsParamsSchema = exports.BookSlotRequestSchema = exports.SlotsSchema = exports.SlotDetailsSchema = exports.PagesSchema = exports.SchedulingPageSchema = exports.PageInfoSchema = exports.BookSlotSchema = void 0;
4
- const zod_1 = require("zod");
1
+ import { z } from 'zod';
5
2
  /**
6
3
  * Zod schemas for runtime validation of Meet.bot API data
7
4
  */
8
- exports.BookSlotSchema = zod_1.z.object({
9
- success: zod_1.z.boolean(),
10
- page: zod_1.z.string().url(),
11
- guest_email: zod_1.z.string().email(),
12
- guest_name: zod_1.z.string().min(1),
13
- notes: zod_1.z.string().optional(),
14
- start: zod_1.z.string().datetime(),
15
- ical_uid: zod_1.z.string(),
5
+ export const BookSlotSchema = z.object({
6
+ success: z.boolean(),
7
+ page: z.string().url(),
8
+ guest_email: z.string().email(),
9
+ guest_name: z.string().min(1),
10
+ notes: z.string().optional(),
11
+ start: z.string().datetime(),
12
+ ical_uid: z.string(),
16
13
  });
17
- exports.PageInfoSchema = zod_1.z.object({
18
- title: zod_1.z.string(),
19
- duration: zod_1.z.number().int().positive(),
20
- url: zod_1.z.string().url(),
21
- owner_name: zod_1.z.string(),
22
- max_days_into_the_future: zod_1.z.number().int().positive(),
14
+ export const PageInfoSchema = z.object({
15
+ title: z.string(),
16
+ duration: z.number().int().positive(),
17
+ url: z.string().url(),
18
+ owner_name: z.string(),
19
+ max_days_into_the_future: z.number().int().positive(),
23
20
  });
24
- exports.SchedulingPageSchema = zod_1.z.object({
25
- title: zod_1.z.string(),
26
- duration: zod_1.z.number().int().positive(),
27
- url: zod_1.z.string().url(),
21
+ export const SchedulingPageSchema = z.object({
22
+ title: z.string(),
23
+ duration: z.number().int().positive(),
24
+ url: z.string().url(),
28
25
  });
29
- exports.PagesSchema = zod_1.z.object({
30
- email: zod_1.z.string().email(),
31
- pages: zod_1.z.array(exports.SchedulingPageSchema),
26
+ export const PagesSchema = z.object({
27
+ email: z.string().email(),
28
+ pages: z.array(SchedulingPageSchema),
32
29
  });
33
- exports.SlotDetailsSchema = zod_1.z.object({
34
- start: zod_1.z.string().datetime(),
35
- url: zod_1.z.string().url().optional(),
30
+ export const SlotDetailsSchema = z.object({
31
+ start: z.string().datetime(),
32
+ url: z.string().url().optional(),
36
33
  });
37
- exports.SlotsSchema = zod_1.z.object({
38
- count: zod_1.z.number().int().nonnegative(),
39
- duration: zod_1.z.number().int().positive(),
40
- slots: zod_1.z.array(exports.SlotDetailsSchema),
34
+ export const SlotsSchema = z.object({
35
+ count: z.number().int().nonnegative(),
36
+ duration: z.number().int().positive(),
37
+ slots: z.array(SlotDetailsSchema),
41
38
  });
42
- exports.BookSlotRequestSchema = zod_1.z.object({
43
- page: zod_1.z.string().url(),
44
- guest_email: zod_1.z.string().email(),
45
- guest_name: zod_1.z.string().min(1),
46
- notes: zod_1.z.string().optional(),
47
- start: zod_1.z.string().datetime(),
39
+ export const BookSlotRequestSchema = z.object({
40
+ page: z.string().url(),
41
+ guest_email: z.string().email(),
42
+ guest_name: z.string().min(1),
43
+ notes: z.string().optional(),
44
+ start: z.string().datetime(),
48
45
  });
49
- exports.GetSlotsParamsSchema = zod_1.z.object({
50
- page: zod_1.z.string().url(),
51
- count: zod_1.z.number().int().positive().optional(),
52
- start: zod_1.z.string().regex(/^\d{4}-\d{2}-\d{2}$/).optional(),
53
- end: zod_1.z.string().regex(/^\d{4}-\d{2}-\d{2}$/).optional(),
54
- timezone: zod_1.z.string().min(1).optional(),
55
- booking_link: zod_1.z.boolean().optional(),
46
+ export const GetSlotsParamsSchema = z.object({
47
+ page: z.string().url(),
48
+ count: z.number().int().positive().optional(),
49
+ start: z.string().regex(/^\d{4}-\d{2}-\d{2}$/).optional(),
50
+ end: z.string().regex(/^\d{4}-\d{2}-\d{2}$/).optional(),
51
+ timezone: z.string().min(1).optional(),
52
+ booking_link: z.boolean().optional(),
56
53
  });
57
- exports.GetInfoParamsSchema = zod_1.z.object({
58
- page: zod_1.z.string().url(),
54
+ export const GetInfoParamsSchema = z.object({
55
+ page: z.string().url(),
59
56
  });
60
- exports.ApiErrorSchema = zod_1.z.object({
61
- success: zod_1.z.literal(false),
62
- error: zod_1.z.string(),
63
- errors: zod_1.z.record(zod_1.z.array(zod_1.z.string())).optional(),
57
+ export const ApiErrorSchema = z.object({
58
+ success: z.literal(false),
59
+ error: z.string(),
60
+ errors: z.record(z.array(z.string())).optional(),
64
61
  });
65
- exports.MeetbotConfigSchema = zod_1.z.object({
66
- authToken: zod_1.z.string().optional(),
62
+ export const MeetbotConfigSchema = z.object({
63
+ authToken: z.string().optional(),
67
64
  });
68
65
  //# sourceMappingURL=schemas.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"schemas.js","sourceRoot":"","sources":["../src/schemas.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"schemas.js","sourceRoot":"","sources":["../src/schemas.ts"],"names":[],"mappings":"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"}
package/dist/types.js CHANGED
@@ -1,7 +1,6 @@
1
- "use strict";
2
1
  /**
3
2
  * Type definitions for the Meet.bot Booking Page API
4
3
  * Based on OpenAPI 3.0.3 specification
5
4
  */
6
- Object.defineProperty(exports, "__esModule", { value: true });
5
+ export {};
7
6
  //# sourceMappingURL=types.js.map
package/dist/types.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":";AAAA;;;GAGG"}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;;GAGG"}
package/package.json CHANGED
@@ -1,18 +1,21 @@
1
1
  {
2
2
  "name": "@meetbot/mcp",
3
- "version": "1.1.0",
3
+ "version": "1.2.0",
4
4
  "description": "Model Context Protocol (MCP) server for Meet.bot booking page API",
5
+ "type": "module",
5
6
  "main": "dist/index.js",
6
7
  "types": "dist/index.d.ts",
7
- "bin": {
8
- "meetbot-mcp": "dist/cli.js",
9
- "meetbot-mcp-http": "dist/cli-http.js"
10
- },
8
+ "bin": {
9
+ "meetbot-mcp": "dist/cli.js",
10
+ "meetbot-mcp-http": "dist/cli-http.js",
11
+ "meetbot-mcp-streamable": "dist/cli-streamable.js"
12
+ },
11
13
  "scripts": {
12
14
  "build": "tsc",
13
15
  "dev": "tsc --watch",
14
16
  "start": "node dist/cli.js",
15
17
  "start:http": "node dist/cli-http.js",
18
+ "start:streamable": "node dist/cli-streamable.js",
16
19
  "test": "jest",
17
20
  "test:watch": "jest --watch",
18
21
  "lint": "eslint src/**/*.ts",
@@ -40,8 +43,10 @@
40
43
  },
41
44
  "homepage": "https://gitlab.com/meetbot/meetbot-mcp",
42
45
  "dependencies": {
43
- "@modelcontextprotocol/sdk": "^0.4.0",
46
+ "@modelcontextprotocol/sdk": "^1.20.1",
47
+ "@types/express": "^5.0.3",
44
48
  "axios": "^1.6.0",
49
+ "express": "^5.1.0",
45
50
  "zod": "^3.22.0"
46
51
  },
47
52
  "devDependencies": {
@@ -62,4 +67,4 @@
62
67
  "README.md",
63
68
  "LICENSE"
64
69
  ]
65
- }
70
+ }
@@ -1,26 +0,0 @@
1
- import { IncomingMessage, ServerResponse } from 'http';
2
- /**
3
- * HTTP-based MCP Server for Meet.bot Booking Page API with SSE transport
4
- */
5
- export declare class MeetbotMCPServerHTTP {
6
- private server;
7
- private transports;
8
- private clients;
9
- constructor();
10
- private setupToolHandlers;
11
- private handleConfigureMeetbot;
12
- private handleGetSchedulingPages;
13
- private handleGetPageInfo;
14
- private handleGetAvailableSlots;
15
- private handleBookMeeting;
16
- private handleHealthCheck;
17
- /**
18
- * Authenticate incoming requests using Bearer token
19
- */
20
- private authenticateRequest;
21
- /**
22
- * Handle incoming HTTP requests
23
- */
24
- handleRequest(req: IncomingMessage, res: ServerResponse): Promise<void>;
25
- }
26
- //# sourceMappingURL=mcp-server-http.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"mcp-server-http.d.ts","sourceRoot":"","sources":["../src/mcp-server-http.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,MAAM,CAAC;AAEvD;;GAEG;AACH,qBAAa,oBAAoB;IAC/B,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,UAAU,CAA8C;IAChE,OAAO,CAAC,OAAO,CAAyC;;IAaxD,OAAO,CAAC,iBAAiB;YAqKX,sBAAsB;YAgBtB,wBAAwB;YAwBxB,iBAAiB;YAkBjB,uBAAuB;YA0BvB,iBAAiB;YAwBjB,iBAAiB;IAoB/B;;OAEG;YACW,mBAAmB;IAkBjC;;OAEG;IACG,aAAa,CACjB,GAAG,EAAE,eAAe,EACpB,GAAG,EAAE,cAAc,GAClB,OAAO,CAAC,IAAI,CAAC;CA+EjB"}
@@ -1,350 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.MeetbotMCPServerHTTP = void 0;
4
- const index_js_1 = require("@modelcontextprotocol/sdk/server/index.js");
5
- const sse_js_1 = require("@modelcontextprotocol/sdk/server/sse.js");
6
- const types_js_1 = require("@modelcontextprotocol/sdk/types.js");
7
- const meetbot_client_js_1 = require("./meetbot-client.js");
8
- /**
9
- * HTTP-based MCP Server for Meet.bot Booking Page API with SSE transport
10
- */
11
- class MeetbotMCPServerHTTP {
12
- server;
13
- transports = new Map();
14
- clients = new Map();
15
- constructor() {
16
- this.server = new index_js_1.Server({
17
- name: 'meetbot-mcp',
18
- version: '1.1.0',
19
- });
20
- this.setupToolHandlers();
21
- }
22
- setupToolHandlers() {
23
- // List available tools
24
- this.server.setRequestHandler(types_js_1.ListToolsRequestSchema, async () => {
25
- return {
26
- tools: [
27
- {
28
- name: 'configure_meetbot',
29
- description: 'Configure the Meet.bot API client with authentication',
30
- inputSchema: {
31
- type: 'object',
32
- properties: {
33
- authToken: {
34
- type: 'string',
35
- description: 'Bearer token for authentication (optional)',
36
- },
37
- },
38
- required: [],
39
- },
40
- },
41
- {
42
- name: 'get_scheduling_pages',
43
- description: 'Get all scheduling pages for the authenticated user',
44
- inputSchema: {
45
- type: 'object',
46
- properties: {},
47
- },
48
- },
49
- {
50
- name: 'get_page_info',
51
- description: 'Get information about a specific scheduling page',
52
- inputSchema: {
53
- type: 'object',
54
- properties: {
55
- page: {
56
- type: 'string',
57
- description: 'The URL of the scheduling page',
58
- },
59
- },
60
- required: ['page'],
61
- },
62
- },
63
- {
64
- name: 'get_available_slots',
65
- description: 'Get available booking slots for a scheduling page',
66
- inputSchema: {
67
- type: 'object',
68
- properties: {
69
- page: {
70
- type: 'string',
71
- description: 'The URL of the scheduling page',
72
- },
73
- count: {
74
- type: 'number',
75
- description: 'Maximum number of slots to return',
76
- },
77
- start: {
78
- type: 'string',
79
- description: 'Start date in YYYY-MM-DD format',
80
- },
81
- end: {
82
- type: 'string',
83
- description: 'End date in YYYY-MM-DD format',
84
- },
85
- timezone: {
86
- type: 'string',
87
- description: 'Timezone in IANA format (e.g., America/New_York)',
88
- },
89
- booking_link: {
90
- type: 'boolean',
91
- description: 'Include shareable booking links',
92
- },
93
- },
94
- required: ['page'],
95
- },
96
- },
97
- {
98
- name: 'book_meeting',
99
- description: 'Book a new meeting slot',
100
- inputSchema: {
101
- type: 'object',
102
- properties: {
103
- page: {
104
- type: 'string',
105
- description: 'The URL of the scheduling page',
106
- },
107
- guest_email: {
108
- type: 'string',
109
- description: 'Email address of the guest',
110
- },
111
- guest_name: {
112
- type: 'string',
113
- description: 'Name of the guest',
114
- },
115
- notes: {
116
- type: 'string',
117
- description: 'Additional notes for the meeting',
118
- },
119
- start: {
120
- type: 'string',
121
- description: 'Start time in ISO 8601 format',
122
- },
123
- },
124
- required: ['page', 'guest_email', 'guest_name', 'start'],
125
- },
126
- },
127
- {
128
- name: 'health_check',
129
- description: 'Check if the Meet.bot API client is properly configured and can connect',
130
- inputSchema: {
131
- type: 'object',
132
- properties: {},
133
- },
134
- },
135
- ],
136
- };
137
- });
138
- // Handle tool calls
139
- this.server.setRequestHandler(types_js_1.CallToolRequestSchema, async (request) => {
140
- const { name, arguments: args } = request.params;
141
- // Get the client for this session
142
- const sessionId = request.sessionId;
143
- const client = sessionId ? this.clients.get(sessionId) || null : null;
144
- try {
145
- switch (name) {
146
- case 'configure_meetbot':
147
- return await this.handleConfigureMeetbot(args, sessionId);
148
- case 'get_scheduling_pages':
149
- return await this.handleGetSchedulingPages(client);
150
- case 'get_page_info':
151
- return await this.handleGetPageInfo(args, client);
152
- case 'get_available_slots':
153
- return await this.handleGetAvailableSlots(args, client);
154
- case 'book_meeting':
155
- return await this.handleBookMeeting(args, client);
156
- case 'health_check':
157
- return await this.handleHealthCheck(client);
158
- default:
159
- throw new Error(`Unknown tool: ${name}`);
160
- }
161
- }
162
- catch (error) {
163
- return {
164
- content: [
165
- {
166
- type: 'text',
167
- text: `Error: ${error instanceof Error ? error.message : String(error)}`,
168
- },
169
- ],
170
- isError: true,
171
- };
172
- }
173
- });
174
- }
175
- async handleConfigureMeetbot(args, sessionId) {
176
- const client = new meetbot_client_js_1.MeetbotClient(args);
177
- this.clients.set(sessionId, client);
178
- return {
179
- content: [
180
- {
181
- type: 'text',
182
- text: 'Meet.bot API client configured successfully.',
183
- },
184
- ],
185
- };
186
- }
187
- async handleGetSchedulingPages(client) {
188
- if (!client) {
189
- throw new Error('Meet.bot client not configured. Please run configure_meetbot first.');
190
- }
191
- const pages = await client.getPages();
192
- return {
193
- content: [
194
- {
195
- type: 'text',
196
- text: `Found ${pages.pages.length} scheduling pages for ${pages.email}:\n\n${pages.pages
197
- .map((page) => `• ${page.title} (${page.duration} min) - ${page.url}`)
198
- .join('\n')}`,
199
- },
200
- ],
201
- };
202
- }
203
- async handleGetPageInfo(args, client) {
204
- if (!client) {
205
- throw new Error('Meet.bot client not configured. Please run configure_meetbot first.');
206
- }
207
- const pageInfo = await client.getPageInfo(args);
208
- return {
209
- content: [
210
- {
211
- type: 'text',
212
- text: `Page Information:\n\nTitle: ${pageInfo.title}\nDuration: ${pageInfo.duration} minutes\nOwner: ${pageInfo.owner_name}\nMax days ahead: ${pageInfo.max_days_into_the_future}\nURL: ${pageInfo.url}`,
213
- },
214
- ],
215
- };
216
- }
217
- async handleGetAvailableSlots(args, client) {
218
- if (!client) {
219
- throw new Error('Meet.bot client not configured. Please run configure_meetbot first.');
220
- }
221
- const slots = await client.getSlots(args);
222
- return {
223
- content: [
224
- {
225
- type: 'text',
226
- text: `Found ${slots.count} available slots (${slots.duration} min each):\n\n${slots.slots
227
- .map((slot) => {
228
- const date = new Date(slot.start).toLocaleString();
229
- const urlInfo = slot.url ? `\n Booking link: ${slot.url}` : '';
230
- return `• ${date}${urlInfo}`;
231
- })
232
- .join('\n\n')}`,
233
- },
234
- ],
235
- };
236
- }
237
- async handleBookMeeting(args, client) {
238
- if (!client) {
239
- throw new Error('Meet.bot client not configured. Please run configure_meetbot first.');
240
- }
241
- const booking = await client.bookSlot(args);
242
- return {
243
- content: [
244
- {
245
- type: 'text',
246
- text: `Meeting booked successfully!\n\nGuest: ${booking.guest_name} (${booking.guest_email})\nStart: ${new Date(booking.start).toLocaleString()}\nCalendar ID: ${booking.ical_uid}\nPage: ${booking.page}`,
247
- },
248
- ],
249
- };
250
- }
251
- async handleHealthCheck(client) {
252
- if (!client) {
253
- throw new Error('Meet.bot client not configured. Please run configure_meetbot first.');
254
- }
255
- const isHealthy = await client.healthCheck();
256
- return {
257
- content: [
258
- {
259
- type: 'text',
260
- text: isHealthy
261
- ? '✅ Meet.bot API client is healthy and can connect to the API.'
262
- : '❌ Meet.bot API client cannot connect to the API. Please check your configuration.',
263
- },
264
- ],
265
- };
266
- }
267
- /**
268
- * Authenticate incoming requests using Bearer token
269
- */
270
- async authenticateRequest(req) {
271
- const authHeader = req.headers.authorization;
272
- if (!authHeader) {
273
- return null;
274
- }
275
- // Extract bearer token
276
- const match = authHeader.match(/^Bearer\s+(.+)$/i);
277
- if (!match || !match[1]) {
278
- return null;
279
- }
280
- return match[1];
281
- }
282
- /**
283
- * Handle incoming HTTP requests
284
- */
285
- async handleRequest(req, res) {
286
- const url = new URL(req.url || '/', `http://${req.headers.host}`);
287
- // Authenticate the request
288
- const authToken = await this.authenticateRequest(req);
289
- if (!authToken) {
290
- res.writeHead(401, { 'Content-Type': 'application/json' });
291
- res.end(JSON.stringify({
292
- error: 'Unauthorized',
293
- message: 'Missing or invalid Authorization header. Use: Authorization: Bearer <your-token>',
294
- }));
295
- return;
296
- }
297
- // Handle SSE connection (GET request)
298
- if (req.method === 'GET' && url.pathname === '/sse') {
299
- const transport = new sse_js_1.SSEServerTransport('/messages', res);
300
- const sessionId = transport.sessionId;
301
- // Store transport and create client with the authenticated token
302
- this.transports.set(sessionId, transport);
303
- const client = new meetbot_client_js_1.MeetbotClient({ authToken });
304
- this.clients.set(sessionId, client);
305
- // Attach session ID to requests
306
- const originalSetRequestHandler = this.server.setRequestHandler.bind(this.server);
307
- this.server.setRequestHandler = ((schema, handler) => {
308
- return originalSetRequestHandler(schema, async (request) => {
309
- request.sessionId = sessionId;
310
- return handler(request);
311
- });
312
- });
313
- await this.server.connect(transport);
314
- // Cleanup on close
315
- transport.onclose = () => {
316
- this.transports.delete(sessionId);
317
- this.clients.delete(sessionId);
318
- };
319
- return;
320
- }
321
- // Handle POST messages
322
- if (req.method === 'POST' && url.pathname === '/messages') {
323
- const sessionId = url.searchParams.get('sessionId');
324
- if (!sessionId) {
325
- res.writeHead(400, { 'Content-Type': 'application/json' });
326
- res.end(JSON.stringify({ error: 'Missing sessionId' }));
327
- return;
328
- }
329
- const transport = this.transports.get(sessionId);
330
- if (!transport) {
331
- res.writeHead(404, { 'Content-Type': 'application/json' });
332
- res.end(JSON.stringify({ error: 'Session not found' }));
333
- return;
334
- }
335
- await transport.handlePostMessage(req, res);
336
- return;
337
- }
338
- // Health check endpoint
339
- if (req.method === 'GET' && url.pathname === '/health') {
340
- res.writeHead(200, { 'Content-Type': 'application/json' });
341
- res.end(JSON.stringify({ status: 'ok', service: 'meetbot-mcp' }));
342
- return;
343
- }
344
- // 404 for other routes
345
- res.writeHead(404, { 'Content-Type': 'application/json' });
346
- res.end(JSON.stringify({ error: 'Not found' }));
347
- }
348
- }
349
- exports.MeetbotMCPServerHTTP = MeetbotMCPServerHTTP;
350
- //# sourceMappingURL=mcp-server-http.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"mcp-server-http.js","sourceRoot":"","sources":["../src/mcp-server-http.ts"],"names":[],"mappings":"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"}