@meetbot/mcp 1.0.4 → 1.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +1 -1
- package/README.md +137 -12
- package/dist/__tests__/meetbot-client.test.d.ts +2 -0
- package/dist/__tests__/meetbot-client.test.d.ts.map +1 -0
- package/dist/__tests__/meetbot-client.test.js +172 -0
- package/dist/__tests__/meetbot-client.test.js.map +1 -0
- package/dist/__tests__/types.test.d.ts +2 -0
- package/dist/__tests__/types.test.d.ts.map +1 -0
- package/dist/__tests__/types.test.js +109 -0
- package/dist/__tests__/types.test.js.map +1 -0
- package/dist/cli-http.d.ts +3 -0
- package/dist/cli-http.d.ts.map +1 -0
- package/dist/cli-http.js +48 -0
- package/dist/cli-http.js.map +1 -0
- package/dist/cli.js +6 -8
- package/dist/cli.js.map +1 -1
- package/dist/index.d.ts +3 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +6 -21
- package/dist/index.js.map +1 -1
- package/dist/mcp-server-http.d.ts +26 -0
- package/dist/mcp-server-http.d.ts.map +1 -0
- package/dist/mcp-server-http.js +346 -0
- package/dist/mcp-server-http.js.map +1 -0
- package/dist/mcp-server.d.ts +1 -1
- package/dist/mcp-server.js +24 -28
- package/dist/mcp-server.js.map +1 -1
- package/dist/meetbot-client.d.ts +2 -2
- package/dist/meetbot-client.d.ts.map +1 -1
- package/dist/meetbot-client.js +10 -17
- package/dist/meetbot-client.js.map +1 -1
- package/dist/schemas.d.ts +1 -1
- package/dist/schemas.js +51 -54
- package/dist/schemas.js.map +1 -1
- package/dist/types.d.ts +1 -1
- package/dist/types.js +2 -3
- package/dist/types.js.map +1 -1
- package/package.json +65 -62
package/dist/index.js
CHANGED
|
@@ -1,26 +1,11 @@
|
|
|
1
|
-
"use strict";
|
|
2
1
|
/**
|
|
3
|
-
*
|
|
4
|
-
* Model Context Protocol server for
|
|
2
|
+
* Meet.bot MCP Package
|
|
3
|
+
* Model Context Protocol server for Meet.bot Booking Page API
|
|
5
4
|
*/
|
|
6
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
-
exports.ApiErrorSchema = exports.MeetbotConfigSchema = exports.SlotDetailsSchema = exports.SlotsSchema = exports.SchedulingPageSchema = exports.PagesSchema = exports.PageInfoSchema = exports.GetInfoParamsSchema = exports.GetSlotsParamsSchema = exports.BookSlotRequestSchema = exports.BookSlotSchema = exports.MeetbotClient = exports.MeetbotMCPServer = void 0;
|
|
8
5
|
// Export main classes
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
Object.defineProperty(exports, "MeetbotClient", { enumerable: true, get: function () { return meetbot_client_js_1.MeetbotClient; } });
|
|
6
|
+
export { MeetbotMCPServer } from './mcp-server.js';
|
|
7
|
+
export { MeetbotMCPServerHTTP } from './mcp-server-http.js';
|
|
8
|
+
export { MeetbotClient } from './meetbot-client.js';
|
|
13
9
|
// Export schemas
|
|
14
|
-
|
|
15
|
-
Object.defineProperty(exports, "BookSlotSchema", { enumerable: true, get: function () { return schemas_js_1.BookSlotSchema; } });
|
|
16
|
-
Object.defineProperty(exports, "BookSlotRequestSchema", { enumerable: true, get: function () { return schemas_js_1.BookSlotRequestSchema; } });
|
|
17
|
-
Object.defineProperty(exports, "GetSlotsParamsSchema", { enumerable: true, get: function () { return schemas_js_1.GetSlotsParamsSchema; } });
|
|
18
|
-
Object.defineProperty(exports, "GetInfoParamsSchema", { enumerable: true, get: function () { return schemas_js_1.GetInfoParamsSchema; } });
|
|
19
|
-
Object.defineProperty(exports, "PageInfoSchema", { enumerable: true, get: function () { return schemas_js_1.PageInfoSchema; } });
|
|
20
|
-
Object.defineProperty(exports, "PagesSchema", { enumerable: true, get: function () { return schemas_js_1.PagesSchema; } });
|
|
21
|
-
Object.defineProperty(exports, "SchedulingPageSchema", { enumerable: true, get: function () { return schemas_js_1.SchedulingPageSchema; } });
|
|
22
|
-
Object.defineProperty(exports, "SlotsSchema", { enumerable: true, get: function () { return schemas_js_1.SlotsSchema; } });
|
|
23
|
-
Object.defineProperty(exports, "SlotDetailsSchema", { enumerable: true, get: function () { return schemas_js_1.SlotDetailsSchema; } });
|
|
24
|
-
Object.defineProperty(exports, "MeetbotConfigSchema", { enumerable: true, get: function () { return schemas_js_1.MeetbotConfigSchema; } });
|
|
25
|
-
Object.defineProperty(exports, "ApiErrorSchema", { enumerable: true, get: function () { return schemas_js_1.ApiErrorSchema; } });
|
|
10
|
+
export { BookSlotSchema, BookSlotRequestSchema, GetSlotsParamsSchema, GetInfoParamsSchema, PageInfoSchema, PagesSchema, SchedulingPageSchema, SlotsSchema, SlotDetailsSchema, MeetbotConfigSchema, ApiErrorSchema, } from './schemas.js';
|
|
26
11
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,sBAAsB;AACtB,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACnD,OAAO,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAC5D,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAkBpD,iBAAiB;AACjB,OAAO,EACL,cAAc,EACd,qBAAqB,EACrB,oBAAoB,EACpB,mBAAmB,EACnB,cAAc,EACd,WAAW,EACX,oBAAoB,EACpB,WAAW,EACX,iBAAiB,EACjB,mBAAmB,EACnB,cAAc,GACf,MAAM,cAAc,CAAC"}
|
|
@@ -0,0 +1,26 @@
|
|
|
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
|
|
@@ -0,0 +1 @@
|
|
|
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"}
|
|
@@ -0,0 +1,346 @@
|
|
|
1
|
+
import { Server } from '@modelcontextprotocol/sdk/server/index.js';
|
|
2
|
+
import { SSEServerTransport } from '@modelcontextprotocol/sdk/server/sse.js';
|
|
3
|
+
import { CallToolRequestSchema, ListToolsRequestSchema, } from '@modelcontextprotocol/sdk/types.js';
|
|
4
|
+
import { MeetbotClient } from './meetbot-client.js';
|
|
5
|
+
/**
|
|
6
|
+
* HTTP-based MCP Server for Meet.bot Booking Page API with SSE transport
|
|
7
|
+
*/
|
|
8
|
+
export class MeetbotMCPServerHTTP {
|
|
9
|
+
server;
|
|
10
|
+
transports = new Map();
|
|
11
|
+
clients = new Map();
|
|
12
|
+
constructor() {
|
|
13
|
+
this.server = new Server({
|
|
14
|
+
name: 'meetbot-mcp',
|
|
15
|
+
version: '1.1.1',
|
|
16
|
+
});
|
|
17
|
+
this.setupToolHandlers();
|
|
18
|
+
}
|
|
19
|
+
setupToolHandlers() {
|
|
20
|
+
// List available tools
|
|
21
|
+
this.server.setRequestHandler(ListToolsRequestSchema, async () => {
|
|
22
|
+
return {
|
|
23
|
+
tools: [
|
|
24
|
+
{
|
|
25
|
+
name: 'configure_meetbot',
|
|
26
|
+
description: 'Configure the Meet.bot API client with authentication',
|
|
27
|
+
inputSchema: {
|
|
28
|
+
type: 'object',
|
|
29
|
+
properties: {
|
|
30
|
+
authToken: {
|
|
31
|
+
type: 'string',
|
|
32
|
+
description: 'Bearer token for authentication (optional)',
|
|
33
|
+
},
|
|
34
|
+
},
|
|
35
|
+
required: [],
|
|
36
|
+
},
|
|
37
|
+
},
|
|
38
|
+
{
|
|
39
|
+
name: 'get_scheduling_pages',
|
|
40
|
+
description: 'Get all scheduling pages for the authenticated user',
|
|
41
|
+
inputSchema: {
|
|
42
|
+
type: 'object',
|
|
43
|
+
properties: {},
|
|
44
|
+
},
|
|
45
|
+
},
|
|
46
|
+
{
|
|
47
|
+
name: 'get_page_info',
|
|
48
|
+
description: 'Get information about a specific scheduling page',
|
|
49
|
+
inputSchema: {
|
|
50
|
+
type: 'object',
|
|
51
|
+
properties: {
|
|
52
|
+
page: {
|
|
53
|
+
type: 'string',
|
|
54
|
+
description: 'The URL of the scheduling page',
|
|
55
|
+
},
|
|
56
|
+
},
|
|
57
|
+
required: ['page'],
|
|
58
|
+
},
|
|
59
|
+
},
|
|
60
|
+
{
|
|
61
|
+
name: 'get_available_slots',
|
|
62
|
+
description: 'Get available booking slots for a scheduling page',
|
|
63
|
+
inputSchema: {
|
|
64
|
+
type: 'object',
|
|
65
|
+
properties: {
|
|
66
|
+
page: {
|
|
67
|
+
type: 'string',
|
|
68
|
+
description: 'The URL of the scheduling page',
|
|
69
|
+
},
|
|
70
|
+
count: {
|
|
71
|
+
type: 'number',
|
|
72
|
+
description: 'Maximum number of slots to return',
|
|
73
|
+
},
|
|
74
|
+
start: {
|
|
75
|
+
type: 'string',
|
|
76
|
+
description: 'Start date in YYYY-MM-DD format',
|
|
77
|
+
},
|
|
78
|
+
end: {
|
|
79
|
+
type: 'string',
|
|
80
|
+
description: 'End date in YYYY-MM-DD format',
|
|
81
|
+
},
|
|
82
|
+
timezone: {
|
|
83
|
+
type: 'string',
|
|
84
|
+
description: 'Timezone in IANA format (e.g., America/New_York)',
|
|
85
|
+
},
|
|
86
|
+
booking_link: {
|
|
87
|
+
type: 'boolean',
|
|
88
|
+
description: 'Include shareable booking links',
|
|
89
|
+
},
|
|
90
|
+
},
|
|
91
|
+
required: ['page'],
|
|
92
|
+
},
|
|
93
|
+
},
|
|
94
|
+
{
|
|
95
|
+
name: 'book_meeting',
|
|
96
|
+
description: 'Book a new meeting slot',
|
|
97
|
+
inputSchema: {
|
|
98
|
+
type: 'object',
|
|
99
|
+
properties: {
|
|
100
|
+
page: {
|
|
101
|
+
type: 'string',
|
|
102
|
+
description: 'The URL of the scheduling page',
|
|
103
|
+
},
|
|
104
|
+
guest_email: {
|
|
105
|
+
type: 'string',
|
|
106
|
+
description: 'Email address of the guest',
|
|
107
|
+
},
|
|
108
|
+
guest_name: {
|
|
109
|
+
type: 'string',
|
|
110
|
+
description: 'Name of the guest',
|
|
111
|
+
},
|
|
112
|
+
notes: {
|
|
113
|
+
type: 'string',
|
|
114
|
+
description: 'Additional notes for the meeting',
|
|
115
|
+
},
|
|
116
|
+
start: {
|
|
117
|
+
type: 'string',
|
|
118
|
+
description: 'Start time in ISO 8601 format',
|
|
119
|
+
},
|
|
120
|
+
},
|
|
121
|
+
required: ['page', 'guest_email', 'guest_name', 'start'],
|
|
122
|
+
},
|
|
123
|
+
},
|
|
124
|
+
{
|
|
125
|
+
name: 'health_check',
|
|
126
|
+
description: 'Check if the Meet.bot API client is properly configured and can connect',
|
|
127
|
+
inputSchema: {
|
|
128
|
+
type: 'object',
|
|
129
|
+
properties: {},
|
|
130
|
+
},
|
|
131
|
+
},
|
|
132
|
+
],
|
|
133
|
+
};
|
|
134
|
+
});
|
|
135
|
+
// Handle tool calls
|
|
136
|
+
this.server.setRequestHandler(CallToolRequestSchema, async (request) => {
|
|
137
|
+
const { name, arguments: args } = request.params;
|
|
138
|
+
// Get the client for this session
|
|
139
|
+
const sessionId = request.sessionId;
|
|
140
|
+
const client = sessionId ? this.clients.get(sessionId) || null : null;
|
|
141
|
+
try {
|
|
142
|
+
switch (name) {
|
|
143
|
+
case 'configure_meetbot':
|
|
144
|
+
return await this.handleConfigureMeetbot(args, sessionId);
|
|
145
|
+
case 'get_scheduling_pages':
|
|
146
|
+
return await this.handleGetSchedulingPages(client);
|
|
147
|
+
case 'get_page_info':
|
|
148
|
+
return await this.handleGetPageInfo(args, client);
|
|
149
|
+
case 'get_available_slots':
|
|
150
|
+
return await this.handleGetAvailableSlots(args, client);
|
|
151
|
+
case 'book_meeting':
|
|
152
|
+
return await this.handleBookMeeting(args, client);
|
|
153
|
+
case 'health_check':
|
|
154
|
+
return await this.handleHealthCheck(client);
|
|
155
|
+
default:
|
|
156
|
+
throw new Error(`Unknown tool: ${name}`);
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
catch (error) {
|
|
160
|
+
return {
|
|
161
|
+
content: [
|
|
162
|
+
{
|
|
163
|
+
type: 'text',
|
|
164
|
+
text: `Error: ${error instanceof Error ? error.message : String(error)}`,
|
|
165
|
+
},
|
|
166
|
+
],
|
|
167
|
+
isError: true,
|
|
168
|
+
};
|
|
169
|
+
}
|
|
170
|
+
});
|
|
171
|
+
}
|
|
172
|
+
async handleConfigureMeetbot(args, sessionId) {
|
|
173
|
+
const client = new MeetbotClient(args);
|
|
174
|
+
this.clients.set(sessionId, client);
|
|
175
|
+
return {
|
|
176
|
+
content: [
|
|
177
|
+
{
|
|
178
|
+
type: 'text',
|
|
179
|
+
text: 'Meet.bot API client configured successfully.',
|
|
180
|
+
},
|
|
181
|
+
],
|
|
182
|
+
};
|
|
183
|
+
}
|
|
184
|
+
async handleGetSchedulingPages(client) {
|
|
185
|
+
if (!client) {
|
|
186
|
+
throw new Error('Meet.bot client not configured. Please run configure_meetbot first.');
|
|
187
|
+
}
|
|
188
|
+
const pages = await client.getPages();
|
|
189
|
+
return {
|
|
190
|
+
content: [
|
|
191
|
+
{
|
|
192
|
+
type: 'text',
|
|
193
|
+
text: `Found ${pages.pages.length} scheduling pages for ${pages.email}:\n\n${pages.pages
|
|
194
|
+
.map((page) => `• ${page.title} (${page.duration} min) - ${page.url}`)
|
|
195
|
+
.join('\n')}`,
|
|
196
|
+
},
|
|
197
|
+
],
|
|
198
|
+
};
|
|
199
|
+
}
|
|
200
|
+
async handleGetPageInfo(args, client) {
|
|
201
|
+
if (!client) {
|
|
202
|
+
throw new Error('Meet.bot client not configured. Please run configure_meetbot first.');
|
|
203
|
+
}
|
|
204
|
+
const pageInfo = await client.getPageInfo(args);
|
|
205
|
+
return {
|
|
206
|
+
content: [
|
|
207
|
+
{
|
|
208
|
+
type: 'text',
|
|
209
|
+
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}`,
|
|
210
|
+
},
|
|
211
|
+
],
|
|
212
|
+
};
|
|
213
|
+
}
|
|
214
|
+
async handleGetAvailableSlots(args, client) {
|
|
215
|
+
if (!client) {
|
|
216
|
+
throw new Error('Meet.bot client not configured. Please run configure_meetbot first.');
|
|
217
|
+
}
|
|
218
|
+
const slots = await client.getSlots(args);
|
|
219
|
+
return {
|
|
220
|
+
content: [
|
|
221
|
+
{
|
|
222
|
+
type: 'text',
|
|
223
|
+
text: `Found ${slots.count} available slots (${slots.duration} min each):\n\n${slots.slots
|
|
224
|
+
.map((slot) => {
|
|
225
|
+
const date = new Date(slot.start).toLocaleString();
|
|
226
|
+
const urlInfo = slot.url ? `\n Booking link: ${slot.url}` : '';
|
|
227
|
+
return `• ${date}${urlInfo}`;
|
|
228
|
+
})
|
|
229
|
+
.join('\n\n')}`,
|
|
230
|
+
},
|
|
231
|
+
],
|
|
232
|
+
};
|
|
233
|
+
}
|
|
234
|
+
async handleBookMeeting(args, client) {
|
|
235
|
+
if (!client) {
|
|
236
|
+
throw new Error('Meet.bot client not configured. Please run configure_meetbot first.');
|
|
237
|
+
}
|
|
238
|
+
const booking = await client.bookSlot(args);
|
|
239
|
+
return {
|
|
240
|
+
content: [
|
|
241
|
+
{
|
|
242
|
+
type: 'text',
|
|
243
|
+
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}`,
|
|
244
|
+
},
|
|
245
|
+
],
|
|
246
|
+
};
|
|
247
|
+
}
|
|
248
|
+
async handleHealthCheck(client) {
|
|
249
|
+
if (!client) {
|
|
250
|
+
throw new Error('Meet.bot client not configured. Please run configure_meetbot first.');
|
|
251
|
+
}
|
|
252
|
+
const isHealthy = await client.healthCheck();
|
|
253
|
+
return {
|
|
254
|
+
content: [
|
|
255
|
+
{
|
|
256
|
+
type: 'text',
|
|
257
|
+
text: isHealthy
|
|
258
|
+
? '✅ Meet.bot API client is healthy and can connect to the API.'
|
|
259
|
+
: '❌ Meet.bot API client cannot connect to the API. Please check your configuration.',
|
|
260
|
+
},
|
|
261
|
+
],
|
|
262
|
+
};
|
|
263
|
+
}
|
|
264
|
+
/**
|
|
265
|
+
* Authenticate incoming requests using Bearer token
|
|
266
|
+
*/
|
|
267
|
+
async authenticateRequest(req) {
|
|
268
|
+
const authHeader = req.headers.authorization;
|
|
269
|
+
if (!authHeader) {
|
|
270
|
+
return null;
|
|
271
|
+
}
|
|
272
|
+
// Extract bearer token
|
|
273
|
+
const match = authHeader.match(/^Bearer\s+(.+)$/i);
|
|
274
|
+
if (!match || !match[1]) {
|
|
275
|
+
return null;
|
|
276
|
+
}
|
|
277
|
+
return match[1];
|
|
278
|
+
}
|
|
279
|
+
/**
|
|
280
|
+
* Handle incoming HTTP requests
|
|
281
|
+
*/
|
|
282
|
+
async handleRequest(req, res) {
|
|
283
|
+
const url = new URL(req.url || '/', `http://${req.headers.host}`);
|
|
284
|
+
// Authenticate the request
|
|
285
|
+
const authToken = await this.authenticateRequest(req);
|
|
286
|
+
if (!authToken) {
|
|
287
|
+
res.writeHead(401, { 'Content-Type': 'application/json' });
|
|
288
|
+
res.end(JSON.stringify({
|
|
289
|
+
error: 'Unauthorized',
|
|
290
|
+
message: 'Missing or invalid Authorization header. Use: Authorization: Bearer <your-token>',
|
|
291
|
+
}));
|
|
292
|
+
return;
|
|
293
|
+
}
|
|
294
|
+
// Handle SSE connection (GET request)
|
|
295
|
+
if (req.method === 'GET' && url.pathname === '/sse') {
|
|
296
|
+
const transport = new SSEServerTransport('/messages', res);
|
|
297
|
+
const sessionId = transport.sessionId;
|
|
298
|
+
// Store transport and create client with the authenticated token
|
|
299
|
+
this.transports.set(sessionId, transport);
|
|
300
|
+
const client = new MeetbotClient({ authToken });
|
|
301
|
+
this.clients.set(sessionId, client);
|
|
302
|
+
// Attach session ID to requests
|
|
303
|
+
const originalSetRequestHandler = this.server.setRequestHandler.bind(this.server);
|
|
304
|
+
this.server.setRequestHandler = ((schema, handler) => {
|
|
305
|
+
return originalSetRequestHandler(schema, async (request) => {
|
|
306
|
+
request.sessionId = sessionId;
|
|
307
|
+
return handler(request);
|
|
308
|
+
});
|
|
309
|
+
});
|
|
310
|
+
await this.server.connect(transport);
|
|
311
|
+
// Cleanup on close
|
|
312
|
+
transport.onclose = () => {
|
|
313
|
+
this.transports.delete(sessionId);
|
|
314
|
+
this.clients.delete(sessionId);
|
|
315
|
+
};
|
|
316
|
+
return;
|
|
317
|
+
}
|
|
318
|
+
// Handle POST messages
|
|
319
|
+
if (req.method === 'POST' && url.pathname === '/messages') {
|
|
320
|
+
const sessionId = url.searchParams.get('sessionId');
|
|
321
|
+
if (!sessionId) {
|
|
322
|
+
res.writeHead(400, { 'Content-Type': 'application/json' });
|
|
323
|
+
res.end(JSON.stringify({ error: 'Missing sessionId' }));
|
|
324
|
+
return;
|
|
325
|
+
}
|
|
326
|
+
const transport = this.transports.get(sessionId);
|
|
327
|
+
if (!transport) {
|
|
328
|
+
res.writeHead(404, { 'Content-Type': 'application/json' });
|
|
329
|
+
res.end(JSON.stringify({ error: 'Session not found' }));
|
|
330
|
+
return;
|
|
331
|
+
}
|
|
332
|
+
await transport.handlePostMessage(req, res);
|
|
333
|
+
return;
|
|
334
|
+
}
|
|
335
|
+
// Health check endpoint
|
|
336
|
+
if (req.method === 'GET' && url.pathname === '/health') {
|
|
337
|
+
res.writeHead(200, { 'Content-Type': 'application/json' });
|
|
338
|
+
res.end(JSON.stringify({ status: 'ok', service: 'meetbot-mcp' }));
|
|
339
|
+
return;
|
|
340
|
+
}
|
|
341
|
+
// 404 for other routes
|
|
342
|
+
res.writeHead(404, { 'Content-Type': 'application/json' });
|
|
343
|
+
res.end(JSON.stringify({ error: 'Not found' }));
|
|
344
|
+
}
|
|
345
|
+
}
|
|
346
|
+
//# sourceMappingURL=mcp-server-http.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcp-server-http.js","sourceRoot":"","sources":["../src/mcp-server-http.ts"],"names":[],"mappings":"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"}
|
package/dist/mcp-server.d.ts
CHANGED
package/dist/mcp-server.js
CHANGED
|
@@ -1,18 +1,15 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
const stdio_js_1 = require("@modelcontextprotocol/sdk/server/stdio.js");
|
|
6
|
-
const types_js_1 = require("@modelcontextprotocol/sdk/types.js");
|
|
7
|
-
const meetbot_client_js_1 = require("./meetbot-client.js");
|
|
1
|
+
import { Server } from '@modelcontextprotocol/sdk/server/index.js';
|
|
2
|
+
import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
|
|
3
|
+
import { CallToolRequestSchema, ListToolsRequestSchema } from '@modelcontextprotocol/sdk/types.js';
|
|
4
|
+
import { MeetbotClient } from './meetbot-client.js';
|
|
8
5
|
/**
|
|
9
|
-
* MCP Server for
|
|
6
|
+
* MCP Server for Meet.bot Booking Page API
|
|
10
7
|
*/
|
|
11
|
-
class MeetbotMCPServer {
|
|
8
|
+
export class MeetbotMCPServer {
|
|
12
9
|
server;
|
|
13
10
|
client = null;
|
|
14
11
|
constructor() {
|
|
15
|
-
this.server = new
|
|
12
|
+
this.server = new Server({
|
|
16
13
|
name: 'meetbot-mcp',
|
|
17
14
|
version: '1.0.0',
|
|
18
15
|
});
|
|
@@ -20,12 +17,12 @@ class MeetbotMCPServer {
|
|
|
20
17
|
}
|
|
21
18
|
setupToolHandlers() {
|
|
22
19
|
// List available tools
|
|
23
|
-
this.server.setRequestHandler(
|
|
20
|
+
this.server.setRequestHandler(ListToolsRequestSchema, async () => {
|
|
24
21
|
return {
|
|
25
22
|
tools: [
|
|
26
23
|
{
|
|
27
24
|
name: 'configure_meetbot',
|
|
28
|
-
description: 'Configure the
|
|
25
|
+
description: 'Configure the Meet.bot API client with authentication',
|
|
29
26
|
inputSchema: {
|
|
30
27
|
type: 'object',
|
|
31
28
|
properties: {
|
|
@@ -125,7 +122,7 @@ class MeetbotMCPServer {
|
|
|
125
122
|
},
|
|
126
123
|
{
|
|
127
124
|
name: 'health_check',
|
|
128
|
-
description: 'Check if the
|
|
125
|
+
description: 'Check if the Meet.bot API client is properly configured and can connect',
|
|
129
126
|
inputSchema: {
|
|
130
127
|
type: 'object',
|
|
131
128
|
properties: {},
|
|
@@ -135,7 +132,7 @@ class MeetbotMCPServer {
|
|
|
135
132
|
};
|
|
136
133
|
});
|
|
137
134
|
// Handle tool calls
|
|
138
|
-
this.server.setRequestHandler(
|
|
135
|
+
this.server.setRequestHandler(CallToolRequestSchema, async (request) => {
|
|
139
136
|
const { name, arguments: args } = request.params;
|
|
140
137
|
try {
|
|
141
138
|
switch (name) {
|
|
@@ -170,24 +167,24 @@ class MeetbotMCPServer {
|
|
|
170
167
|
}
|
|
171
168
|
async handleConfigureMeetbot(args) {
|
|
172
169
|
if (!this.client) {
|
|
173
|
-
this.client = new
|
|
170
|
+
this.client = new MeetbotClient(args);
|
|
174
171
|
return {
|
|
175
172
|
content: [
|
|
176
173
|
{
|
|
177
174
|
type: 'text',
|
|
178
|
-
text: '
|
|
175
|
+
text: 'Meet.bot API client configured successfully.',
|
|
179
176
|
},
|
|
180
177
|
],
|
|
181
178
|
};
|
|
182
179
|
}
|
|
183
180
|
else {
|
|
184
181
|
// Reconfigure existing client
|
|
185
|
-
this.client = new
|
|
182
|
+
this.client = new MeetbotClient(args);
|
|
186
183
|
return {
|
|
187
184
|
content: [
|
|
188
185
|
{
|
|
189
186
|
type: 'text',
|
|
190
|
-
text: '
|
|
187
|
+
text: 'Meet.bot API client reconfigured successfully.',
|
|
191
188
|
},
|
|
192
189
|
],
|
|
193
190
|
};
|
|
@@ -195,7 +192,7 @@ class MeetbotMCPServer {
|
|
|
195
192
|
}
|
|
196
193
|
async handleGetSchedulingPages(_args) {
|
|
197
194
|
if (!this.client) {
|
|
198
|
-
throw new Error('
|
|
195
|
+
throw new Error('Meet.bot client not configured. Please run configure_meetbot first.');
|
|
199
196
|
}
|
|
200
197
|
const pages = await this.client.getPages();
|
|
201
198
|
return {
|
|
@@ -211,7 +208,7 @@ class MeetbotMCPServer {
|
|
|
211
208
|
}
|
|
212
209
|
async handleGetPageInfo(args) {
|
|
213
210
|
if (!this.client) {
|
|
214
|
-
throw new Error('
|
|
211
|
+
throw new Error('Meet.bot client not configured. Please run configure_meetbot first.');
|
|
215
212
|
}
|
|
216
213
|
const pageInfo = await this.client.getPageInfo(args);
|
|
217
214
|
return {
|
|
@@ -225,7 +222,7 @@ class MeetbotMCPServer {
|
|
|
225
222
|
}
|
|
226
223
|
async handleGetAvailableSlots(args) {
|
|
227
224
|
if (!this.client) {
|
|
228
|
-
throw new Error('
|
|
225
|
+
throw new Error('Meet.bot client not configured. Please run configure_meetbot first.');
|
|
229
226
|
}
|
|
230
227
|
const slots = await this.client.getSlots(args);
|
|
231
228
|
return {
|
|
@@ -245,7 +242,7 @@ class MeetbotMCPServer {
|
|
|
245
242
|
}
|
|
246
243
|
async handleBookMeeting(args) {
|
|
247
244
|
if (!this.client) {
|
|
248
|
-
throw new Error('
|
|
245
|
+
throw new Error('Meet.bot client not configured. Please run configure_meetbot first.');
|
|
249
246
|
}
|
|
250
247
|
const booking = await this.client.bookSlot(args);
|
|
251
248
|
return {
|
|
@@ -259,7 +256,7 @@ class MeetbotMCPServer {
|
|
|
259
256
|
}
|
|
260
257
|
async handleHealthCheck(_args) {
|
|
261
258
|
if (!this.client) {
|
|
262
|
-
throw new Error('
|
|
259
|
+
throw new Error('Meet.bot client not configured. Please run configure_meetbot first.');
|
|
263
260
|
}
|
|
264
261
|
const isHealthy = await this.client.healthCheck();
|
|
265
262
|
return {
|
|
@@ -267,8 +264,8 @@ class MeetbotMCPServer {
|
|
|
267
264
|
{
|
|
268
265
|
type: 'text',
|
|
269
266
|
text: isHealthy
|
|
270
|
-
? '✅
|
|
271
|
-
: '❌
|
|
267
|
+
? '✅ Meet.bot API client is healthy and can connect to the API.'
|
|
268
|
+
: '❌ Meet.bot API client cannot connect to the API. Please check your configuration.',
|
|
272
269
|
},
|
|
273
270
|
],
|
|
274
271
|
};
|
|
@@ -277,10 +274,9 @@ class MeetbotMCPServer {
|
|
|
277
274
|
* Start the MCP server
|
|
278
275
|
*/
|
|
279
276
|
async run() {
|
|
280
|
-
const transport = new
|
|
277
|
+
const transport = new StdioServerTransport();
|
|
281
278
|
await this.server.connect(transport);
|
|
282
|
-
console.error('
|
|
279
|
+
console.error('Meet.bot MCP server started');
|
|
283
280
|
}
|
|
284
281
|
}
|
|
285
|
-
exports.MeetbotMCPServer = MeetbotMCPServer;
|
|
286
282
|
//# sourceMappingURL=mcp-server.js.map
|
package/dist/mcp-server.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mcp-server.js","sourceRoot":"","sources":["../src/mcp-server.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"mcp-server.js","sourceRoot":"","sources":["../src/mcp-server.ts"],"names":[],"mappings":"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"}
|
package/dist/meetbot-client.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { BookSlot, BookSlotRequest, GetSlotsParams, GetInfoParams, PageInfo, Pages, Slots, MeetbotConfig } from './types';
|
|
1
|
+
import { BookSlot, BookSlotRequest, GetSlotsParams, GetInfoParams, PageInfo, Pages, Slots, MeetbotConfig } from './types.js';
|
|
2
2
|
/**
|
|
3
|
-
*
|
|
3
|
+
* Meet.bot API Client for interacting with the booking page API
|
|
4
4
|
*/
|
|
5
5
|
export declare class MeetbotClient {
|
|
6
6
|
private readonly client;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"meetbot-client.d.ts","sourceRoot":"","sources":["../src/meetbot-client.ts"],"names":[],"mappings":"AACA,OAAO,EACL,QAAQ,EACR,eAAe,EACf,cAAc,EACd,aAAa,EACb,QAAQ,EACR,KAAK,EACL,KAAK,EACL,aAAa,EACd,MAAM,
|
|
1
|
+
{"version":3,"file":"meetbot-client.d.ts","sourceRoot":"","sources":["../src/meetbot-client.ts"],"names":[],"mappings":"AACA,OAAO,EACL,QAAQ,EACR,eAAe,EACf,cAAc,EACd,aAAa,EACb,QAAQ,EACR,KAAK,EACL,KAAK,EACL,aAAa,EACd,MAAM,YAAY,CAAC;AAQpB;;GAEG;AACH,qBAAa,aAAa;IACxB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAgB;IACvC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAgB;gBAE3B,MAAM,EAAE,aAAa;IAmCjC;;OAEG;IACG,QAAQ,IAAI,OAAO,CAAC,KAAK,CAAC;IAKhC;;OAEG;IACG,WAAW,CAAC,MAAM,EAAE,aAAa,GAAG,OAAO,CAAC,QAAQ,CAAC;IAQ3D;;OAEG;IACG,QAAQ,CAAC,MAAM,EAAE,cAAc,GAAG,OAAO,CAAC,KAAK,CAAC;IAQtD;;OAEG;IACG,QAAQ,CAAC,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC,QAAQ,CAAC;IAM3D;;OAEG;IACG,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC;IAuBrC;;OAEG;IACH,SAAS,IAAI,aAAa;CAG3B"}
|