@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.
- package/README.md +30 -2
- package/dist/__tests__/meetbot-client.test.js +12 -14
- package/dist/__tests__/meetbot-client.test.js.map +1 -1
- package/dist/__tests__/types.test.js +11 -13
- package/dist/__tests__/types.test.js.map +1 -1
- package/dist/cli-http.js +12 -24
- package/dist/cli-http.js.map +1 -1
- package/dist/cli-streamable.d.ts +3 -0
- package/dist/cli-streamable.d.ts.map +1 -0
- package/dist/cli-streamable.js +36 -0
- package/dist/cli-streamable.js.map +1 -0
- package/dist/cli.js +2 -4
- package/dist/cli.js.map +1 -1
- package/dist/in-memory-event-store.d.ts +14 -0
- package/dist/in-memory-event-store.d.ts.map +1 -0
- package/dist/in-memory-event-store.js +33 -0
- package/dist/in-memory-event-store.js.map +1 -0
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -21
- package/dist/index.js.map +1 -1
- package/dist/mcp-server-streamable.d.ts +16 -0
- package/dist/mcp-server-streamable.d.ts.map +1 -0
- package/dist/mcp-server-streamable.js +347 -0
- package/dist/mcp-server-streamable.js.map +1 -0
- package/dist/mcp-server.js +11 -15
- package/dist/mcp-server.js.map +1 -1
- package/dist/meetbot-client.d.ts +1 -1
- package/dist/meetbot-client.d.ts.map +1 -1
- package/dist/meetbot-client.js +9 -16
- package/dist/meetbot-client.js.map +1 -1
- package/dist/schemas.js +50 -53
- package/dist/schemas.js.map +1 -1
- package/dist/types.js +1 -2
- package/dist/types.js.map +1 -1
- package/package.json +12 -7
- package/dist/mcp-server-http.d.ts +0 -26
- package/dist/mcp-server-http.d.ts.map +0 -1
- package/dist/mcp-server-http.js +0 -350
- package/dist/mcp-server-http.js.map +0 -1
package/dist/schemas.js
CHANGED
|
@@ -1,68 +1,65 @@
|
|
|
1
|
-
|
|
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
|
-
|
|
9
|
-
success:
|
|
10
|
-
page:
|
|
11
|
-
guest_email:
|
|
12
|
-
guest_name:
|
|
13
|
-
notes:
|
|
14
|
-
start:
|
|
15
|
-
ical_uid:
|
|
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
|
-
|
|
18
|
-
title:
|
|
19
|
-
duration:
|
|
20
|
-
url:
|
|
21
|
-
owner_name:
|
|
22
|
-
max_days_into_the_future:
|
|
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
|
-
|
|
25
|
-
title:
|
|
26
|
-
duration:
|
|
27
|
-
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
|
-
|
|
30
|
-
email:
|
|
31
|
-
pages:
|
|
26
|
+
export const PagesSchema = z.object({
|
|
27
|
+
email: z.string().email(),
|
|
28
|
+
pages: z.array(SchedulingPageSchema),
|
|
32
29
|
});
|
|
33
|
-
|
|
34
|
-
start:
|
|
35
|
-
url:
|
|
30
|
+
export const SlotDetailsSchema = z.object({
|
|
31
|
+
start: z.string().datetime(),
|
|
32
|
+
url: z.string().url().optional(),
|
|
36
33
|
});
|
|
37
|
-
|
|
38
|
-
count:
|
|
39
|
-
duration:
|
|
40
|
-
slots:
|
|
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
|
-
|
|
43
|
-
page:
|
|
44
|
-
guest_email:
|
|
45
|
-
guest_name:
|
|
46
|
-
notes:
|
|
47
|
-
start:
|
|
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
|
-
|
|
50
|
-
page:
|
|
51
|
-
count:
|
|
52
|
-
start:
|
|
53
|
-
end:
|
|
54
|
-
timezone:
|
|
55
|
-
booking_link:
|
|
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
|
-
|
|
58
|
-
page:
|
|
54
|
+
export const GetInfoParamsSchema = z.object({
|
|
55
|
+
page: z.string().url(),
|
|
59
56
|
});
|
|
60
|
-
|
|
61
|
-
success:
|
|
62
|
-
error:
|
|
63
|
-
errors:
|
|
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
|
-
|
|
66
|
-
authToken:
|
|
62
|
+
export const MeetbotConfigSchema = z.object({
|
|
63
|
+
authToken: z.string().optional(),
|
|
67
64
|
});
|
|
68
65
|
//# sourceMappingURL=schemas.js.map
|
package/dist/schemas.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schemas.js","sourceRoot":"","sources":["../src/schemas.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"schemas.js","sourceRoot":"","sources":["../src/schemas.ts"],"names":[],"mappings":"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"}
|
package/dist/types.js
CHANGED
package/dist/types.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"
|
|
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.
|
|
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
|
-
|
|
8
|
-
|
|
9
|
-
|
|
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": "^
|
|
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"}
|
package/dist/mcp-server-http.js
DELETED
|
@@ -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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"}
|