ziara-mcp-server 1.0.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.
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":""}
package/build/index.js ADDED
@@ -0,0 +1,398 @@
1
+ #!/usr/bin/env node
2
+ import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
3
+ import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
4
+ import { z } from "zod";
5
+ const BASE_URL = "https://new-api.ziara.co/api/v1.6";
6
+ // ─── Credentials from Environment Variables ───────────────────────────────────
7
+ const ZIARA_EMAIL = process.env.ZIARA_EMAIL ?? "test@ziara.co";
8
+ const ZIARA_PASSWORD = process.env.ZIARA_PASSWORD ?? "admin@123";
9
+ // ─── State ────────────────────────────────────────────────────────────────────
10
+ let authToken = "";
11
+ let sessionId = "";
12
+ let hotelIndexMap = {};
13
+ let packageIdMap = {};
14
+ let lastHotelIndex = "";
15
+ // ─── Helper ───────────────────────────────────────────────────────────────────
16
+ async function ziaraRequest(method, path, body, queryParams) {
17
+ const url = new URL(`${BASE_URL}${path}`);
18
+ if (queryParams) {
19
+ Object.entries(queryParams).forEach(([k, v]) => url.searchParams.set(k, v));
20
+ }
21
+ const headers = {
22
+ "Content-Type": "application/json",
23
+ Accept: "application/json",
24
+ };
25
+ if (authToken)
26
+ headers["Authorization"] = authToken;
27
+ const res = await fetch(url.toString(), {
28
+ method,
29
+ headers,
30
+ body: body ? JSON.stringify(body) : undefined,
31
+ });
32
+ if (!res.ok) {
33
+ throw new Error(`HTTP ${res.status}: ${res.statusText}`);
34
+ }
35
+ return await res.json();
36
+ }
37
+ // ─── Auto Login on Startup ────────────────────────────────────────────────────
38
+ async function autoLogin() {
39
+ try {
40
+ const res = await ziaraRequest("POST", "/authorization/login", {
41
+ email: ZIARA_EMAIL,
42
+ password: ZIARA_PASSWORD,
43
+ });
44
+ const token = res?.data?.token;
45
+ if (token) {
46
+ authToken = `Bearer ${token}`;
47
+ console.error("✅ Auto-login successful. Token stored.");
48
+ }
49
+ else {
50
+ console.error("❌ Auto-login failed:", JSON.stringify(res));
51
+ }
52
+ }
53
+ catch (err) {
54
+ console.error("❌ Auto-login error:", err.message);
55
+ }
56
+ }
57
+ // ─── MCP Server ───────────────────────────────────────────────────────────────
58
+ const server = new McpServer({
59
+ name: "ziara-mcp-server",
60
+ version: "1.0.0",
61
+ });
62
+ // ─── 1. Login ─────────────────────────────────────────────────────────────────
63
+ server.tool("login", "Re-authenticate with Ziara B2B API and refresh the JWT token (auto-login runs on startup)", {
64
+ email: z.string().email().optional().default(ZIARA_EMAIL).describe("Ziara B2B account email"),
65
+ password: z.string().optional().default(ZIARA_PASSWORD).describe("Ziara B2B account password"),
66
+ }, async ({ email, password }) => {
67
+ try {
68
+ const data = await ziaraRequest("POST", "/authorization/login", { email, password });
69
+ if (data?.data?.token) {
70
+ authToken = `Bearer ${data.data.token}`;
71
+ return {
72
+ content: [{
73
+ type: "text",
74
+ text: `✅ Login successful! Token refreshed.\n\n${JSON.stringify(data, null, 2)}`,
75
+ }],
76
+ };
77
+ }
78
+ return {
79
+ content: [{ type: "text", text: `❌ Login failed.\n\n${JSON.stringify(data, null, 2)}` }],
80
+ };
81
+ }
82
+ catch (err) {
83
+ return { content: [{ type: "text", text: `❌ Error: ${err.message}` }] };
84
+ }
85
+ });
86
+ // ─── 2. Search Hotels ─────────────────────────────────────────────────────────
87
+ server.tool("search_hotels", `Search for available hotels. Use this tool when user mentions any of these:
88
+ - A city name (Makkah, Madina, etc.)
89
+ - Travel dates (any format - convert to MM/DD/YYYY)
90
+ - Number of travelers/adults/guests
91
+
92
+ Known city IDs: Makkah = 12839, Madina = 4359
93
+ Always use these defaults if not specified:
94
+ - nationality: "Pakistan"
95
+ - residency: "PK"
96
+ - currency: "PKR"
97
+ - childCount: 0
98
+ - child_ages: []
99
+
100
+ Convert any date format to MM/DD/YYYY before calling this tool.`, {
101
+ city_id: z.number().describe("City ID. Makkah=12839, Madina=4359"),
102
+ start: z.string().describe("Check-in date in MM/DD/YYYY format"),
103
+ end: z.string().describe("Check-out date in MM/DD/YYYY format"),
104
+ adults: z.number().describe("Number of adult guests"),
105
+ childCount: z.number().default(0).describe("Number of children, default 0"),
106
+ child_ages: z.array(z.number()).default([]).describe("Ages of children if any"),
107
+ nationality: z.string().default("Pakistan").describe("Guest nationality, default Pakistan"),
108
+ residency: z.string().default("PK").describe("Residency code, default PK"),
109
+ currency: z.string().default("PKR").describe("Currency code, default PKR"),
110
+ }, async ({ city_id, start, end, nationality, residency, currency, adults, childCount, child_ages }) => {
111
+ try {
112
+ const data = await ziaraRequest("POST", "/hotels/sync", {
113
+ city_id,
114
+ start,
115
+ end,
116
+ nationality,
117
+ residency,
118
+ currency,
119
+ rooms: [{ adults, childCount, child_ages: child_ages ?? [] }],
120
+ }, { pageSize: "20" });
121
+ // Auto-store sessionId
122
+ const extractedSessionId = data?.sessionId ||
123
+ data?.data?.sessionId ||
124
+ data?.data?.session_id ||
125
+ data?.session_id;
126
+ if (extractedSessionId) {
127
+ sessionId = extractedSessionId;
128
+ console.error(`✅ Session ID stored: ${sessionId}`);
129
+ }
130
+ else {
131
+ console.error("❌ Session ID NOT found in response.");
132
+ }
133
+ // Build hotel index map
134
+ const hotels = data?.data?.hotels ?? [];
135
+ hotelIndexMap = {};
136
+ const hotelList = hotels
137
+ .map((hotel, index) => {
138
+ const seq = index + 1;
139
+ hotelIndexMap[seq] = hotel.hotelIndex;
140
+ return `${seq}. ${hotel.hotel_detail?.title ?? "Unknown Hotel"}`;
141
+ })
142
+ .join("\n");
143
+ const summary = `🏨 Found ${data.totalItems} hotels (Page ${data.currentPage}/${data.totalPages})\n\n` +
144
+ `${hotelList}\n\n` +
145
+ `💡 Use a sequence number with get_rooms to fetch rooms for that hotel.`;
146
+ return { content: [{ type: "text", text: summary }] };
147
+ }
148
+ catch (err) {
149
+ return { content: [{ type: "text", text: `❌ Error: ${err.message}` }] };
150
+ }
151
+ });
152
+ // ─── 3. Get Rooms ─────────────────────────────────────────────────────────────
153
+ server.tool("get_rooms", "Get available room types and packages for a specific hotel using its sequence number from search results", {
154
+ hotelNumber: z.number().describe("The sequence number of the hotel from search results (e.g. 1, 2, 3)"),
155
+ }, async ({ hotelNumber }) => {
156
+ try {
157
+ const resolvedIndex = hotelIndexMap[hotelNumber];
158
+ if (!resolvedIndex) {
159
+ return {
160
+ content: [{
161
+ type: "text",
162
+ text: `❌ Hotel #${hotelNumber} not found. Please run search_hotels first.`,
163
+ }],
164
+ };
165
+ }
166
+ lastHotelIndex = resolvedIndex;
167
+ const data = await ziaraRequest("POST", "/hotels/rooms", {
168
+ hotelIndex: resolvedIndex,
169
+ sessionId,
170
+ });
171
+ const roomList = data?.data?.roomList ?? data?.roomList ?? [];
172
+ if (roomList.length === 0) {
173
+ return {
174
+ content: [{ type: "text", text: `⚠️ No rooms found for hotel #${hotelNumber}.` }],
175
+ };
176
+ }
177
+ packageIdMap = {};
178
+ let seq = 0;
179
+ const lines = [];
180
+ roomList.forEach((room) => {
181
+ lines.push(`\n🏷️ ${room.title ?? "Unknown Room"}`);
182
+ const packages = room.packages ?? [];
183
+ packages.forEach((pkg) => {
184
+ seq++;
185
+ const pkgId = pkg.packageId;
186
+ if (pkgId)
187
+ packageIdMap[seq] = pkgId;
188
+ const inner = pkg.rooms?.[0];
189
+ const price = pkg.total ?? inner?.total ?? "N/A";
190
+ const basis = inner?.roomBasis ?? "";
191
+ const adults = inner?.totalAdults ?? "";
192
+ const nightly = inner?.nightlyRates ?? "";
193
+ lines.push(` ${seq}. Package ID: ${pkgId}` +
194
+ ` | Total: USD ${price}` +
195
+ (basis ? ` | ${basis}` : "") +
196
+ (adults ? ` | Adults: ${adults}` : "") +
197
+ (nightly ? ` | Nightly: USD ${nightly}` : ""));
198
+ });
199
+ });
200
+ return {
201
+ content: [{
202
+ type: "text",
203
+ text: `🛏️ Rooms for Hotel #${hotelNumber}:\n${lines.join("\n")}\n\n` +
204
+ `💡 Use the package sequence number with get_policy or book_hotel.`,
205
+ }],
206
+ };
207
+ }
208
+ catch (err) {
209
+ return { content: [{ type: "text", text: `❌ Error: ${err.message}` }] };
210
+ }
211
+ });
212
+ // ─── 4. Get Policy ────────────────────────────────────────────────────────────
213
+ server.tool("get_policy", "Get cancellation and booking policies for a specific room package using its sequence number from get_rooms", {
214
+ packageNumber: z.number().describe("The sequence number of the package from get_rooms results (e.g. 1, 2, 3)"),
215
+ }, async ({ packageNumber }) => {
216
+ try {
217
+ const packageId = packageIdMap[packageNumber];
218
+ if (!packageId) {
219
+ return {
220
+ content: [{ type: "text", text: `❌ Package #${packageNumber} not found. Please run get_rooms first.` }],
221
+ };
222
+ }
223
+ if (!sessionId) {
224
+ return {
225
+ content: [{ type: "text", text: "❌ No session found. Please run search_hotels first." }],
226
+ };
227
+ }
228
+ if (!lastHotelIndex) {
229
+ return {
230
+ content: [{ type: "text", text: "❌ No hotel selected. Please run get_rooms first." }],
231
+ };
232
+ }
233
+ const data = await ziaraRequest("POST", "/hotels/policy", {
234
+ hotelIndex: lastHotelIndex,
235
+ packageId,
236
+ sessionId,
237
+ });
238
+ const policy = data?.data ?? data;
239
+ const cancellation = policy?.cancellationPolicy ?? policy?.cancellation_policy ?? policy?.policies ?? null;
240
+ const refundable = policy?.refundable ?? policy?.isRefundable ?? null;
241
+ const deadline = policy?.cancellationDeadline ?? policy?.deadline ?? null;
242
+ let text = `📋 Booking Policy for Package #${packageNumber} (${packageId}):\n\n`;
243
+ if (refundable !== null)
244
+ text += `♻️ Refundable: ${refundable ? "Yes" : "No"}\n`;
245
+ if (deadline)
246
+ text += `⏰ Cancellation Deadline: ${deadline}\n`;
247
+ if (cancellation)
248
+ text += `\n📄 Cancellation Policy:\n${JSON.stringify(cancellation, null, 2)}`;
249
+ if (!cancellation && !deadline)
250
+ text += JSON.stringify(policy, null, 2);
251
+ return { content: [{ type: "text", text }] };
252
+ }
253
+ catch (err) {
254
+ return { content: [{ type: "text", text: `❌ Error: ${err.message}` }] };
255
+ }
256
+ });
257
+ // ─── 5. Get Hotel Details ─────────────────────────────────────────────────────
258
+ server.tool("get_hotel_details", "Get comprehensive hotel information including amenities, photos, and description", {
259
+ slug: z.string().describe("Hotel slug identifier"),
260
+ hotelIndex: z.string().optional().describe("Optional hotel index for session-based results"),
261
+ }, async ({ slug, hotelIndex }) => {
262
+ try {
263
+ const body = { slug };
264
+ if (hotelIndex)
265
+ body.hotelIndex = hotelIndex;
266
+ if (sessionId)
267
+ body.sessionId = sessionId;
268
+ const data = await ziaraRequest("POST", "/hotels/details", body);
269
+ return {
270
+ content: [{ type: "text", text: `🏩 Hotel Details:\n\n${JSON.stringify(data, null, 2)}` }],
271
+ };
272
+ }
273
+ catch (err) {
274
+ return { content: [{ type: "text", text: `❌ Error: ${err.message}` }] };
275
+ }
276
+ });
277
+ // ─── 6. Book Hotel ────────────────────────────────────────────────────────────
278
+ server.tool("book_hotel", "Book a hotel using the package sequence number from get_rooms. Provide guest details as individual fields.", {
279
+ packageNumber: z.number().describe("The sequence number of the package from get_rooms (e.g. 1, 2, 3)"),
280
+ email: z.string().email().describe("Contact email for the booking"),
281
+ phone: z.string().describe("Contact phone number"),
282
+ adult1Title: z.enum(["MR", "MRS", "MS", "DR"]).describe("Title for Adult 1"),
283
+ adult1FirstName: z.string().describe("First name of Adult 1"),
284
+ adult1LastName: z.string().describe("Last name of Adult 1"),
285
+ adult2Title: z.enum(["MR", "MRS", "MS", "DR"]).optional().describe("Title for Adult 2 (optional)"),
286
+ adult2FirstName: z.string().optional().describe("First name of Adult 2 (optional)"),
287
+ adult2LastName: z.string().optional().describe("Last name of Adult 2 (optional)"),
288
+ }, async ({ packageNumber, email, phone, adult1Title, adult1FirstName, adult1LastName, adult2Title, adult2FirstName, adult2LastName, }) => {
289
+ try {
290
+ const packageId = packageIdMap[packageNumber];
291
+ if (!packageId) {
292
+ return {
293
+ content: [{ type: "text", text: `❌ Package #${packageNumber} not found. Please run get_rooms first.` }],
294
+ };
295
+ }
296
+ if (!sessionId || !lastHotelIndex) {
297
+ return {
298
+ content: [{ type: "text", text: "❌ Missing session or hotel. Please run search_hotels and get_rooms first." }],
299
+ };
300
+ }
301
+ const adults = [
302
+ { title: adult1Title, firstName: adult1FirstName, lastName: adult1LastName },
303
+ ];
304
+ if (adult2Title && adult2FirstName && adult2LastName) {
305
+ adults.push({ title: adult2Title, firstName: adult2FirstName, lastName: adult2LastName });
306
+ }
307
+ const data = await ziaraRequest("POST", "/hotels/book", {
308
+ hotelIndex: lastHotelIndex,
309
+ packageId,
310
+ sessionId,
311
+ email,
312
+ phone,
313
+ visitors: [{ adults }],
314
+ });
315
+ const bookingId = data?.data?.bookingId ?? data?.bookingId ?? data?.data?.id ?? null;
316
+ const trackingId = data?.data?.trackingId ?? data?.trackingId ?? null;
317
+ const status = data?.data?.status ?? data?.status ?? null;
318
+ let text = "✅ Booking Confirmed!\n\n";
319
+ if (bookingId)
320
+ text += `🆔 Booking ID: ${bookingId}\n`;
321
+ if (trackingId)
322
+ text += `🔍 Tracking ID: ${trackingId}\n`;
323
+ if (status)
324
+ text += `📌 Status: ${status}\n`;
325
+ text += `\n📦 Package: ${packageId}\n🏨 Hotel Index: ${lastHotelIndex}`;
326
+ if (!bookingId && !trackingId) {
327
+ text = `📦 Booking Response:\n\n${JSON.stringify(data, null, 2)}`;
328
+ }
329
+ return { content: [{ type: "text", text }] };
330
+ }
331
+ catch (err) {
332
+ return { content: [{ type: "text", text: `❌ Error: ${err.message}` }] };
333
+ }
334
+ });
335
+ // ─── 7. Get All Bookings ──────────────────────────────────────────────────────
336
+ server.tool("get_all_bookings", "Retrieve a paginated list of all hotel bookings", {
337
+ per_page: z.number().optional().describe("Results per page"),
338
+ page: z.number().optional().describe("Page number"),
339
+ from: z.string().optional().describe("Start date filter YYYY-MM-DD"),
340
+ to: z.string().optional().describe("End date filter YYYY-MM-DD"),
341
+ search: z.string().optional().describe("Search by status, package_id, or booking_type"),
342
+ }, async ({ per_page, page, from, to, search }) => {
343
+ try {
344
+ const queryParams = {};
345
+ if (per_page)
346
+ queryParams.per_page = String(per_page);
347
+ if (page)
348
+ queryParams.page = String(page);
349
+ if (from)
350
+ queryParams.from = from;
351
+ if (to)
352
+ queryParams.to = to;
353
+ if (search)
354
+ queryParams.search = search;
355
+ const data = await ziaraRequest("GET", "/hotel-bookings", undefined, queryParams);
356
+ return {
357
+ content: [{ type: "text", text: `📚 All Bookings:\n\n${JSON.stringify(data, null, 2)}` }],
358
+ };
359
+ }
360
+ catch (err) {
361
+ return { content: [{ type: "text", text: `❌ Error: ${err.message}` }] };
362
+ }
363
+ });
364
+ // ─── 8. Get Booking Details ───────────────────────────────────────────────────
365
+ server.tool("get_booking_details", "Get comprehensive details of a specific booking by ID or tracking ID", {
366
+ id: z.string().optional().describe("Booking ID (required if trackingId not provided)"),
367
+ trackingId: z.string().optional().describe("Tracking ID (required if id not provided)"),
368
+ }, async ({ id, trackingId }) => {
369
+ try {
370
+ if (!id && !trackingId) {
371
+ return { content: [{ type: "text", text: "❌ Please provide either id or trackingId." }] };
372
+ }
373
+ const body = {};
374
+ if (id)
375
+ body.id = id;
376
+ if (trackingId)
377
+ body.trackingId = trackingId;
378
+ const data = await ziaraRequest("POST", "/hotels/book-detail", body);
379
+ return {
380
+ content: [{ type: "text", text: `📄 Booking Details:\n\n${JSON.stringify(data, null, 2)}` }],
381
+ };
382
+ }
383
+ catch (err) {
384
+ return { content: [{ type: "text", text: `❌ Error: ${err.message}` }] };
385
+ }
386
+ });
387
+ // ─── Start Server ─────────────────────────────────────────────────────────────
388
+ async function main() {
389
+ await autoLogin();
390
+ const transport = new StdioServerTransport();
391
+ await server.connect(transport);
392
+ console.error("🚀 Ziara MCP Server running...");
393
+ }
394
+ main().catch((err) => {
395
+ console.error("💥 Fatal error:", err);
396
+ process.exit(1);
397
+ });
398
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,46 @@
1
+ {
2
+ "name": "ziara-mcp-server",
3
+ "version": "1.0.0",
4
+ "description": "MCP Server for Ziara B2B Hotel Booking API — search, book, and manage hotel reservations via AI assistants",
5
+ "type": "module",
6
+ "main": "build/index.js",
7
+ "bin": {
8
+ "ziara-mcp-server": "build/index.js"
9
+ },
10
+ "files": [
11
+ "build"
12
+ ],
13
+ "scripts": {
14
+ "build": "tsc && npm run postbuild",
15
+ "postbuild": "node -e \"const fs=require('fs');const f='build/index.js';const c=fs.readFileSync(f,'utf8');if(!c.startsWith('#!/usr/bin/env node'))fs.writeFileSync(f,'#!/usr/bin/env node\\n'+c);\"",
16
+ "start": "node build/index.js",
17
+ "dev": "tsx src/index.ts",
18
+ "inspect": "npx @modelcontextprotocol/inspector npx tsx src/index.ts",
19
+ "prepublishOnly": "npm run build"
20
+ },
21
+ "keywords": [
22
+ "mcp",
23
+ "mcp-server",
24
+ "model-context-protocol",
25
+ "hotel-booking",
26
+ "ziara",
27
+ "travel",
28
+ "ai",
29
+ "claude",
30
+ "openai"
31
+ ],
32
+ "author": "your-name",
33
+ "license": "ISC",
34
+ "dependencies": {
35
+ "@modelcontextprotocol/sdk": "^1.29.0",
36
+ "zod": "^4.3.6"
37
+ },
38
+ "devDependencies": {
39
+ "@types/node": "^25.9.2",
40
+ "tsx": "^4.21.0",
41
+ "typescript": "^5.9.3"
42
+ },
43
+ "engines": {
44
+ "node": ">=18"
45
+ }
46
+ }