From bbd2e16820fcf4d53602451b7c0fcbe6c7ad30dc Mon Sep 17 00:00:00 2001 From: businesshotelsdeveloper-dot Date: Tue, 21 Apr 2026 12:04:19 -0700 Subject: [PATCH 001/138] Create business-hotels-mcp Initial implementation of the Business Hotels MCP server. This tool integrates the Universal Agentic API to allow AI agents to perform real-time price verification, hotel discovery, and 'Bleisure' travel bookings. Built on the Model Context Protocol to support zero-config infrastructure for LLMs --- src/business-hotels-mcp | 1 + 1 file changed, 1 insertion(+) create mode 100644 src/business-hotels-mcp diff --git a/src/business-hotels-mcp b/src/business-hotels-mcp new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/src/business-hotels-mcp @@ -0,0 +1 @@ + From ad4b89f355f9356205ce3c06aeff8f2a0e14e6eb Mon Sep 17 00:00:00 2001 From: businesshotelsdeveloper-dot Date: Tue, 21 Apr 2026 12:15:01 -0700 Subject: [PATCH 002/138] Delete src/business-hotels-mcp --- src/business-hotels-mcp | 1 - 1 file changed, 1 deletion(-) delete mode 100644 src/business-hotels-mcp diff --git a/src/business-hotels-mcp b/src/business-hotels-mcp deleted file mode 100644 index 8b13789179..0000000000 --- a/src/business-hotels-mcp +++ /dev/null @@ -1 +0,0 @@ - From b388d7f07aab5edd3c2aabae88a1ea6e43d97968 Mon Sep 17 00:00:00 2001 From: businesshotelsdeveloper-dot Date: Tue, 21 Apr 2026 12:16:30 -0700 Subject: [PATCH 003/138] Create package.json --- src/business-hotels-mcp/package.json | 14 ++++++++++++++ 1 file changed, 14 insertions(+) create mode 100644 src/business-hotels-mcp/package.json diff --git a/src/business-hotels-mcp/package.json b/src/business-hotels-mcp/package.json new file mode 100644 index 0000000000..3cdc4b5e41 --- /dev/null +++ b/src/business-hotels-mcp/package.json @@ -0,0 +1,14 @@ +{ + "name": "business-hotels-mcp", + "version": "1.0.0", + "description": "MCP server for BusinessHotels.com travel tools", + "main": "build/index.js", + "type": "module", + "scripts": { + "build": "tsc", + "start": "node build/index.js" + }, + "dependencies": { + "@modelcontextprotocol/sdk": "^1.0.0" + } +} From bc9cd960179ba66a2e706ed17c18854beeb7c3c5 Mon Sep 17 00:00:00 2001 From: businesshotelsdeveloper-dot Date: Tue, 21 Apr 2026 12:23:39 -0700 Subject: [PATCH 004/138] Create index.ts --- src/business-hotels-mcp/index.ts | 89 ++++++++++++++++++++++++++++++++ 1 file changed, 89 insertions(+) create mode 100644 src/business-hotels-mcp/index.ts diff --git a/src/business-hotels-mcp/index.ts b/src/business-hotels-mcp/index.ts new file mode 100644 index 0000000000..4c1fc093a1 --- /dev/null +++ b/src/business-hotels-mcp/index.ts @@ -0,0 +1,89 @@ +import { Server } from "@modelcontextprotocol/sdk/server/index.js"; +import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js"; +import { + CallToolRequestSchema, + ListToolsRequestSchema, +} from "@modelcontextprotocol/sdk/types.js"; + +/** + * Initialize the BusinessHotels MCP Server + */ +const server = new Server( + { + name: "business-hotels-mcp", + version: "1.0.0", + }, + { + capabilities: { + tools: {}, + }, + } +); + +/** + * Tool Listing: + * This tells the AI what capabilities are available. + */ +server.setRequestHandler(ListToolsRequestSchema, async () => { + return { + tools: [ + { + name: "get_live_hotel_rates", + description: "Get live hotel rates by hotel name, dates, adults, and currency.", + inputSchema: { + type: "object", + properties: { + hotelName: { + type: "string", + description: "Full hotel name, ideally with city/state/country." + }, + checkinDate: { + type: "string", + description: "Check-in date (YYYY-MM-DD)" + }, + checkoutDate: { + type: "string", + description: "Check-out date (YYYY-MM-DD)" + }, + adults: { + type: "integer", + minimum: 1, + default: 2 + }, + currency: { + type: "string", + default: "USD" + } + }, + required: ["hotelName", "checkinDate", "checkoutDate"] + } + } + ] + }; +}); + +/** + * Tool Execution: + * This is where you will eventually add the fetch() call to your + * PHP endpoint: https://www.businesshotels.com/mcp-server.php + */ +server.setRequestHandler(CallToolRequestSchema, async (request) => { + if (request.params.name === "get_live_hotel_rates") { + // Logic for calling your API will go here + return { + content: [ + { + type: "text", + text: "Hotel rate search initialized for " + request.params.arguments?.hotelName + } + ] + }; + } + throw new Error("Tool not found"); +}); + +/** + * Start the server using Standard Input/Output (STDIO) + */ +const transport = new StdioServerTransport(); +await server.connect(transport); From fede71956d5b9ac92c9336d171d65f16b03bea42 Mon Sep 17 00:00:00 2001 From: businesshotelsdeveloper-dot Date: Tue, 21 Apr 2026 12:24:39 -0700 Subject: [PATCH 005/138] Create tsconfig.json --- src/business-hotels-mcp/tsconfig.json | 12 ++++++++++++ 1 file changed, 12 insertions(+) create mode 100644 src/business-hotels-mcp/tsconfig.json diff --git a/src/business-hotels-mcp/tsconfig.json b/src/business-hotels-mcp/tsconfig.json new file mode 100644 index 0000000000..17fa3ecf0d --- /dev/null +++ b/src/business-hotels-mcp/tsconfig.json @@ -0,0 +1,12 @@ +{ + "compilerOptions": { + "target": "ES2022", + "module": "NodeNext", + "moduleResolution": "NodeNext", + "outDir": "build", + "strict": true, + "skipLibCheck": true, + "esModuleInterop": true + }, + "include": ["index.ts"] +} From 17a73332d842548ebf55aa7ba17ddc13e715308c Mon Sep 17 00:00:00 2001 From: businesshotelsdeveloper-dot Date: Tue, 21 Apr 2026 12:26:36 -0700 Subject: [PATCH 006/138] Update index.ts --- src/business-hotels-mcp/index.ts | 53 ++++++++++++++++++++++++-------- 1 file changed, 41 insertions(+), 12 deletions(-) diff --git a/src/business-hotels-mcp/index.ts b/src/business-hotels-mcp/index.ts index 4c1fc093a1..f7f41e6787 100644 --- a/src/business-hotels-mcp/index.ts +++ b/src/business-hotels-mcp/index.ts @@ -64,26 +64,55 @@ server.setRequestHandler(ListToolsRequestSchema, async () => { /** * Tool Execution: - * This is where you will eventually add the fetch() call to your - * PHP endpoint: https://www.businesshotels.com/mcp-server.php + * Connects the AI request to your live PHP backend. */ server.setRequestHandler(CallToolRequestSchema, async (request) => { if (request.params.name === "get_live_hotel_rates") { - // Logic for calling your API will go here - return { - content: [ - { - type: "text", - text: "Hotel rate search initialized for " + request.params.arguments?.hotelName - } - ] - }; + const args = request.params.arguments as any; + + try { + // Build the URL for your mcp-server.php endpoint + const url = new URL("https://www.businesshotels.com/mcp-server.php"); + url.searchParams.append("route", "tools"); + url.searchParams.append("hotel", args.hotelName); + url.searchParams.append("checkin", args.checkinDate); + url.searchParams.append("checkout", args.checkoutDate); + url.searchParams.append("adults", (args.adults || 2).toString()); + url.searchParams.append("currency", args.currency || "USD"); + + const response = await fetch(url.toString()); + + if (!response.ok) { + throw new Error(`Backend error: ${response.statusText}`); + } + + const data = await response.json(); + + return { + content: [ + { + type: "text", + text: JSON.stringify(data, null, 2) + } + ] + }; + } catch (error: any) { + return { + isError: true, + content: [ + { + type: "text", + text: `Error fetching rates from BusinessHotels: ${error.message}` + } + ] + }; + } } throw new Error("Tool not found"); }); /** - * Start the server using Standard Input/Output (STDIO) + * Start the server using Standard Input/Output */ const transport = new StdioServerTransport(); await server.connect(transport); From cc1c8a1cdb6b0f6df098e7bc265bf4f3e36bf96f Mon Sep 17 00:00:00 2001 From: businesshotelsdeveloper-dot Date: Tue, 21 Apr 2026 12:55:01 -0700 Subject: [PATCH 007/138] Update package.json --- src/business-hotels-mcp/package.json | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/src/business-hotels-mcp/package.json b/src/business-hotels-mcp/package.json index 3cdc4b5e41..f83b982b12 100644 --- a/src/business-hotels-mcp/package.json +++ b/src/business-hotels-mcp/package.json @@ -1,13 +1,24 @@ { "name": "business-hotels-mcp", "version": "1.0.0", - "description": "MCP server for BusinessHotels.com travel tools", + "description": "Universal Agentic API for real-time hotel pricing and booking automation via BusinessHotels.com", "main": "build/index.js", "type": "module", "scripts": { "build": "tsc", - "start": "node build/index.js" + "start": "node build/index.js", + "prepare": "npm run build" }, + "keywords": [ + "mcp", + "model-context-protocol", + "travel", + "hotels", + "booking", + "agentic-ai" + ], + "author": "Drago Maximov", + "license": "MIT", "dependencies": { "@modelcontextprotocol/sdk": "^1.0.0" } From 7719e6ad88450d0c12d7c88dff7f1a927079cb0b Mon Sep 17 00:00:00 2001 From: businesshotelsdeveloper-dot Date: Tue, 21 Apr 2026 13:44:08 -0700 Subject: [PATCH 008/138] Update package.json --- src/business-hotels-mcp/package.json | 26 ++++++++++++++++++++++---- 1 file changed, 22 insertions(+), 4 deletions(-) diff --git a/src/business-hotels-mcp/package.json b/src/business-hotels-mcp/package.json index f83b982b12..153eec0bca 100644 --- a/src/business-hotels-mcp/package.json +++ b/src/business-hotels-mcp/package.json @@ -1,25 +1,43 @@ { - "name": "business-hotels-mcp", - "version": "1.0.0", + "name": "@businesshotels/mcp-server", + "version": "1.0.1", "description": "Universal Agentic API for real-time hotel pricing and booking automation via BusinessHotels.com", "main": "build/index.js", "type": "module", + "bin": { + "business-hotels-mcp": "build/index.js" + }, + "files": [ + "build" + ], "scripts": { "build": "tsc", "start": "node build/index.js", "prepare": "npm run build" }, + "repository": { + "type": "git", + "url": "git+https://github.com/businesshotelsdeveloper-dot/business-hotels.git" + }, "keywords": [ "mcp", "model-context-protocol", "travel", "hotels", "booking", - "agentic-ai" + "agentic-ai", + "mcp-server" ], "author": "Drago Maximov", "license": "MIT", + "homepage": "https://www.businesshotels.com", + "bugs": { + "url": "https://github.com/businesshotelsdeveloper-dot/business-hotels/issues" + }, "dependencies": { - "@modelcontextprotocol/sdk": "^1.0.0" + "@modelcontextprotocol/sdk": "^1.0.1" + }, + "devDependencies": { + "typescript": "^5.0.0" } } From 95a445501efb363c4f2e86598533a713bdc27fc5 Mon Sep 17 00:00:00 2001 From: businesshotelsdeveloper-dot Date: Tue, 21 Apr 2026 18:06:08 -0700 Subject: [PATCH 009/138] Create README.md --- src/business-hotels-mcp/README.md | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) create mode 100644 src/business-hotels-mcp/README.md diff --git a/src/business-hotels-mcp/README.md b/src/business-hotels-mcp/README.md new file mode 100644 index 0000000000..39c44b7618 --- /dev/null +++ b/src/business-hotels-mcp/README.md @@ -0,0 +1,22 @@ +## Connection & Discovery +This server supports the Model Context Protocol (MCP) and is optimized for autonomous agents. + +- **MCP Tools Endpoint:** `https://www.businesshotels.com/mcp-server.php?route=tools` +- **OpenAPI Spec:** [openapi.json](https://www.businesshotels.com/openapi.json) +- **Plugin Manifest:** [.well-known/ai-plugin.json](https://www.businesshotels.com/.well-known/ai-plugin.json) +- **Full API Documentation:** [Tool Configuration](https://www.businesshotels.com/tool-config.html) + +## Quick Configuration (Claude/Desktop) +To add this to your local MCP settings: +```json +{ + "mcpServers": { + "businesshotels-universal-agentic-api": { + "command": "npx", + "args": ["-y", "@businesshotels/mcp-server"], + "env": { + "BUSINESS_HOTELS_API_KEY": "YOUR_KEY_HERE" + } + } + } +} From 38d2b2f35861138ab45ee69e4db5b5c64b6a8e3f Mon Sep 17 00:00:00 2001 From: businesshotelsdeveloper-dot Date: Tue, 21 Apr 2026 18:34:51 -0700 Subject: [PATCH 010/138] Update README.md --- src/business-hotels-mcp/README.md | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/src/business-hotels-mcp/README.md b/src/business-hotels-mcp/README.md index 39c44b7618..38e85b2d0f 100644 --- a/src/business-hotels-mcp/README.md +++ b/src/business-hotels-mcp/README.md @@ -20,3 +20,18 @@ To add this to your local MCP settings: } } } + + +## πŸ›  Testing the API +You can test the BusinessHotels logic directly from your terminal to verify the live hotel rates: + +### cURL (Linux/Mac/WSL) +```bash +curl -s -X POST "[https://www.businesshotels.com/mcp-server.php?route=tools/get_live_hotel_rates](https://www.businesshotels.com/mcp-server.php?route=tools/get_live_hotel_rates)" \ + -H "Content-Type: application/json" \ + -H "X-API-KEY: test-live-hotel-rates2025" \ + -d '{ + "hotelName": "Marriott Marquis, San Francisco, US", + "checkinDate": "2026-07-15", + "checkoutDate": "2026-07-16" + }' | python3 -m json.tool From 31cbc44bc2019bb8a5d0af225dbebfb24c644100 Mon Sep 17 00:00:00 2001 From: businesshotelsdeveloper-dot Date: Tue, 21 Apr 2026 18:42:24 -0700 Subject: [PATCH 011/138] Update README.md --- src/business-hotels-mcp/README.md | 51 +++++++++++++++++++++++++++---- 1 file changed, 45 insertions(+), 6 deletions(-) diff --git a/src/business-hotels-mcp/README.md b/src/business-hotels-mcp/README.md index 38e85b2d0f..af2f76f500 100644 --- a/src/business-hotels-mcp/README.md +++ b/src/business-hotels-mcp/README.md @@ -1,13 +1,14 @@ ## Connection & Discovery -This server supports the Model Context Protocol (MCP) and is optimized for autonomous agents. +This server supports the **Model Context Protocol (MCP)** and is optimized for autonomous agents. -- **MCP Tools Endpoint:** `https://www.businesshotels.com/mcp-server.php?route=tools` -- **OpenAPI Spec:** [openapi.json](https://www.businesshotels.com/openapi.json) -- **Plugin Manifest:** [.well-known/ai-plugin.json](https://www.businesshotels.com/.well-known/ai-plugin.json) -- **Full API Documentation:** [Tool Configuration](https://www.businesshotels.com/tool-config.html) +* **MCP Tools Endpoint:** `https://www.businesshotels.com/mcp-server.php?route=tools` +* **OpenAPI Spec:** [openapi.json](https://www.businesshotels.com/openapi.json) +* **Plugin Manifest:** [.well-known/ai-plugin.json](https://www.businesshotels.com/.well-known/ai-plugin.json) +* **Full API Documentation:** [Tool Configuration](https://www.businesshotels.com/tool-config.html) ## Quick Configuration (Claude/Desktop) -To add this to your local MCP settings: +To add the Universal Agentic API to your local MCP settings: + ```json { "mcpServers": { @@ -35,3 +36,41 @@ curl -s -X POST "[https://www.businesshotels.com/mcp-server.php?route=tools/get_ "checkinDate": "2026-07-15", "checkoutDate": "2026-07-16" }' | python3 -m json.tool + +(Python) + + + import requests + +url = "[https://www.businesshotels.com/mcp-server.php?route=tools/get_live_hotel_rates](https://www.businesshotels.com/mcp-server.php?route=tools/get_live_hotel_rates)" +headers = {"X-API-KEY": "test-live-hotel-rates2025", "Content-Type": "application/json"} +payload = { + "hotelName": "Luxor Las Vegas Las Vegas US", + "checkinDate": "2026-07-20", + "checkoutDate": "2026-07-21", + "adults": 2, + "currency": "USD" +} + +try: + response = requests.post(url, json=payload, headers=headers, timeout=10) + data = response.json() + rates = data.get("rates") or {} + raw_price = rates.get("display_all_in_total", "") + + if not raw_price or str(raw_price).strip() == "": + print(f"βšͺ Sold out β€” no inventory for these dates / occupancy") + else: + # Clean price string (handle commas) and convert to float + price = float(str(raw_price).replace(",", "")) + + print(f"Hotel: {data.get('hotel_name')}, {data.get('city_name')}") + print(f"Price: ${price:.2f} {rates.get('currency','USD')} (taxes & fees included)") + print(f"Score: {data.get('best_match_score', 0):.2f} (1.0 = perfect match)") + print(f"Book Now: {data.get('booking_page_live_rates')}") + + if data.get("best_match_score", 1) < 0.85: + print("⚠️ Low confidence β€” confirm hotel identity before booking") + +except Exception as e: + print(f"Error: {e}") From 60594d86ba3159acfb2d4458ae7919266f3fd518 Mon Sep 17 00:00:00 2001 From: businesshotelsdeveloper-dot Date: Tue, 21 Apr 2026 18:48:13 -0700 Subject: [PATCH 012/138] Update README.md --- src/business-hotels-mcp/README.md | 61 ++++++++++++++++++++++++++++--- 1 file changed, 56 insertions(+), 5 deletions(-) diff --git a/src/business-hotels-mcp/README.md b/src/business-hotels-mcp/README.md index af2f76f500..9ab7b30c34 100644 --- a/src/business-hotels-mcp/README.md +++ b/src/business-hotels-mcp/README.md @@ -26,20 +26,71 @@ To add the Universal Agentic API to your local MCP settings: ## πŸ›  Testing the API You can test the BusinessHotels logic directly from your terminal to verify the live hotel rates: -### cURL (Linux/Mac/WSL) -```bash -curl -s -X POST "[https://www.businesshotels.com/mcp-server.php?route=tools/get_live_hotel_rates](https://www.businesshotels.com/mcp-server.php?route=tools/get_live_hotel_rates)" \ +### (PowerShell) +# PowerShell β€” Windows 10/11........................................................................................ +$body = @{ + hotelName = "Marriott Marquis, San Francisco, US" + checkinDate = "2026-07-15" + checkoutDate = "2026-07-17" + adults = 2 + currency = "USD" +} | ConvertTo-Json +Invoke-RestMethod -Method POST ` + -Uri "https://www.businesshotels.com/mcp-server.php?route=tools/get_live_hotel_rates" ` + -Headers @{ "X-API-KEY" = "test-live-hotel-rates2025" } ` + -ContentType "application/json" ` + -Body $body + + +:: Windows Command Prompt β€” paste as one line....................................................................... +curl -s -X POST "https://www.businesshotels.com/mcp-server.php?route=tools/get_live_hotel_rates" ^ + -H "Content-Type: application/json" ^ + -H "X-API-KEY: test-live-hotel-rates2025" ^ + -d "{\"hotelName\":\"Marriott Marquis, San Francisco, US\",\"checkinDate\":\"2026-07-15\",\"checkoutDate\":\"2026-07-17\",\"adults\":2,\"currency\":\"USD\"}" + + + + +# Mac / Linux / WSL / Git Bash.................................................................................... +curl -s -X POST \ + "https://www.businesshotels.com/mcp-server.php?route=tools/get_live_hotel_rates" \ -H "Content-Type: application/json" \ -H "X-API-KEY: test-live-hotel-rates2025" \ -d '{ "hotelName": "Marriott Marquis, San Francisco, US", "checkinDate": "2026-07-15", - "checkoutDate": "2026-07-16" + "checkoutDate": "2026-07-17", + "adults": 2, + "currency": "USD" }' | python3 -m json.tool -(Python) +// Browser DevTools Console (F12 β†’ Console)......................................................................... +fetch("https://www.businesshotels.com/mcp-server.php?route=tools/get_live_hotel_rates", { + method: "POST", + headers: { + "Content-Type": "application/json", + "X-API-KEY": "test-live-hotel-rates2025" + }, + body: JSON.stringify({ + hotelName: "Marriott Marquis, San Francisco, US", + checkinDate: "2026-07-15", + checkoutDate: "2026-07-17", + adults: 2, + currency: "USD" + }) +}).then(r => r.json()).then(data => { + console.log("βœ… Hotel:", data.hotel_name); + console.log("πŸ’° Price:", `$${data.rates.display_all_in_total} ${data.rates.currency}`); + console.log("πŸ”— Book:", data.booking_page_live_rates); + console.log("πŸ“Š Score:", data.best_match_score); + console.log("Full response:", data); +}); + + + +Python 3 β€” Single Hotel (Production Ready)................................................................... import requests url = "[https://www.businesshotels.com/mcp-server.php?route=tools/get_live_hotel_rates](https://www.businesshotels.com/mcp-server.php?route=tools/get_live_hotel_rates)" From 03a6fb402796ba477cab78cbe24483a510f07908 Mon Sep 17 00:00:00 2001 From: businesshotelsdeveloper-dot Date: Tue, 21 Apr 2026 18:51:57 -0700 Subject: [PATCH 013/138] Update README.md --- src/business-hotels-mcp/README.md | 119 +++--------------------------- 1 file changed, 10 insertions(+), 109 deletions(-) diff --git a/src/business-hotels-mcp/README.md b/src/business-hotels-mcp/README.md index 9ab7b30c34..436e9508a9 100644 --- a/src/business-hotels-mcp/README.md +++ b/src/business-hotels-mcp/README.md @@ -1,13 +1,17 @@ +# BusinessHotels Universal Agentic API (MCP) + +This is the official [Model Context Protocol (MCP)](https://github.com/modelcontextprotocol) server for **BusinessHotels.com**. It provides autonomous AI agents with real-time access to live hotel inventory, rates, and booking capabilities. + ## Connection & Discovery -This server supports the **Model Context Protocol (MCP)** and is optimized for autonomous agents. +This server is optimized for autonomous agents and "Bleisure" (business + leisure) travel workflows. -* **MCP Tools Endpoint:** `https://www.businesshotels.com/mcp-server.php?route=tools` -* **OpenAPI Spec:** [openapi.json](https://www.businesshotels.com/openapi.json) -* **Plugin Manifest:** [.well-known/ai-plugin.json](https://www.businesshotels.com/.well-known/ai-plugin.json) -* **Full API Documentation:** [Tool Configuration](https://www.businesshotels.com/tool-config.html) +- **MCP Tools Endpoint:** `https://www.businesshotels.com/mcp-server.php?route=tools` +- **OpenAPI Spec:** [openapi.json](https://www.businesshotels.com/openapi.json) +- **Plugin Manifest:** [.well-known/ai-plugin.json](https://www.businesshotels.com/.well-known/ai-plugin.json) +- **Full API Documentation:** [Tool Configuration](https://www.businesshotels.com/tool-config.html) ## Quick Configuration (Claude/Desktop) -To add the Universal Agentic API to your local MCP settings: +To add the Universal Agentic API to your local MCP settings, paste this into your `claude_desktop_config.json`: ```json { @@ -21,107 +25,4 @@ To add the Universal Agentic API to your local MCP settings: } } } - - -## πŸ›  Testing the API -You can test the BusinessHotels logic directly from your terminal to verify the live hotel rates: - -### (PowerShell) -# PowerShell β€” Windows 10/11........................................................................................ -$body = @{ - hotelName = "Marriott Marquis, San Francisco, US" - checkinDate = "2026-07-15" - checkoutDate = "2026-07-17" - adults = 2 - currency = "USD" -} | ConvertTo-Json -Invoke-RestMethod -Method POST ` - -Uri "https://www.businesshotels.com/mcp-server.php?route=tools/get_live_hotel_rates" ` - -Headers @{ "X-API-KEY" = "test-live-hotel-rates2025" } ` - -ContentType "application/json" ` - -Body $body - - -:: Windows Command Prompt β€” paste as one line....................................................................... -curl -s -X POST "https://www.businesshotels.com/mcp-server.php?route=tools/get_live_hotel_rates" ^ - -H "Content-Type: application/json" ^ - -H "X-API-KEY: test-live-hotel-rates2025" ^ - -d "{\"hotelName\":\"Marriott Marquis, San Francisco, US\",\"checkinDate\":\"2026-07-15\",\"checkoutDate\":\"2026-07-17\",\"adults\":2,\"currency\":\"USD\"}" - - - - -# Mac / Linux / WSL / Git Bash.................................................................................... -curl -s -X POST \ - "https://www.businesshotels.com/mcp-server.php?route=tools/get_live_hotel_rates" \ - -H "Content-Type: application/json" \ - -H "X-API-KEY: test-live-hotel-rates2025" \ - -d '{ - "hotelName": "Marriott Marquis, San Francisco, US", - "checkinDate": "2026-07-15", - "checkoutDate": "2026-07-17", - "adults": 2, - "currency": "USD" - }' | python3 -m json.tool - - - -// Browser DevTools Console (F12 β†’ Console)......................................................................... -fetch("https://www.businesshotels.com/mcp-server.php?route=tools/get_live_hotel_rates", { - method: "POST", - headers: { - "Content-Type": "application/json", - "X-API-KEY": "test-live-hotel-rates2025" - }, - body: JSON.stringify({ - hotelName: "Marriott Marquis, San Francisco, US", - checkinDate: "2026-07-15", - checkoutDate: "2026-07-17", - adults: 2, - currency: "USD" - }) -}).then(r => r.json()).then(data => { - console.log("βœ… Hotel:", data.hotel_name); - console.log("πŸ’° Price:", `$${data.rates.display_all_in_total} ${data.rates.currency}`); - console.log("πŸ”— Book:", data.booking_page_live_rates); - console.log("πŸ“Š Score:", data.best_match_score); - console.log("Full response:", data); -}); - - -Python 3 β€” Single Hotel (Production Ready)................................................................... - import requests - -url = "[https://www.businesshotels.com/mcp-server.php?route=tools/get_live_hotel_rates](https://www.businesshotels.com/mcp-server.php?route=tools/get_live_hotel_rates)" -headers = {"X-API-KEY": "test-live-hotel-rates2025", "Content-Type": "application/json"} -payload = { - "hotelName": "Luxor Las Vegas Las Vegas US", - "checkinDate": "2026-07-20", - "checkoutDate": "2026-07-21", - "adults": 2, - "currency": "USD" -} - -try: - response = requests.post(url, json=payload, headers=headers, timeout=10) - data = response.json() - rates = data.get("rates") or {} - raw_price = rates.get("display_all_in_total", "") - - if not raw_price or str(raw_price).strip() == "": - print(f"βšͺ Sold out β€” no inventory for these dates / occupancy") - else: - # Clean price string (handle commas) and convert to float - price = float(str(raw_price).replace(",", "")) - - print(f"Hotel: {data.get('hotel_name')}, {data.get('city_name')}") - print(f"Price: ${price:.2f} {rates.get('currency','USD')} (taxes & fees included)") - print(f"Score: {data.get('best_match_score', 0):.2f} (1.0 = perfect match)") - print(f"Book Now: {data.get('booking_page_live_rates')}") - - if data.get("best_match_score", 1) < 0.85: - print("⚠️ Low confidence β€” confirm hotel identity before booking") - -except Exception as e: - print(f"Error: {e}") From 9e4b3d65f22213909f85f1dcdb39843dbbeb901f Mon Sep 17 00:00:00 2001 From: businesshotelsdeveloper-dot Date: Tue, 21 Apr 2026 18:54:25 -0700 Subject: [PATCH 014/138] Update README.md --- src/business-hotels-mcp/README.md | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/src/business-hotels-mcp/README.md b/src/business-hotels-mcp/README.md index 436e9508a9..b490d9200d 100644 --- a/src/business-hotels-mcp/README.md +++ b/src/business-hotels-mcp/README.md @@ -25,4 +25,21 @@ To add the Universal Agentic API to your local MCP settings, paste this into you } } } - + +πŸ›  Testing the API +Verify the live hotel rates and agentic matching logic directly from your terminal: + +1. cURL (Mac / Linux / WSL / Git Bash) +# Bash β€” Quick terminal test with JSON formatting. + +curl -s -X POST "[https://www.businesshotels.com/mcp-server.php?route=tools/get_live_hotel_rates](https://www.businesshotels.com/mcp-server.php?route=tools/get_live_hotel_rates)" \ + -H "Content-Type: application/json" \ + -H "X-API-KEY: test-live-hotel-rates2025" \ + -d '{ + "hotelName": "Marriott Marquis, San Francisco, US", + "checkinDate": "2026-07-15", + "checkoutDate": "2026-07-16", + "adults": 2, + "currency": "USD" + }' | python3 -m json.tool + From 8fc97c73eee25f19018723bcc4e4496d6991d73e Mon Sep 17 00:00:00 2001 From: businesshotelsdeveloper-dot Date: Tue, 21 Apr 2026 18:56:17 -0700 Subject: [PATCH 015/138] Update README.md --- src/business-hotels-mcp/README.md | 82 ++++++++++++++++++++++++++++++- 1 file changed, 81 insertions(+), 1 deletion(-) diff --git a/src/business-hotels-mcp/README.md b/src/business-hotels-mcp/README.md index b490d9200d..43d61c6b5a 100644 --- a/src/business-hotels-mcp/README.md +++ b/src/business-hotels-mcp/README.md @@ -29,7 +29,7 @@ To add the Universal Agentic API to your local MCP settings, paste this into you πŸ›  Testing the API Verify the live hotel rates and agentic matching logic directly from your terminal: -1. cURL (Mac / Linux / WSL / Git Bash) +### 1. cURL (Mac / Linux / WSL / Git Bash) # Bash β€” Quick terminal test with JSON formatting. curl -s -X POST "[https://www.businesshotels.com/mcp-server.php?route=tools/get_live_hotel_rates](https://www.businesshotels.com/mcp-server.php?route=tools/get_live_hotel_rates)" \ @@ -43,3 +43,83 @@ curl -s -X POST "[https://www.businesshotels.com/mcp-server.php?route=tools/get_ "currency": "USD" }' | python3 -m json.tool + +### 2. Python 3 (Production Ready) +**# Python β€” Best for backend logic. Includes "Sold Out" and "Confidence Score" guards.** +```python +import requests + +url = "[https://www.businesshotels.com/mcp-server.php?route=tools/get_live_hotel_rates](https://www.businesshotels.com/mcp-server.php?route=tools/get_live_hotel_rates)" +headers = {"X-API-KEY": "test-live-hotel-rates2025", "Content-Type": "application/json"} +payload = { + "hotelName": "Luxor Las Vegas Las Vegas US", + "checkinDate": "2026-07-20", + "checkoutDate": "2026-07-21", + "adults": 2, + "currency": "USD" +} + +try: + response = requests.post(url, json=payload, headers=headers, timeout=10) + data = response.json() + rates = data.get("rates") or {} + raw_price = rates.get("display_all_in_total", "") + + if not raw_price or str(raw_price).strip() == "": + print(f"βšͺ Sold out β€” no inventory for these dates / occupancy") + else: + # Clean price string (handle commas) and convert to float + price = float(str(raw_price).replace(",", "")) + + print(f"Hotel: {data.get('hotel_name')}, {data.get('city_name')}") + print(f"Price: ${price:.2f} {rates.get('currency','USD')} (taxes & fees included)") + print(f"Score: {data.get('best_match_score', 0):.2f} (1.0 = perfect match)") + print(f"Book Now: {data.get('booking_page_live_rates')}") + + if data.get("best_match_score", 1) < 0.85: + print("⚠️ Low confidence β€” confirm hotel identity before booking") + +except Exception as e: + print(f"Error: {e}") + + +### 3. PowerShell (Windows Native) +# PowerShell β€” For Windows 10/11 terminal environments. + +PowerShell +$body = @{ + hotelName = "Marriott Marquis, San Francisco, US" + checkinDate = "2026-07-15" + checkoutDate = "2026-07-17" + adults = 2 + currency = "USD" +} | ConvertTo-Json + +Invoke-RestMethod -Method POST ` + -Uri "[https://www.businesshotels.com/mcp-server.php?route=tools/get_live_hotel_rates](https://www.businesshotels.com/mcp-server.php?route=tools/get_live_hotel_rates)" ` + -Headers @{ "X-API-KEY" = "test-live-hotel-rates2025" } ` + -ContentType "application/json" ` + -Body $body +### 4. Browser DevTools Console +// JavaScript β€” Paste directly into F12 Console to test without an IDE. + +JavaScript +fetch("[https://www.businesshotels.com/mcp-server.php?route=tools/get_live_hotel_rates](https://www.businesshotels.com/mcp-server.php?route=tools/get_live_hotel_rates)", { + method: "POST", + headers: { + "Content-Type": "application/json", + "X-API-KEY": "test-live-hotel-rates2025" + }, + body: JSON.stringify({ + hotelName: "Marriott Marquis, San Francisco, US", + checkinDate: "2026-07-15", + checkoutDate: "2026-07-17", + adults: 2, + currency: "USD" + }) +}).then(r => r.json()).then(data => { + console.log("βœ… Hotel:", data.hotel_name); + console.log("πŸ’° Price:", `$${data.rates.display_all_in_total} ${data.rates.currency}`); + console.log("πŸ“Š Match Score:", data.best_match_score); +}); + From aab2079245b0522b385fed9e446887b92b7c0e99 Mon Sep 17 00:00:00 2001 From: businesshotelsdeveloper-dot Date: Tue, 21 Apr 2026 18:58:44 -0700 Subject: [PATCH 016/138] Update README.md --- src/business-hotels-mcp/README.md | 97 ------------------------------- 1 file changed, 97 deletions(-) diff --git a/src/business-hotels-mcp/README.md b/src/business-hotels-mcp/README.md index 43d61c6b5a..51b58dcded 100644 --- a/src/business-hotels-mcp/README.md +++ b/src/business-hotels-mcp/README.md @@ -26,100 +26,3 @@ To add the Universal Agentic API to your local MCP settings, paste this into you } } -πŸ›  Testing the API -Verify the live hotel rates and agentic matching logic directly from your terminal: - -### 1. cURL (Mac / Linux / WSL / Git Bash) -# Bash β€” Quick terminal test with JSON formatting. - -curl -s -X POST "[https://www.businesshotels.com/mcp-server.php?route=tools/get_live_hotel_rates](https://www.businesshotels.com/mcp-server.php?route=tools/get_live_hotel_rates)" \ - -H "Content-Type: application/json" \ - -H "X-API-KEY: test-live-hotel-rates2025" \ - -d '{ - "hotelName": "Marriott Marquis, San Francisco, US", - "checkinDate": "2026-07-15", - "checkoutDate": "2026-07-16", - "adults": 2, - "currency": "USD" - }' | python3 -m json.tool - - -### 2. Python 3 (Production Ready) -**# Python β€” Best for backend logic. Includes "Sold Out" and "Confidence Score" guards.** -```python -import requests - -url = "[https://www.businesshotels.com/mcp-server.php?route=tools/get_live_hotel_rates](https://www.businesshotels.com/mcp-server.php?route=tools/get_live_hotel_rates)" -headers = {"X-API-KEY": "test-live-hotel-rates2025", "Content-Type": "application/json"} -payload = { - "hotelName": "Luxor Las Vegas Las Vegas US", - "checkinDate": "2026-07-20", - "checkoutDate": "2026-07-21", - "adults": 2, - "currency": "USD" -} - -try: - response = requests.post(url, json=payload, headers=headers, timeout=10) - data = response.json() - rates = data.get("rates") or {} - raw_price = rates.get("display_all_in_total", "") - - if not raw_price or str(raw_price).strip() == "": - print(f"βšͺ Sold out β€” no inventory for these dates / occupancy") - else: - # Clean price string (handle commas) and convert to float - price = float(str(raw_price).replace(",", "")) - - print(f"Hotel: {data.get('hotel_name')}, {data.get('city_name')}") - print(f"Price: ${price:.2f} {rates.get('currency','USD')} (taxes & fees included)") - print(f"Score: {data.get('best_match_score', 0):.2f} (1.0 = perfect match)") - print(f"Book Now: {data.get('booking_page_live_rates')}") - - if data.get("best_match_score", 1) < 0.85: - print("⚠️ Low confidence β€” confirm hotel identity before booking") - -except Exception as e: - print(f"Error: {e}") - - -### 3. PowerShell (Windows Native) -# PowerShell β€” For Windows 10/11 terminal environments. - -PowerShell -$body = @{ - hotelName = "Marriott Marquis, San Francisco, US" - checkinDate = "2026-07-15" - checkoutDate = "2026-07-17" - adults = 2 - currency = "USD" -} | ConvertTo-Json - -Invoke-RestMethod -Method POST ` - -Uri "[https://www.businesshotels.com/mcp-server.php?route=tools/get_live_hotel_rates](https://www.businesshotels.com/mcp-server.php?route=tools/get_live_hotel_rates)" ` - -Headers @{ "X-API-KEY" = "test-live-hotel-rates2025" } ` - -ContentType "application/json" ` - -Body $body -### 4. Browser DevTools Console -// JavaScript β€” Paste directly into F12 Console to test without an IDE. - -JavaScript -fetch("[https://www.businesshotels.com/mcp-server.php?route=tools/get_live_hotel_rates](https://www.businesshotels.com/mcp-server.php?route=tools/get_live_hotel_rates)", { - method: "POST", - headers: { - "Content-Type": "application/json", - "X-API-KEY": "test-live-hotel-rates2025" - }, - body: JSON.stringify({ - hotelName: "Marriott Marquis, San Francisco, US", - checkinDate: "2026-07-15", - checkoutDate: "2026-07-17", - adults: 2, - currency: "USD" - }) -}).then(r => r.json()).then(data => { - console.log("βœ… Hotel:", data.hotel_name); - console.log("πŸ’° Price:", `$${data.rates.display_all_in_total} ${data.rates.currency}`); - console.log("πŸ“Š Match Score:", data.best_match_score); -}); - From 50f5392dac79a8b77c6593100e4a3e188c602119 Mon Sep 17 00:00:00 2001 From: businesshotelsdeveloper-dot Date: Tue, 21 Apr 2026 19:02:17 -0700 Subject: [PATCH 017/138] Update README.md --- src/business-hotels-mcp/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/business-hotels-mcp/README.md b/src/business-hotels-mcp/README.md index 51b58dcded..33e8cc297a 100644 --- a/src/business-hotels-mcp/README.md +++ b/src/business-hotels-mcp/README.md @@ -20,7 +20,7 @@ To add the Universal Agentic API to your local MCP settings, paste this into you "command": "npx", "args": ["-y", "@businesshotels/mcp-server"], "env": { - "BUSINESS_HOTELS_API_KEY": "YOUR_KEY_HERE" + "BUSINESS_HOTELS_API_KEY": "test-live-hotel-rates2025" } } } From 916e608e439e9f6dd78f96bd1ba2a94bb286b254 Mon Sep 17 00:00:00 2001 From: businesshotelsdeveloper-dot Date: Tue, 21 Apr 2026 19:09:20 -0700 Subject: [PATCH 018/138] Update README.md --- src/business-hotels-mcp/README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/src/business-hotels-mcp/README.md b/src/business-hotels-mcp/README.md index 33e8cc297a..1386ed3b0b 100644 --- a/src/business-hotels-mcp/README.md +++ b/src/business-hotels-mcp/README.md @@ -7,6 +7,7 @@ This server is optimized for autonomous agents and "Bleisure" (business + leisur - **MCP Tools Endpoint:** `https://www.businesshotels.com/mcp-server.php?route=tools` - **OpenAPI Spec:** [openapi.json](https://www.businesshotels.com/openapi.json) +- **MCP Discovery Spec: https://www.businesshotels.com/.well-known/mcp.json - **Plugin Manifest:** [.well-known/ai-plugin.json](https://www.businesshotels.com/.well-known/ai-plugin.json) - **Full API Documentation:** [Tool Configuration](https://www.businesshotels.com/tool-config.html) From a052d96f10432018785febe548171b88e271285a Mon Sep 17 00:00:00 2001 From: businesshotelsdeveloper-dot Date: Tue, 21 Apr 2026 19:09:54 -0700 Subject: [PATCH 019/138] Update README.md --- src/business-hotels-mcp/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/business-hotels-mcp/README.md b/src/business-hotels-mcp/README.md index 1386ed3b0b..51c9f2be02 100644 --- a/src/business-hotels-mcp/README.md +++ b/src/business-hotels-mcp/README.md @@ -7,7 +7,7 @@ This server is optimized for autonomous agents and "Bleisure" (business + leisur - **MCP Tools Endpoint:** `https://www.businesshotels.com/mcp-server.php?route=tools` - **OpenAPI Spec:** [openapi.json](https://www.businesshotels.com/openapi.json) -- **MCP Discovery Spec: https://www.businesshotels.com/.well-known/mcp.json +- MCP Discovery Spec: https://www.businesshotels.com/.well-known/mcp.json - **Plugin Manifest:** [.well-known/ai-plugin.json](https://www.businesshotels.com/.well-known/ai-plugin.json) - **Full API Documentation:** [Tool Configuration](https://www.businesshotels.com/tool-config.html) From 800a1d3b3371d76ea517bda329edd1ff9a1a8ab4 Mon Sep 17 00:00:00 2001 From: businesshotelsdeveloper-dot Date: Tue, 21 Apr 2026 19:47:57 -0700 Subject: [PATCH 020/138] Update README.md --- src/business-hotels-mcp/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/business-hotels-mcp/README.md b/src/business-hotels-mcp/README.md index 51c9f2be02..fb39ff36ee 100644 --- a/src/business-hotels-mcp/README.md +++ b/src/business-hotels-mcp/README.md @@ -5,7 +5,7 @@ This is the official [Model Context Protocol (MCP)](https://github.com/modelcont ## Connection & Discovery This server is optimized for autonomous agents and "Bleisure" (business + leisure) travel workflows. -- **MCP Tools Endpoint:** `https://www.businesshotels.com/mcp-server.php?route=tools` +- **MCP Tools Endpoint:** https://www.businesshotels.com/mcp-server.php?route=tool - **OpenAPI Spec:** [openapi.json](https://www.businesshotels.com/openapi.json) - MCP Discovery Spec: https://www.businesshotels.com/.well-known/mcp.json - **Plugin Manifest:** [.well-known/ai-plugin.json](https://www.businesshotels.com/.well-known/ai-plugin.json) From f587f7439756d7ebc2979dd79f8a1a753ab1e846 Mon Sep 17 00:00:00 2001 From: businesshotelsdeveloper-dot Date: Tue, 21 Apr 2026 19:56:37 -0700 Subject: [PATCH 021/138] Update README.md --- src/business-hotels-mcp/README.md | 25 ++++++++++++++++++++++++- 1 file changed, 24 insertions(+), 1 deletion(-) diff --git a/src/business-hotels-mcp/README.md b/src/business-hotels-mcp/README.md index fb39ff36ee..4bae8d5cbb 100644 --- a/src/business-hotels-mcp/README.md +++ b/src/business-hotels-mcp/README.md @@ -4,7 +4,7 @@ This is the official [Model Context Protocol (MCP)](https://github.com/modelcont ## Connection & Discovery This server is optimized for autonomous agents and "Bleisure" (business + leisure) travel workflows. - +- **MCP Tools Configuration:** https://www.businesshotels.com/mcp-server.php?route=config - **MCP Tools Endpoint:** https://www.businesshotels.com/mcp-server.php?route=tool - **OpenAPI Spec:** [openapi.json](https://www.businesshotels.com/openapi.json) - MCP Discovery Spec: https://www.businesshotels.com/.well-known/mcp.json @@ -27,3 +27,26 @@ To add the Universal Agentic API to your local MCP settings, paste this into you } } + +// QUICK TEST - Browser DevTools Console (F12 β†’ Console) β†’ paste and hit Enter +fetch("https://www.businesshotels.com/mcp-server.php?route=tools/get_live_hotel_rates", { + method: "POST", + headers: { + "Content-Type": "application/json", + "X-API-KEY": "test-live-hotel-rates2025" + }, + body: JSON.stringify({ + hotelName: "Marriott Marquis, San Francisco, US", + checkinDate: "2026-07-15", + checkoutDate: "2026-07-16", + adults: 2, + currency: "USD" + }) +}).then(r => r.json()).then(data => { + console.log("βœ… Hotel:", data.hotel_name); + console.log("πŸ’° Price:", `$${data.rates.display_all_in_total} ${data.rates.currency}`); + console.log("πŸ”— Book:", data.booking_page_live_rates); + console.log("πŸ“Š Score:", data.best_match_score); + console.log("Full response:", data); +}); + From d07aff4261d94b5298254b80f93f7e2408bc3e23 Mon Sep 17 00:00:00 2001 From: businesshotelsdeveloper-dot Date: Tue, 21 Apr 2026 20:00:01 -0700 Subject: [PATCH 022/138] Update README.md --- src/business-hotels-mcp/README.md | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/business-hotels-mcp/README.md b/src/business-hotels-mcp/README.md index 4bae8d5cbb..1fc1b7b23c 100644 --- a/src/business-hotels-mcp/README.md +++ b/src/business-hotels-mcp/README.md @@ -28,7 +28,10 @@ To add the Universal Agentic API to your local MCP settings, paste this into you } -// QUICK TEST - Browser DevTools Console (F12 β†’ Console) β†’ paste and hit Enter +// QUICK TEST - Browser DevTools Console (F12 β†’ Console) β†’ paste and hit Enter +// Note: This API key is for testing and light production. +// Contact ai@businesshotels.com for high-volume or full production access. + fetch("https://www.businesshotels.com/mcp-server.php?route=tools/get_live_hotel_rates", { method: "POST", headers: { @@ -49,4 +52,3 @@ fetch("https://www.businesshotels.com/mcp-server.php?route=tools/get_live_hotel_ console.log("πŸ“Š Score:", data.best_match_score); console.log("Full response:", data); }); - From 26c1aa6061af15155637b749cc84bc7d65f1ca6d Mon Sep 17 00:00:00 2001 From: businesshotelsdeveloper-dot Date: Tue, 21 Apr 2026 20:07:49 -0700 Subject: [PATCH 023/138] Update README.md --- src/business-hotels-mcp/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/business-hotels-mcp/README.md b/src/business-hotels-mcp/README.md index 1fc1b7b23c..42f38fa645 100644 --- a/src/business-hotels-mcp/README.md +++ b/src/business-hotels-mcp/README.md @@ -39,7 +39,7 @@ fetch("https://www.businesshotels.com/mcp-server.php?route=tools/get_live_hotel_ "X-API-KEY": "test-live-hotel-rates2025" }, body: JSON.stringify({ - hotelName: "Marriott Marquis, San Francisco, US", + hotelName: "Luxor, Las Vegas, NV, US", checkinDate: "2026-07-15", checkoutDate: "2026-07-16", adults: 2, From 1c540611d972debacebb568d7120c7516529546b Mon Sep 17 00:00:00 2001 From: businesshotelsdeveloper-dot Date: Tue, 21 Apr 2026 21:55:07 -0700 Subject: [PATCH 024/138] Update README.md --- src/business-hotels-mcp/README.md | 238 +++++++++++++++++++++++++++++- 1 file changed, 237 insertions(+), 1 deletion(-) diff --git a/src/business-hotels-mcp/README.md b/src/business-hotels-mcp/README.md index 42f38fa645..cae594d04c 100644 --- a/src/business-hotels-mcp/README.md +++ b/src/business-hotels-mcp/README.md @@ -28,7 +28,7 @@ To add the Universal Agentic API to your local MCP settings, paste this into you } -// QUICK TEST - Browser DevTools Console (F12 β†’ Console) β†’ paste and hit Enter +// QUICK TEST 1 - BusinessHotels.com Browser DevTools Console (F12 β†’ Console) β†’ paste and hit Enter // Note: This API key is for testing and light production. // Contact ai@businesshotels.com for high-volume or full production access. @@ -52,3 +52,239 @@ fetch("https://www.businesshotels.com/mcp-server.php?route=tools/get_live_hotel_ console.log("πŸ“Š Score:", data.best_match_score); console.log("Full response:", data); }); + + + + + +// QUICK TEST 2 - Python + + + + +import requests + +url = "https://www.businesshotels.com/mcp-server.php?route=tools/get_live_hotel_rates" +headers = {"X-API-KEY": "test-live-hotel-rates2025", "Content-Type": "application/json"} +payload = { + "hotelName": "San Francisco Marriott Marquis, San Francisco, CA, US", + "checkinDate": "2026-06-20", + "checkoutDate": "2026-06-21", + "adults": 2, "currency": "USD" +} + +data = requests.post(url, json=payload, headers=headers, timeout=10).json() +rates = data.get("rates") or {} + +# FIX: guard against null rates (sold out) and comma-formatted price strings +raw_price = rates.get("display_all_in_total", "") +if not raw_price or str(raw_price).strip() == "": + print(f"βšͺ Sold out β€” no inventory for these dates / occupancy") +else: + price = float(str(raw_price).replace(",", "")) + print(f"Hotel: {data.get('hotel_name')}, {data.get('city_name')}") + print(f"Price: ${price:.2f} {rates.get('currency','USD')} (taxes & fees included)") + print(f"Score: {data.get('best_match_score', 0):.2f} (1.0 = perfect match)") + print(f"Book Now: {data.get('booking_page_live_rates')}") + if data.get("best_match_score", 1) < 0.85: + print("⚠️ Low confidence β€” confirm hotel identity with user before booking") + + + + +// QUICK TEST 3 - cURL + + + + +curl -s -X POST \ + "https://www.businesshotels.com/mcp-server.php?route=tools/get_live_hotel_rates" \ + -H "Content-Type: application/json" \ + -H "X-API-KEY: test-live-hotel-rates2025" \ + -d '{ + "hotelName": "Luxor Las Vegas Las Vegas US", + "checkinDate": "2026-07-20", + "checkoutDate": "2026-07-21", + "adults": 2, + "currency": "USD" + }' | python3 -m json.tool + + + + +// QUICK TEST 4 - OpenAI Python SDK β€” Function Calling + + + +from openai import OpenAI +import requests, json + +client = OpenAI(api_key="YOUR_OPENAI_API_KEY") +BH_KEY = "test-live-hotel-rates2025" + +tools = [{ + "type": "function", + "function": { + "name": "get_live_hotel_rates", + "description": ( + "Get live, all-inclusive hotel rates and a direct booking URL. " + "IMPORTANT: 'display_all_in_total' is a comma-formatted STRING (e.g. '1,250.00'). " + "Strip commas before numeric operations. " + "If rates is null or display_all_in_total is empty, the property is sold out β€” tell the user." + ), + "parameters": { + "type": "object", + "properties": { + "hotelName": {"type": "string", "description": "Hotel + city + country, no commas. E.g. 'Wynn Las Vegas US'"}, + "checkinDate": {"type": "string", "format": "date"}, + "checkoutDate": {"type": "string", "format": "date"}, + "adults": {"type": "integer", "default": 2}, + "currency": {"type": "string", "default": "USD"} + }, + "required": ["hotelName", "checkinDate", "checkoutDate"] + } + } +}] + +messages = [{"role": "user", "content": "Rates for Luxor Las Vegas, April 20-21 2026?"}] +r1 = client.chat.completions.create(model="gpt-4o", messages=messages, tools=tools, tool_choice="auto") +msg = r1.choices[0].message +messages.append(msg) + +if msg.tool_calls: + for tc in msg.tool_calls: + result = requests.post( + "https://www.businesshotels.com/mcp-server.php?route=tools/get_live_hotel_rates", + headers={"X-API-KEY": BH_KEY, "Content-Type": "application/json"}, + json=json.loads(tc.function.arguments), timeout=10 + ).json() + messages.append({"role": "tool", "tool_call_id": tc.id, "content": json.dumps(result)}) + r2 = client.chat.completions.create(model="gpt-4o", messages=messages) + print(r2.choices[0].message.content) + + + +// QUICK TEST 5 - OpenAI Python SDK β€” Function Calling + +async function getHotelRates(hotelName, checkinDate, checkoutDate, adults = 2, currency = "USD") { + const res = await fetch( + "https://www.businesshotels.com/mcp-server.php?route=tools/get_live_hotel_rates", + { + method: "POST", + headers: { "Content-Type": "application/json", "X-API-KEY": "test-live-hotel-rates2025" }, + body: JSON.stringify({ hotelName, checkinDate, checkoutDate, adults, currency }) + } + ); + if (!res.ok) throw new Error(`HTTP ${res.status}`); + return res.json(); +} + +const data = await getHotelRates("Luxor Las Vegas Las Vegas US", "2026-04-20", "2026-04-21"); + +// GUARD: rates may be null when hotel is sold out +const rawPrice = data?.rates?.display_all_in_total; +if (!rawPrice || String(rawPrice).trim() === "") { + console.log("βšͺ Sold out / no inventory for these dates."); +} else { + // Always strip commas β€” price is a comma-formatted string, not a number + const price = parseFloat(String(rawPrice).replace(/,/g, "")); + console.log(`${data.hotel_name} β€” $${price.toFixed(2)} total (taxes included)`); + console.log(`Book: ${data.booking_page_live_rates}`); + if (data.best_match_score < 0.85) + console.warn(`⚠️ Low confidence (${data.best_match_score}) β€” verify hotel before booking.`); +} + +window.businessHotelsAPI = { getHotelRates }; + + + +// QUICK TEST 5 - JavaScript + + + +async function getHotelRates(hotelName, checkinDate, checkoutDate, adults = 2, currency = "USD") { + const res = await fetch( + "https://www.businesshotels.com/mcp-server.php?route=tools/get_live_hotel_rates", + { + method: "POST", + headers: { "Content-Type": "application/json", "X-API-KEY": "test-live-hotel-rates2025" }, + body: JSON.stringify({ hotelName, checkinDate, checkoutDate, adults, currency }) + } + ); + if (!res.ok) throw new Error(`HTTP ${res.status}`); + return res.json(); +} + +const data = await getHotelRates("Luxor Las Vegas Las Vegas US", "2026-07-20", "2026-07-21"); + +// GUARD: rates may be null when hotel is sold out +const rawPrice = data?.rates?.display_all_in_total; +if (!rawPrice || String(rawPrice).trim() === "") { + console.log("βšͺ Sold out / no inventory for these dates."); +} else { + // Always strip commas β€” price is a comma-formatted string, not a number + const price = parseFloat(String(rawPrice).replace(/,/g, "")); + console.log(`${data.hotel_name} β€” $${price.toFixed(2)} total (taxes included)`); + console.log(`Book: ${data.booking_page_live_rates}`); + if (data.best_match_score < 0.85) + console.warn(`⚠️ Low confidence (${data.best_match_score}) β€” verify hotel before booking.`); +} + +window.businessHotelsAPI = { getHotelRates }; + + + +// QUICK TEST 6 - Google Gemini Python SDK + + + +import google.generativeai as genai +import requests, json + +genai.configure(api_key="YOUR_GEMINI_API_KEY") +BH_KEY = "test-live-hotel-rates2025" + +get_live_hotel_rates = genai.protos.Tool( + function_declarations=[genai.protos.FunctionDeclaration( + name="get_live_hotel_rates", + description=( + "Fetch live hotel rates and a direct booking URL. " + "IMPORTANT: 'display_all_in_total' is a comma-formatted STRING. " + "Strip commas before numeric comparison. " + "If rates is null or price is empty, the property is sold out." + ), + parameters=genai.protos.Schema( + type=genai.protos.Type.OBJECT, + properties={ + "hotelName": genai.protos.Schema(type=genai.protos.Type.STRING), + "checkinDate": genai.protos.Schema(type=genai.protos.Type.STRING), + "checkoutDate": genai.protos.Schema(type=genai.protos.Type.STRING), + "adults": genai.protos.Schema(type=genai.protos.Type.NUMBER), + "currency": genai.protos.Schema(type=genai.protos.Type.STRING) + }, + required=["hotelName", "checkinDate", "checkoutDate"] + ) + )] +) + +model = genai.GenerativeModel(model_name="gemini-1.5-pro", tools=[get_live_hotel_rates]) +chat = model.start_chat(history=[]) +resp = chat.send_message("Find live rates for Luxor Las Vegas, June 20-21 2026.") + +for part in resp.candidates[0].content.parts: + if part.function_call.name == "get_live_hotel_rates": + result = requests.post( + "https://www.businesshotels.com/mcp-server.php?route=tools/get_live_hotel_rates", + headers={"X-API-KEY": BH_KEY, "Content-Type": "application/json"}, + json=dict(part.function_call.args), timeout=10 + ).json() + chat.send_message(genai.protos.Content(parts=[genai.protos.Part( + function_response=genai.protos.FunctionResponse( + name="get_live_hotel_rates", response={"result": result} + ) + )])) + +final = chat.send_message("Summarize the best price and booking link.") +print(final.text) + + From 6fe9230e019ec6ffb826209ee66ba3bbd4367140 Mon Sep 17 00:00:00 2001 From: businesshotelsdeveloper-dot Date: Tue, 21 Apr 2026 21:56:20 -0700 Subject: [PATCH 025/138] Update README.md --- src/business-hotels-mcp/README.md | 12 +++--------- 1 file changed, 3 insertions(+), 9 deletions(-) diff --git a/src/business-hotels-mcp/README.md b/src/business-hotels-mcp/README.md index cae594d04c..35e5d2750a 100644 --- a/src/business-hotels-mcp/README.md +++ b/src/business-hotels-mcp/README.md @@ -55,13 +55,9 @@ fetch("https://www.businesshotels.com/mcp-server.php?route=tools/get_live_hotel_ - - // QUICK TEST 2 - Python - - import requests url = "https://www.businesshotels.com/mcp-server.php?route=tools/get_live_hotel_rates" @@ -95,8 +91,6 @@ else: // QUICK TEST 3 - cURL - - curl -s -X POST \ "https://www.businesshotels.com/mcp-server.php?route=tools/get_live_hotel_rates" \ -H "Content-Type: application/json" \ @@ -115,7 +109,6 @@ curl -s -X POST \ // QUICK TEST 4 - OpenAI Python SDK β€” Function Calling - from openai import OpenAI import requests, json @@ -166,6 +159,7 @@ if msg.tool_calls: // QUICK TEST 5 - OpenAI Python SDK β€” Function Calling + async function getHotelRates(hotelName, checkinDate, checkoutDate, adults = 2, currency = "USD") { const res = await fetch( "https://www.businesshotels.com/mcp-server.php?route=tools/get_live_hotel_rates", @@ -198,7 +192,7 @@ window.businessHotelsAPI = { getHotelRates }; -// QUICK TEST 5 - JavaScript +// QUICK TEST 6 - JavaScript @@ -234,7 +228,7 @@ window.businessHotelsAPI = { getHotelRates }; -// QUICK TEST 6 - Google Gemini Python SDK +// QUICK TEST 7 - Google Gemini Python SDK From d773922cb8b9af36b43a26d4428c7bd6d1044217 Mon Sep 17 00:00:00 2001 From: BusinessHotels Date: Wed, 22 Apr 2026 08:02:06 -0700 Subject: [PATCH 026/138] Update README.md --- src/business-hotels-mcp/README.md | 367 +++++++++++++++++++----------- 1 file changed, 236 insertions(+), 131 deletions(-) diff --git a/src/business-hotels-mcp/README.md b/src/business-hotels-mcp/README.md index 35e5d2750a..5b9ef394de 100644 --- a/src/business-hotels-mcp/README.md +++ b/src/business-hotels-mcp/README.md @@ -2,17 +2,26 @@ This is the official [Model Context Protocol (MCP)](https://github.com/modelcontextprotocol) server for **BusinessHotels.com**. It provides autonomous AI agents with real-time access to live hotel inventory, rates, and booking capabilities. +--- + ## Connection & Discovery + This server is optimized for autonomous agents and "Bleisure" (business + leisure) travel workflows. -- **MCP Tools Configuration:** https://www.businesshotels.com/mcp-server.php?route=config -- **MCP Tools Endpoint:** https://www.businesshotels.com/mcp-server.php?route=tool -- **OpenAPI Spec:** [openapi.json](https://www.businesshotels.com/openapi.json) -- MCP Discovery Spec: https://www.businesshotels.com/.well-known/mcp.json -- **Plugin Manifest:** [.well-known/ai-plugin.json](https://www.businesshotels.com/.well-known/ai-plugin.json) -- **Full API Documentation:** [Tool Configuration](https://www.businesshotels.com/tool-config.html) -## Quick Configuration (Claude/Desktop) -To add the Universal Agentic API to your local MCP settings, paste this into your `claude_desktop_config.json`: +| Resource | URL | +|---|---| +| **MCP Tools Configuration** | https://www.businesshotels.com/mcp-server.php?route=config | +| **MCP Tools Endpoint** | https://www.businesshotels.com/mcp-server.php?route=tool | +| **OpenAPI Spec** | https://www.businesshotels.com/openapi.json | +| **MCP Discovery Spec** | https://www.businesshotels.com/.well-known/mcp.json | +| **Plugin Manifest** | https://www.businesshotels.com/.well-known/ai-plugin.json | +| **Full API Docs** | https://www.businesshotels.com/tool-config.html | + +--- + +## Quick Configuration (Claude Desktop) + +Add to your `claude_desktop_config.json`: ```json { @@ -26,12 +35,58 @@ To add the Universal Agentic API to your local MCP settings, paste this into you } } } +``` + +--- + +## API Reference + +| Property | Value | +|---|---| +| **Endpoint** | `POST https://www.businesshotels.com/mcp-server.php?route=tools/get_live_hotel_rates` | +| **Auth Header** | `X-API-KEY: test-live-hotel-rates2025` | +| **Content-Type** | `application/json` | +| **Test API Key** | `test-live-hotel-rates2025` *(light production β€” email [ai@businesshotels.com](mailto:ai@businesshotels.com) for high-volume access)* | + +### Request Parameters + +| Parameter | Type | Required | Notes | +|---|---|---|---| +| `hotelName` | string | βœ… | Hotel + city + country, **no commas**. E.g. `"Wynn Las Vegas US"` | +| `checkinDate` | string | βœ… | Format: `YYYY-MM-DD` | +| `checkoutDate` | string | βœ… | Format: `YYYY-MM-DD` | +| `adults` | integer | β€” | Default: `2` | +| `currency` | string | β€” | Default: `"USD"` | + +### ⚠️ Response Gotchas + +- `display_all_in_total` is a **comma-formatted STRING** (e.g. `"1,250.00"`) β€” always strip commas before numeric operations +- `rates` may be **`null`** when the hotel is sold out β€” always guard against this before accessing nested fields +- `best_match_score` below `0.85` = low confidence β€” verify hotel identity with user before booking + +--- + +## Quick-Start Tests + +Choose your preferred language or integration method: +| # | Method | Best For | +|---|---|---| +| [1](#test-1--browser-devtools-console) | Browser DevTools Console | Fastest test, zero setup | +| [2](#test-2--python-requests) | Python `requests` | Backend scripts, data pipelines | +| [3](#test-3--curl) | cURL | CLI, shell scripts, CI/CD | +| [4](#test-4--javascript-asyncawait) | JavaScript (async/await) | Frontend apps, Node.js | +| [5](#test-5--openai-function-calling-python) | OpenAI Function Calling β€” Python | GPT-4o agent integration | +| [6](#test-6--openai-function-calling-javascript) | OpenAI Function Calling β€” JavaScript | GPT-4o agent integration (JS) | +| [7](#test-7--google-gemini-python) | Google Gemini β€” Python | Gemini 1.5 Pro agent integration | -// QUICK TEST 1 - BusinessHotels.com Browser DevTools Console (F12 β†’ Console) β†’ paste and hit Enter -// Note: This API key is for testing and light production. -// Contact ai@businesshotels.com for high-volume or full production access. +--- +### Test 1 Β· Browser DevTools Console + +> Open any page on **BusinessHotels.com** β†’ press `F12` β†’ go to the **Console** tab β†’ paste and hit Enter. + +```js fetch("https://www.businesshotels.com/mcp-server.php?route=tools/get_live_hotel_rates", { method: "POST", headers: { @@ -39,81 +94,128 @@ fetch("https://www.businesshotels.com/mcp-server.php?route=tools/get_live_hotel_ "X-API-KEY": "test-live-hotel-rates2025" }, body: JSON.stringify({ - hotelName: "Luxor, Las Vegas, NV, US", - checkinDate: "2026-07-15", + hotelName: "Luxor Las Vegas NV US", + checkinDate: "2026-07-15", checkoutDate: "2026-07-16", adults: 2, currency: "USD" }) -}).then(r => r.json()).then(data => { - console.log("βœ… Hotel:", data.hotel_name); - console.log("πŸ’° Price:", `$${data.rates.display_all_in_total} ${data.rates.currency}`); - console.log("πŸ”— Book:", data.booking_page_live_rates); - console.log("πŸ“Š Score:", data.best_match_score); - console.log("Full response:", data); -}); - - - -// QUICK TEST 2 - Python - - +}) + .then(r => r.json()) + .then(data => { + console.log("βœ… Hotel:", data.hotel_name); + console.log("πŸ’° Price:", `$${data.rates?.display_all_in_total} ${data.rates?.currency}`); + console.log("πŸ”— Book:", data.booking_page_live_rates); + console.log("πŸ“Š Score:", data.best_match_score); + console.log("Full response:", data); + }); +``` + +--- + +### Test 2 Β· Python `requests` + +```python import requests -url = "https://www.businesshotels.com/mcp-server.php?route=tools/get_live_hotel_rates" -headers = {"X-API-KEY": "test-live-hotel-rates2025", "Content-Type": "application/json"} +URL = "https://www.businesshotels.com/mcp-server.php?route=tools/get_live_hotel_rates" +HEADERS = {"X-API-KEY": "test-live-hotel-rates2025", "Content-Type": "application/json"} + payload = { - "hotelName": "San Francisco Marriott Marquis, San Francisco, CA, US", + "hotelName": "San Francisco Marriott Marquis San Francisco CA US", "checkinDate": "2026-06-20", "checkoutDate": "2026-06-21", - "adults": 2, "currency": "USD" + "adults": 2, + "currency": "USD" } -data = requests.post(url, json=payload, headers=headers, timeout=10).json() -rates = data.get("rates") or {} - -# FIX: guard against null rates (sold out) and comma-formatted price strings +data = requests.post(URL, json=payload, headers=HEADERS, timeout=10).json() +rates = data.get("rates") or {} raw_price = rates.get("display_all_in_total", "") + if not raw_price or str(raw_price).strip() == "": - print(f"βšͺ Sold out β€” no inventory for these dates / occupancy") + print("βšͺ Sold out β€” no inventory for these dates / occupancy") else: price = float(str(raw_price).replace(",", "")) print(f"Hotel: {data.get('hotel_name')}, {data.get('city_name')}") - print(f"Price: ${price:.2f} {rates.get('currency','USD')} (taxes & fees included)") + print(f"Price: ${price:.2f} {rates.get('currency', 'USD')} (taxes & fees included)") print(f"Score: {data.get('best_match_score', 0):.2f} (1.0 = perfect match)") print(f"Book Now: {data.get('booking_page_live_rates')}") if data.get("best_match_score", 1) < 0.85: - print("⚠️ Low confidence β€” confirm hotel identity with user before booking") - - - + print("⚠️ Low confidence β€” confirm hotel identity before booking") +``` -// QUICK TEST 3 - cURL +--- +### Test 3 Β· cURL +```bash curl -s -X POST \ "https://www.businesshotels.com/mcp-server.php?route=tools/get_live_hotel_rates" \ -H "Content-Type: application/json" \ -H "X-API-KEY: test-live-hotel-rates2025" \ -d '{ - "hotelName": "Luxor Las Vegas Las Vegas US", - "checkinDate": "2026-07-20", + "hotelName": "Luxor Las Vegas Las Vegas US", + "checkinDate": "2026-07-20", "checkoutDate": "2026-07-21", "adults": 2, "currency": "USD" }' | python3 -m json.tool +``` +--- +### Test 4 Β· JavaScript (async/await) +Works in the browser or Node.js. Exposes `window.businessHotelsAPI` for reuse in browser contexts. -// QUICK TEST 4 - OpenAI Python SDK β€” Function Calling +```js +async function getHotelRates(hotelName, checkinDate, checkoutDate, adults = 2, currency = "USD") { + const res = await fetch( + "https://www.businesshotels.com/mcp-server.php?route=tools/get_live_hotel_rates", + { + method: "POST", + headers: { + "Content-Type": "application/json", + "X-API-KEY": "test-live-hotel-rates2025" + }, + body: JSON.stringify({ hotelName, checkinDate, checkoutDate, adults, currency }) + } + ); + if (!res.ok) throw new Error(`HTTP ${res.status}`); + return res.json(); +} + +// --- Usage --- +const data = await getHotelRates("Luxor Las Vegas Las Vegas US", "2026-07-20", "2026-07-21"); + +const rawPrice = data?.rates?.display_all_in_total; +if (!rawPrice || String(rawPrice).trim() === "") { + console.log("βšͺ Sold out / no inventory for these dates."); +} else { + const price = parseFloat(String(rawPrice).replace(/,/g, "")); + console.log(`${data.hotel_name} β€” $${price.toFixed(2)} total (taxes included)`); + console.log(`Book: ${data.booking_page_live_rates}`); + if (data.best_match_score < 0.85) + console.warn(`⚠️ Low confidence (${data.best_match_score}) β€” verify hotel before booking.`); +} + +if (typeof window !== "undefined") window.businessHotelsAPI = { getHotelRates }; +``` + +--- + +### Test 5 Β· OpenAI Function Calling β€” Python +Integrates `get_live_hotel_rates` as a GPT-4o tool. +```python from openai import OpenAI import requests, json client = OpenAI(api_key="YOUR_OPENAI_API_KEY") BH_KEY = "test-live-hotel-rates2025" +BH_URL = "https://www.businesshotels.com/mcp-server.php?route=tools/get_live_hotel_rates" tools = [{ "type": "function", @@ -121,16 +223,16 @@ tools = [{ "name": "get_live_hotel_rates", "description": ( "Get live, all-inclusive hotel rates and a direct booking URL. " - "IMPORTANT: 'display_all_in_total' is a comma-formatted STRING (e.g. '1,250.00'). " - "Strip commas before numeric operations. " - "If rates is null or display_all_in_total is empty, the property is sold out β€” tell the user." + "NOTE: 'display_all_in_total' is a comma-formatted STRING (e.g. '1,250.00') β€” " + "strip commas before numeric operations. " + "If rates is null or display_all_in_total is empty, the property is sold out." ), "parameters": { "type": "object", "properties": { - "hotelName": {"type": "string", "description": "Hotel + city + country, no commas. E.g. 'Wynn Las Vegas US'"}, - "checkinDate": {"type": "string", "format": "date"}, - "checkoutDate": {"type": "string", "format": "date"}, + "hotelName": {"type": "string", "description": "Hotel + city + country, no commas. E.g. 'Wynn Las Vegas US'"}, + "checkinDate": {"type": "string", "format": "date"}, + "checkoutDate": {"type": "string", "format": "date"}, "adults": {"type": "integer", "default": 2}, "currency": {"type": "string", "default": "USD"} }, @@ -139,112 +241,104 @@ tools = [{ } }] +# Step 1 β€” model decides to call the tool messages = [{"role": "user", "content": "Rates for Luxor Las Vegas, April 20-21 2026?"}] r1 = client.chat.completions.create(model="gpt-4o", messages=messages, tools=tools, tool_choice="auto") -msg = r1.choices[0].message +msg = r1.choices.message messages.append(msg) +# Step 2 β€” execute tool call(s) and return results if msg.tool_calls: for tc in msg.tool_calls: result = requests.post( - "https://www.businesshotels.com/mcp-server.php?route=tools/get_live_hotel_rates", + BH_URL, headers={"X-API-KEY": BH_KEY, "Content-Type": "application/json"}, - json=json.loads(tc.function.arguments), timeout=10 + json=json.loads(tc.function.arguments), + timeout=10 ).json() messages.append({"role": "tool", "tool_call_id": tc.id, "content": json.dumps(result)}) - r2 = client.chat.completions.create(model="gpt-4o", messages=messages) - print(r2.choices[0].message.content) - - -// QUICK TEST 5 - OpenAI Python SDK β€” Function Calling - - -async function getHotelRates(hotelName, checkinDate, checkoutDate, adults = 2, currency = "USD") { - const res = await fetch( - "https://www.businesshotels.com/mcp-server.php?route=tools/get_live_hotel_rates", - { - method: "POST", - headers: { "Content-Type": "application/json", "X-API-KEY": "test-live-hotel-rates2025" }, - body: JSON.stringify({ hotelName, checkinDate, checkoutDate, adults, currency }) + # Step 3 β€” get the final natural-language response + r2 = client.chat.completions.create(model="gpt-4o", messages=messages) + print(r2.choices.message.content) +``` + +--- + +### Test 6 Β· OpenAI Function Calling β€” JavaScript + +```js +import OpenAI from "openai"; + +const client = new OpenAI({ apiKey: "YOUR_OPENAI_API_KEY" }); +const BH_KEY = "test-live-hotel-rates2025"; +const BH_URL = "https://www.businesshotels.com/mcp-server.php?route=tools/get_live_hotel_rates"; + +const tools = [{ + type: "function", + function: { + name: "get_live_hotel_rates", + description: + "Get live, all-inclusive hotel rates and a direct booking URL. " + + "NOTE: 'display_all_in_total' is a comma-formatted STRING β€” strip commas before numeric ops. " + + "If rates is null or price is empty, the property is sold out.", + parameters: { + type: "object", + properties: { + hotelName: { type: "string" }, + checkinDate: { type: "string", format: "date" }, + checkoutDate: { type: "string", format: "date" }, + adults: { type: "integer", default: 2 }, + currency: { type: "string", default: "USD" } + }, + required: ["hotelName", "checkinDate", "checkoutDate"] } - ); - if (!res.ok) throw new Error(`HTTP ${res.status}`); - return res.json(); -} - -const data = await getHotelRates("Luxor Las Vegas Las Vegas US", "2026-04-20", "2026-04-21"); - -// GUARD: rates may be null when hotel is sold out -const rawPrice = data?.rates?.display_all_in_total; -if (!rawPrice || String(rawPrice).trim() === "") { - console.log("βšͺ Sold out / no inventory for these dates."); -} else { - // Always strip commas β€” price is a comma-formatted string, not a number - const price = parseFloat(String(rawPrice).replace(/,/g, "")); - console.log(`${data.hotel_name} β€” $${price.toFixed(2)} total (taxes included)`); - console.log(`Book: ${data.booking_page_live_rates}`); - if (data.best_match_score < 0.85) - console.warn(`⚠️ Low confidence (${data.best_match_score}) β€” verify hotel before booking.`); -} - -window.businessHotelsAPI = { getHotelRates }; - - - -// QUICK TEST 6 - JavaScript - - - -async function getHotelRates(hotelName, checkinDate, checkoutDate, adults = 2, currency = "USD") { - const res = await fetch( - "https://www.businesshotels.com/mcp-server.php?route=tools/get_live_hotel_rates", - { + } +}]; + +// Step 1 β€” model decides to call the tool +const messages = [{ role: "user", content: "Rates for Luxor Las Vegas, April 20-21 2026?" }]; +const r1 = await client.chat.completions.create({ model: "gpt-4o", messages, tools, tool_choice: "auto" }); +const msg = r1.choices.message; +messages.push(msg); + +// Step 2 β€” execute tool call(s) and return results +if (msg.tool_calls) { + for (const tc of msg.tool_calls) { + const result = await fetch(BH_URL, { method: "POST", - headers: { "Content-Type": "application/json", "X-API-KEY": "test-live-hotel-rates2025" }, - body: JSON.stringify({ hotelName, checkinDate, checkoutDate, adults, currency }) - } - ); - if (!res.ok) throw new Error(`HTTP ${res.status}`); - return res.json(); -} - -const data = await getHotelRates("Luxor Las Vegas Las Vegas US", "2026-07-20", "2026-07-21"); + headers: { "X-API-KEY": BH_KEY, "Content-Type": "application/json" }, + body: tc.function.arguments + }).then(r => r.json()); + messages.push({ role: "tool", tool_call_id: tc.id, content: JSON.stringify(result) }); + } -// GUARD: rates may be null when hotel is sold out -const rawPrice = data?.rates?.display_all_in_total; -if (!rawPrice || String(rawPrice).trim() === "") { - console.log("βšͺ Sold out / no inventory for these dates."); -} else { - // Always strip commas β€” price is a comma-formatted string, not a number - const price = parseFloat(String(rawPrice).replace(/,/g, "")); - console.log(`${data.hotel_name} β€” $${price.toFixed(2)} total (taxes included)`); - console.log(`Book: ${data.booking_page_live_rates}`); - if (data.best_match_score < 0.85) - console.warn(`⚠️ Low confidence (${data.best_match_score}) β€” verify hotel before booking.`); + // Step 3 β€” get the final natural-language response + const r2 = await client.chat.completions.create({ model: "gpt-4o", messages }); + console.log(r2.choices.message.content); } +``` -window.businessHotelsAPI = { getHotelRates }; - - - -// QUICK TEST 7 - Google Gemini Python SDK +--- +### Test 7 Β· Google Gemini β€” Python +Integrates `get_live_hotel_rates` as a Gemini 1.5 Pro function call. +```python import google.generativeai as genai import requests, json genai.configure(api_key="YOUR_GEMINI_API_KEY") BH_KEY = "test-live-hotel-rates2025" +BH_URL = "https://www.businesshotels.com/mcp-server.php?route=tools/get_live_hotel_rates" get_live_hotel_rates = genai.protos.Tool( function_declarations=[genai.protos.FunctionDeclaration( name="get_live_hotel_rates", description=( "Fetch live hotel rates and a direct booking URL. " - "IMPORTANT: 'display_all_in_total' is a comma-formatted STRING. " - "Strip commas before numeric comparison. " + "NOTE: 'display_all_in_total' is a comma-formatted STRING β€” strip commas before numeric ops. " "If rates is null or price is empty, the property is sold out." ), parameters=genai.protos.Schema( @@ -263,22 +357,33 @@ get_live_hotel_rates = genai.protos.Tool( model = genai.GenerativeModel(model_name="gemini-1.5-pro", tools=[get_live_hotel_rates]) chat = model.start_chat(history=[]) -resp = chat.send_message("Find live rates for Luxor Las Vegas, June 20-21 2026.") -for part in resp.candidates[0].content.parts: +# Step 1 β€” send the user message +resp = chat.send_message("Find live rates for Luxor Las Vegas, June 20-21 2026.") + +# Step 2 β€” execute any function calls Gemini requested +for part in resp.candidates.content.parts: if part.function_call.name == "get_live_hotel_rates": result = requests.post( - "https://www.businesshotels.com/mcp-server.php?route=tools/get_live_hotel_rates", + BH_URL, headers={"X-API-KEY": BH_KEY, "Content-Type": "application/json"}, - json=dict(part.function_call.args), timeout=10 + json=dict(part.function_call.args), + timeout=10 ).json() chat.send_message(genai.protos.Content(parts=[genai.protos.Part( function_response=genai.protos.FunctionResponse( - name="get_live_hotel_rates", response={"result": result} + name="get_live_hotel_rates", + response={"result": result} ) )])) +# Step 3 β€” get the final natural-language response final = chat.send_message("Summarize the best price and booking link.") print(final.text) +``` + +--- +## Support +πŸ“§ High-volume / production access: [ai@businesshotels.com](mailto:ai@businesshotels.com) From da32ee63ede625bda1e109db01c3f3bb36804184 Mon Sep 17 00:00:00 2001 From: BusinessHotels Date: Wed, 22 Apr 2026 08:04:38 -0700 Subject: [PATCH 027/138] Update README.md --- src/business-hotels-mcp/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/business-hotels-mcp/README.md b/src/business-hotels-mcp/README.md index 5b9ef394de..05493be3c7 100644 --- a/src/business-hotels-mcp/README.md +++ b/src/business-hotels-mcp/README.md @@ -1,4 +1,4 @@ -# BusinessHotels Universal Agentic API (MCP) +# BusinessHotels,com Universal Agentic API (MCP) This is the official [Model Context Protocol (MCP)](https://github.com/modelcontextprotocol) server for **BusinessHotels.com**. It provides autonomous AI agents with real-time access to live hotel inventory, rates, and booking capabilities. From 45220d91192db30f4c8fec75b90121c8d14ce402 Mon Sep 17 00:00:00 2001 From: BusinessHotels Date: Wed, 22 Apr 2026 08:04:52 -0700 Subject: [PATCH 028/138] Update README.md --- src/business-hotels-mcp/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/business-hotels-mcp/README.md b/src/business-hotels-mcp/README.md index 05493be3c7..6af2341368 100644 --- a/src/business-hotels-mcp/README.md +++ b/src/business-hotels-mcp/README.md @@ -1,4 +1,4 @@ -# BusinessHotels,com Universal Agentic API (MCP) +# BusinessHotels.com Universal Agentic API (MCP) This is the official [Model Context Protocol (MCP)](https://github.com/modelcontextprotocol) server for **BusinessHotels.com**. It provides autonomous AI agents with real-time access to live hotel inventory, rates, and booking capabilities. From b9b1ab97e2464e6ccb4d48f7df7f40fea5ec79da Mon Sep 17 00:00:00 2001 From: BusinessHotels Date: Wed, 22 Apr 2026 08:12:37 -0700 Subject: [PATCH 029/138] Update README.md --- src/business-hotels-mcp/README.md | 72 ++++++++++++++++++++++++++++++- 1 file changed, 70 insertions(+), 2 deletions(-) diff --git a/src/business-hotels-mcp/README.md b/src/business-hotels-mcp/README.md index 6af2341368..3946f47430 100644 --- a/src/business-hotels-mcp/README.md +++ b/src/business-hotels-mcp/README.md @@ -1,6 +1,6 @@ -# BusinessHotels.com Universal Agentic API (MCP) +# BusinessHotels.com Universal Agentic API (MCP) -This is the official [Model Context Protocol (MCP)](https://github.com/modelcontextprotocol) server for **BusinessHotels.com**. It provides autonomous AI agents with real-time access to live hotel inventory, rates, and booking capabilities. +This is the official [Model Context Protocol (MCP)](https://github.com/modelcontextprotocol) server for **BusinessHotels.com**. It provides autonomous AI agents with real-time access to live hotel inventory worldwide, rates, and booking capabilities. --- @@ -384,6 +384,74 @@ print(final.text) --- +## πŸ” Multi-Hotel Comparison Pattern + +This API uses a **one-hotel-per-request** architecture β€” there is no batch endpoint. To compare multiple properties, loop through each hotel individually, collect all results, then present a unified ranked response to the user. + +### βœ… Correct Pattern β€” Loop, Collect, Then Respond + +```python +import requests + +URL = "https://www.businesshotels.com/mcp-server.php?route=tools/get_live_hotel_rates" +HEADERS = {"Content-Type": "application/json", "X-API-KEY": "test-live-hotel-rates2025"} + +hotels_to_check = [ + "Fairmont San Francisco San Francisco US", + "Four Seasons San Francisco at Embarcadero San Francisco US", + "Ritz-Carlton San Francisco San Francisco US", + "St. Regis San Francisco San Francisco US", + "Palace Hotel a Luxury Collection Hotel San Francisco US" +] + +params = {"checkinDate": "2026-05-12", "checkoutDate": "2026-05-14", "adults": 2, "currency": "USD"} +results = [] + +for hotel in hotels_to_check: + data = requests.post(URL, headers=HEADERS, json={**params, "hotelName": hotel}, timeout=10).json() + rates = data.get("rates") + if rates and rates.get("display_all_in_total"): + price = float(str(rates["display_all_in_total"]).replace(",", "")) + results.append({ + "name": data["hotel_name"], + "price": price, + "url": data["booking_page_live_rates"], + "hotel_id": data.get("hotel_id") + }) + +# Sort and present ALL results together β€” never respond mid-loop +results.sort(key=lambda x: x["price"]) +for i, h in enumerate(results, 1): + print(f"{i}. {h['name']}: ${h['price']:.2f}") + +cheapest = results +print(f"\nπŸ† Best Value: {cheapest['name']} at ${cheapest['price']:.2f}") +print(f"πŸ‘‰ Book Now: {cheapest['url']}") +``` + +### Architectural Rules + +> πŸ“Œ **Complete all requests before responding.** Always finish the full loop before presenting any results. Responding mid-loop creates a fragmented, incomplete user experience. + +> πŸ“Œ **No batch endpoint.** Do not pass a `hotels[]` array in a single request β€” the endpoint accepts one `hotelName` string per call only. + +> ⚠️ **Rate lock timer starts at API response time.** The `ppn_bundle` token and quoted price are valid for approximately 20 minutes from when the API responded β€” not from when the user views results. If significant time has elapsed before the user clicks Book Now, warn them: *"This rate was fetched X minutes ago β€” prices may have changed. Refresh to confirm."* + +> ⚠️ **Never modify `ppn_bundle`.** This token is an opaque rate-lock credential. Do not truncate, re-encode, or expose it to the user. It is already embedded in the `booking_page_live_rates` URL. + +> βœ… **Session continuity.** Store `hotel_id` for each result during the session. If the user asks a follow-up like *"Does the Fairmont have a pool?"* or *"Show me the Fairmont again"*, reference the stored `hotel_id` without re-querying by name. + +### 🧠 Example Agent Workflows + +| Workflow | Description | +|---|---| +| **Best Value Finder** | Query up to 10 hotels, sanitize prices, sort by `display_all_in_total`, return the cheapest with a booking link | +| **Proximity Filter** | Use latitude/longitude to shortlist hotels within 0.5 miles of a specific address | +| **Luxury Rate Monitor** | Periodically scan a saved list of `hotel_id`s to alert when a suite drops below a target price | +| **Sold-Out Fallback** | If `display_all_in_total` is empty, automatically suggest nearby hotels or alternate dates without crashing | + +--- + ## Support πŸ“§ High-volume / production access: [ai@businesshotels.com](mailto:ai@businesshotels.com) From 75b2e8804fb3c01d8879a6fe02a149e971483024 Mon Sep 17 00:00:00 2001 From: BusinessHotels Date: Wed, 22 Apr 2026 08:13:17 -0700 Subject: [PATCH 030/138] Update README.md --- src/business-hotels-mcp/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/business-hotels-mcp/README.md b/src/business-hotels-mcp/README.md index 3946f47430..95c83af007 100644 --- a/src/business-hotels-mcp/README.md +++ b/src/business-hotels-mcp/README.md @@ -404,7 +404,7 @@ hotels_to_check = [ "Palace Hotel a Luxury Collection Hotel San Francisco US" ] -params = {"checkinDate": "2026-05-12", "checkoutDate": "2026-05-14", "adults": 2, "currency": "USD"} +params = {"checkinDate": "2026-07-12", "checkoutDate": "2026-07-14", "adults": 2, "currency": "USD"} results = [] for hotel in hotels_to_check: From d6350daa77495c9fc7ad3cffa9125464617ea19f Mon Sep 17 00:00:00 2001 From: BusinessHotels Date: Wed, 22 Apr 2026 08:42:02 -0700 Subject: [PATCH 031/138] Update README.md --- src/business-hotels-mcp/README.md | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/src/business-hotels-mcp/README.md b/src/business-hotels-mcp/README.md index 95c83af007..20d892b380 100644 --- a/src/business-hotels-mcp/README.md +++ b/src/business-hotels-mcp/README.md @@ -52,7 +52,7 @@ Add to your `claude_desktop_config.json`: | Parameter | Type | Required | Notes | |---|---|---|---| -| `hotelName` | string | βœ… | Hotel + city + country, **no commas**. E.g. `"Wynn Las Vegas US"` | +| `hotelName` | string | βœ… | Hotel + city + state, country, **use commas**. E.g. `"Wynn Las Vegas, NV, US"` | | `checkinDate` | string | βœ… | Format: `YYYY-MM-DD` | | `checkoutDate` | string | βœ… | Format: `YYYY-MM-DD` | | `adults` | integer | β€” | Default: `2` | @@ -94,7 +94,7 @@ fetch("https://www.businesshotels.com/mcp-server.php?route=tools/get_live_hotel_ "X-API-KEY": "test-live-hotel-rates2025" }, body: JSON.stringify({ - hotelName: "Luxor Las Vegas NV US", + hotelName: "Luxor Las Vegas, NV, US", checkinDate: "2026-07-15", checkoutDate: "2026-07-16", adults: 2, @@ -122,7 +122,7 @@ URL = "https://www.businesshotels.com/mcp-server.php?route=tools/get_live_ho HEADERS = {"X-API-KEY": "test-live-hotel-rates2025", "Content-Type": "application/json"} payload = { - "hotelName": "San Francisco Marriott Marquis San Francisco CA US", + "hotelName": "San Francisco Marriott Marquis, San Francisco, CA US", "checkinDate": "2026-06-20", "checkoutDate": "2026-06-21", "adults": 2, @@ -155,7 +155,7 @@ curl -s -X POST \ -H "Content-Type: application/json" \ -H "X-API-KEY: test-live-hotel-rates2025" \ -d '{ - "hotelName": "Luxor Las Vegas Las Vegas US", + "hotelName": "Luxor Las Vegas, Las Vegas, NV, US", "checkinDate": "2026-07-20", "checkoutDate": "2026-07-21", "adults": 2, @@ -187,7 +187,7 @@ async function getHotelRates(hotelName, checkinDate, checkoutDate, adults = 2, c } // --- Usage --- -const data = await getHotelRates("Luxor Las Vegas Las Vegas US", "2026-07-20", "2026-07-21"); +const data = await getHotelRates("Luxor Las Vegas, Las Vegas, NV, US", "2026-07-20", "2026-07-21"); const rawPrice = data?.rates?.display_all_in_total; if (!rawPrice || String(rawPrice).trim() === "") { @@ -230,7 +230,7 @@ tools = [{ "parameters": { "type": "object", "properties": { - "hotelName": {"type": "string", "description": "Hotel + city + country, no commas. E.g. 'Wynn Las Vegas US'"}, + "hotelName": {"type": "string", "description": "Hotel + city + country, use commas. E.g. 'Wynn Las Vegas, NV, US'"}, "checkinDate": {"type": "string", "format": "date"}, "checkoutDate": {"type": "string", "format": "date"}, "adults": {"type": "integer", "default": 2}, @@ -397,11 +397,11 @@ URL = "https://www.businesshotels.com/mcp-server.php?route=tools/get_live_ho HEADERS = {"Content-Type": "application/json", "X-API-KEY": "test-live-hotel-rates2025"} hotels_to_check = [ - "Fairmont San Francisco San Francisco US", - "Four Seasons San Francisco at Embarcadero San Francisco US", - "Ritz-Carlton San Francisco San Francisco US", - "St. Regis San Francisco San Francisco US", - "Palace Hotel a Luxury Collection Hotel San Francisco US" + "Fairmont San Francisco, San Francisco, CA, US", + "Four Seasons San Francisco at Embarcadero San Francisco, CA, US", + "Ritz-Carlton San Francisco, San Francisco, CA, US", + "St. Regis San Francisco, San Francisco, CA, US", + "Palace Hotel a Luxury Collection Hotel, San Francisco, CA, US" ] params = {"checkinDate": "2026-07-12", "checkoutDate": "2026-07-14", "adults": 2, "currency": "USD"} From b05666134ff2f34f07d515b88c5dffc28d06c8ec Mon Sep 17 00:00:00 2001 From: BusinessHotels Date: Wed, 22 Apr 2026 09:51:53 -0700 Subject: [PATCH 032/138] Update README.md --- src/business-hotels-mcp/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/business-hotels-mcp/README.md b/src/business-hotels-mcp/README.md index 20d892b380..73b18dd201 100644 --- a/src/business-hotels-mcp/README.md +++ b/src/business-hotels-mcp/README.md @@ -94,7 +94,7 @@ fetch("https://www.businesshotels.com/mcp-server.php?route=tools/get_live_hotel_ "X-API-KEY": "test-live-hotel-rates2025" }, body: JSON.stringify({ - hotelName: "Luxor Las Vegas, NV, US", + hotelName: "JW Marriott, Las Vegas, NV, US", checkinDate: "2026-07-15", checkoutDate: "2026-07-16", adults: 2, From 58ec3d0c47f9e3072379ff02615ca5179a4b8bd0 Mon Sep 17 00:00:00 2001 From: BusinessHotels Date: Wed, 22 Apr 2026 10:27:17 -0700 Subject: [PATCH 033/138] Update README.md --- src/business-hotels-mcp/README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/business-hotels-mcp/README.md b/src/business-hotels-mcp/README.md index 73b18dd201..f23ac321f1 100644 --- a/src/business-hotels-mcp/README.md +++ b/src/business-hotels-mcp/README.md @@ -242,7 +242,7 @@ tools = [{ }] # Step 1 β€” model decides to call the tool -messages = [{"role": "user", "content": "Rates for Luxor Las Vegas, April 20-21 2026?"}] +messages = [{"role": "user", "content": "Rates for Luxor Las Vegas, July 20-21 2026?"}] r1 = client.chat.completions.create(model="gpt-4o", messages=messages, tools=tools, tool_choice="auto") msg = r1.choices.message messages.append(msg) @@ -297,7 +297,7 @@ const tools = [{ }]; // Step 1 β€” model decides to call the tool -const messages = [{ role: "user", content: "Rates for Luxor Las Vegas, April 20-21 2026?" }]; +const messages = [{ role: "user", content: "Rates for Luxor Las Vegas, July 20-21 2026?" }]; const r1 = await client.chat.completions.create({ model: "gpt-4o", messages, tools, tool_choice: "auto" }); const msg = r1.choices.message; messages.push(msg); From fc7cd580db9f2aaf84542b6131089a43f0f5157f Mon Sep 17 00:00:00 2001 From: BusinessHotels Date: Wed, 22 Apr 2026 10:33:26 -0700 Subject: [PATCH 034/138] Update README.md --- src/business-hotels-mcp/README.md | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/src/business-hotels-mcp/README.md b/src/business-hotels-mcp/README.md index f23ac321f1..26522b5c26 100644 --- a/src/business-hotels-mcp/README.md +++ b/src/business-hotels-mcp/README.md @@ -37,6 +37,26 @@ Add to your `claude_desktop_config.json`: } ``` + + +## : Remote SSE (Best for Cursor & Windsurf) +Use this for cloud-native integration without needing to install local dependencies. + +JSON +{ + "mcpServers": { + "businesshotels-remote": { + "description": "Live hotel rates, all-in pricing, and booking URLs from BusinessHotels.com", + "type": "remote", + "urls": { + "tools": "https://www.businesshotels.com/mcp-server.php?route=tools", + "config": "https://www.businesshotels.com/mcp-server.php?route=config" + } + } + } +} +``` + --- ## API Reference From 3e56eb232839781cd0dacc28002f30843e296349 Mon Sep 17 00:00:00 2001 From: BusinessHotels Date: Wed, 22 Apr 2026 10:34:53 -0700 Subject: [PATCH 035/138] Update README.md --- src/business-hotels-mcp/README.md | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/src/business-hotels-mcp/README.md b/src/business-hotels-mcp/README.md index 26522b5c26..0895570a7a 100644 --- a/src/business-hotels-mcp/README.md +++ b/src/business-hotels-mcp/README.md @@ -39,10 +39,11 @@ Add to your `claude_desktop_config.json`: -## : Remote SSE (Best for Cursor & Windsurf) -Use this for cloud-native integration without needing to install local dependencies. + ## Remote SSE (Best for Cursor & Windsurf) -JSON + + +```json { "mcpServers": { "businesshotels-remote": { @@ -57,8 +58,6 @@ JSON } ``` ---- - ## API Reference | Property | Value | From 68084f14ca523b16e176e49637dbecc10b87a5d0 Mon Sep 17 00:00:00 2001 From: BusinessHotels Date: Wed, 22 Apr 2026 10:37:24 -0700 Subject: [PATCH 036/138] Update README.md --- src/business-hotels-mcp/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/business-hotels-mcp/README.md b/src/business-hotels-mcp/README.md index 0895570a7a..24ee8eb0f0 100644 --- a/src/business-hotels-mcp/README.md +++ b/src/business-hotels-mcp/README.md @@ -4,7 +4,7 @@ This is the official [Model Context Protocol (MCP)](https://github.com/modelcont --- -## Connection & Discovery +## Connection & Discovery This server is optimized for autonomous agents and "Bleisure" (business + leisure) travel workflows. From 1b1ff8790f236b9981d4a920a349f55e2e4ff6dd Mon Sep 17 00:00:00 2001 From: BusinessHotels Date: Wed, 22 Apr 2026 10:38:42 -0700 Subject: [PATCH 037/138] Update README.md --- src/business-hotels-mcp/README.md | 17 +++++++---------- 1 file changed, 7 insertions(+), 10 deletions(-) diff --git a/src/business-hotels-mcp/README.md b/src/business-hotels-mcp/README.md index 24ee8eb0f0..1491904cd6 100644 --- a/src/business-hotels-mcp/README.md +++ b/src/business-hotels-mcp/README.md @@ -21,18 +21,15 @@ This server is optimized for autonomous agents and "Bleisure" (business + leisur ## Quick Configuration (Claude Desktop) -Add to your `claude_desktop_config.json`: +### Option 1: Local Stdio (Best for Claude Desktop) +Add the following block to the `mcpServers` section of your `claude_desktop_config.json`: ```json -{ - "mcpServers": { - "businesshotels-universal-agentic-api": { - "command": "npx", - "args": ["-y", "@businesshotels/mcp-server"], - "env": { - "BUSINESS_HOTELS_API_KEY": "test-live-hotel-rates2025" - } - } +"businesshotels-universal-agentic-api": { + "command": "npx", + "args": ["-y", "@businesshotels/mcp-server"], + "env": { + "BUSINESS_HOTELS_API_KEY": "test-live-hotel-rates2025" } } ``` From c37d2d621c9a3a2d3d972373d4d82467fd26e524 Mon Sep 17 00:00:00 2001 From: BusinessHotels Date: Wed, 22 Apr 2026 10:39:25 -0700 Subject: [PATCH 038/138] Update README.md --- src/business-hotels-mcp/README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/src/business-hotels-mcp/README.md b/src/business-hotels-mcp/README.md index 1491904cd6..403b7b5886 100644 --- a/src/business-hotels-mcp/README.md +++ b/src/business-hotels-mcp/README.md @@ -24,6 +24,7 @@ This server is optimized for autonomous agents and "Bleisure" (business + leisur ### Option 1: Local Stdio (Best for Claude Desktop) Add the following block to the `mcpServers` section of your `claude_desktop_config.json`: + ```json "businesshotels-universal-agentic-api": { "command": "npx", From 9298137bb87f2fdcdfd3db38253db7491e953d74 Mon Sep 17 00:00:00 2001 From: BusinessHotels Date: Wed, 22 Apr 2026 10:40:54 -0700 Subject: [PATCH 039/138] Update README.md --- src/business-hotels-mcp/README.md | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/src/business-hotels-mcp/README.md b/src/business-hotels-mcp/README.md index 403b7b5886..6a31da9976 100644 --- a/src/business-hotels-mcp/README.md +++ b/src/business-hotels-mcp/README.md @@ -26,11 +26,15 @@ Add the following block to the `mcpServers` section of your `claude_desktop_conf ```json -"businesshotels-universal-agentic-api": { - "command": "npx", - "args": ["-y", "@businesshotels/mcp-server"], - "env": { - "BUSINESS_HOTELS_API_KEY": "test-live-hotel-rates2025" +{ + "mcpServers": { + "businesshotels-universal-agentic-api": { + "command": "npx", + "args": ["-y", "@businesshotels/mcp-server"], + "env": { + "BUSINESS_HOTELS_API_KEY": "test-live-hotel-rates2025" + } + } } } ``` From def571754eae7a61f2d21b012b42dbb4b0c417f9 Mon Sep 17 00:00:00 2001 From: BusinessHotels Date: Wed, 22 Apr 2026 10:41:39 -0700 Subject: [PATCH 040/138] Update README.md --- src/business-hotels-mcp/README.md | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/src/business-hotels-mcp/README.md b/src/business-hotels-mcp/README.md index 6a31da9976..e46ad2cadf 100644 --- a/src/business-hotels-mcp/README.md +++ b/src/business-hotels-mcp/README.md @@ -28,13 +28,13 @@ Add the following block to the `mcpServers` section of your `claude_desktop_conf ```json { "mcpServers": { - "businesshotels-universal-agentic-api": { - "command": "npx", - "args": ["-y", "@businesshotels/mcp-server"], - "env": { - "BUSINESS_HOTELS_API_KEY": "test-live-hotel-rates2025" - } - } + "businesshotels-universal-agentic-api": { + "command": "npx", + "args": ["-y", "@businesshotels/mcp-server"], + "env": { + "BUSINESS_HOTELS_API_KEY": "test-live-hotel-rates2025" + } +} } } ``` From ef3e823927be1b73004928710962db9015edff15 Mon Sep 17 00:00:00 2001 From: BusinessHotels Date: Wed, 22 Apr 2026 10:42:08 -0700 Subject: [PATCH 041/138] Update README.md --- src/business-hotels-mcp/README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/business-hotels-mcp/README.md b/src/business-hotels-mcp/README.md index e46ad2cadf..e6e566ccb7 100644 --- a/src/business-hotels-mcp/README.md +++ b/src/business-hotels-mcp/README.md @@ -33,8 +33,8 @@ Add the following block to the `mcpServers` section of your `claude_desktop_conf "args": ["-y", "@businesshotels/mcp-server"], "env": { "BUSINESS_HOTELS_API_KEY": "test-live-hotel-rates2025" - } -} + } + } } } ``` From 5df15806d309ae80d5fcbeb69741c490b8f833d6 Mon Sep 17 00:00:00 2001 From: BusinessHotels Date: Wed, 22 Apr 2026 10:43:40 -0700 Subject: [PATCH 042/138] Update README.md --- src/business-hotels-mcp/README.md | 18 +++++++----------- 1 file changed, 7 insertions(+), 11 deletions(-) diff --git a/src/business-hotels-mcp/README.md b/src/business-hotels-mcp/README.md index e6e566ccb7..e51076640b 100644 --- a/src/business-hotels-mcp/README.md +++ b/src/business-hotels-mcp/README.md @@ -28,13 +28,11 @@ Add the following block to the `mcpServers` section of your `claude_desktop_conf ```json { "mcpServers": { - "businesshotels-universal-agentic-api": { +"businesshotels-universal-agentic-api": { "command": "npx", "args": ["-y", "@businesshotels/mcp-server"], "env": { "BUSINESS_HOTELS_API_KEY": "test-live-hotel-rates2025" - } - } } } ``` @@ -48,14 +46,12 @@ Add the following block to the `mcpServers` section of your `claude_desktop_conf ```json { "mcpServers": { - "businesshotels-remote": { - "description": "Live hotel rates, all-in pricing, and booking URLs from BusinessHotels.com", - "type": "remote", - "urls": { - "tools": "https://www.businesshotels.com/mcp-server.php?route=tools", - "config": "https://www.businesshotels.com/mcp-server.php?route=config" - } - } +"businesshotels-remote": { + "description": "Live hotel rates and booking URLs from BusinessHotels.com", + "type": "remote", + "urls": { + "tools": "https://www.businesshotels.com/mcp-server.php?route=tools", + "config": "https://www.businesshotels.com/mcp-server.php?route=config" } } ``` From 144b46745c7700874e49e485d0001dfcb7072270 Mon Sep 17 00:00:00 2001 From: BusinessHotels Date: Wed, 22 Apr 2026 10:46:57 -0700 Subject: [PATCH 043/138] Update README.md --- src/business-hotels-mcp/README.md | 29 ++++++++++++++++++----------- 1 file changed, 18 insertions(+), 11 deletions(-) diff --git a/src/business-hotels-mcp/README.md b/src/business-hotels-mcp/README.md index e51076640b..216ab34868 100644 --- a/src/business-hotels-mcp/README.md +++ b/src/business-hotels-mcp/README.md @@ -28,11 +28,16 @@ Add the following block to the `mcpServers` section of your `claude_desktop_conf ```json { "mcpServers": { -"businesshotels-universal-agentic-api": { - "command": "npx", - "args": ["-y", "@businesshotels/mcp-server"], - "env": { - "BUSINESS_HOTELS_API_KEY": "test-live-hotel-rates2025" + "businesshotels-universal-agentic-api": { + "command": "npx", + "args": [ + "-y", + "@businesshotels/mcp-server" + ], + "env": { + "BUSINESS_HOTELS_API_KEY": "test-live-hotel-rates2025" + } + } } } ``` @@ -46,12 +51,14 @@ Add the following block to the `mcpServers` section of your `claude_desktop_conf ```json { "mcpServers": { -"businesshotels-remote": { - "description": "Live hotel rates and booking URLs from BusinessHotels.com", - "type": "remote", - "urls": { - "tools": "https://www.businesshotels.com/mcp-server.php?route=tools", - "config": "https://www.businesshotels.com/mcp-server.php?route=config" + "businesshotels-remote": { + "description": "Live hotel rates and booking URLs from BusinessHotels.com", + "type": "remote", + "urls": { + "tools": "https://www.businesshotels.com/mcp-server.php?route=tools", + "config": "https://www.businesshotels.com/mcp-server.php?route=config" + } + } } } ``` From 51da2b6b9d969e967d3d70501e246ff7a1ed5915 Mon Sep 17 00:00:00 2001 From: BusinessHotels Date: Wed, 22 Apr 2026 10:53:04 -0700 Subject: [PATCH 044/138] Update README.md --- src/business-hotels-mcp/README.md | 13 ++++--------- 1 file changed, 4 insertions(+), 9 deletions(-) diff --git a/src/business-hotels-mcp/README.md b/src/business-hotels-mcp/README.md index 216ab34868..4e794d2e6c 100644 --- a/src/business-hotels-mcp/README.md +++ b/src/business-hotels-mcp/README.md @@ -11,7 +11,7 @@ This server is optimized for autonomous agents and "Bleisure" (business + leisur | Resource | URL | |---|---| | **MCP Tools Configuration** | https://www.businesshotels.com/mcp-server.php?route=config | -| **MCP Tools Endpoint** | https://www.businesshotels.com/mcp-server.php?route=tool | +| **MCP Tools Endpoint** | https://www.businesshotels.com/mcp-server.php?route=tools | | **OpenAPI Spec** | https://www.businesshotels.com/openapi.json | | **MCP Discovery Spec** | https://www.businesshotels.com/.well-known/mcp.json | | **Plugin Manifest** | https://www.businesshotels.com/.well-known/ai-plugin.json | @@ -24,23 +24,18 @@ This server is optimized for autonomous agents and "Bleisure" (business + leisur ### Option 1: Local Stdio (Best for Claude Desktop) Add the following block to the `mcpServers` section of your `claude_desktop_config.json`: - ```json { "mcpServers": { "businesshotels-universal-agentic-api": { "command": "npx", - "args": [ - "-y", - "@businesshotels/mcp-server" - ], + "args": ["-y", "@businesshotels/mcp-server"], "env": { "BUSINESS_HOTELS_API_KEY": "test-live-hotel-rates2025" } } } } -``` @@ -55,8 +50,8 @@ Add the following block to the `mcpServers` section of your `claude_desktop_conf "description": "Live hotel rates and booking URLs from BusinessHotels.com", "type": "remote", "urls": { - "tools": "https://www.businesshotels.com/mcp-server.php?route=tools", - "config": "https://www.businesshotels.com/mcp-server.php?route=config" + "tools": "[https://www.businesshotels.com/mcp-server.php?route=tools](https://www.businesshotels.com/mcp-server.php?route=tools)", + "config": "[https://www.businesshotels.com/mcp-server.php?route=config](https://www.businesshotels.com/mcp-server.php?route=config)" } } } From d989994c3cf7b7f4c6d465a2c83a1246793fcb44 Mon Sep 17 00:00:00 2001 From: BusinessHotels Date: Wed, 22 Apr 2026 10:54:29 -0700 Subject: [PATCH 045/138] Update README.md --- src/business-hotels-mcp/README.md | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/business-hotels-mcp/README.md b/src/business-hotels-mcp/README.md index 4e794d2e6c..a3296937bc 100644 --- a/src/business-hotels-mcp/README.md +++ b/src/business-hotels-mcp/README.md @@ -10,12 +10,12 @@ This server is optimized for autonomous agents and "Bleisure" (business + leisur | Resource | URL | |---|---| -| **MCP Tools Configuration** | https://www.businesshotels.com/mcp-server.php?route=config | -| **MCP Tools Endpoint** | https://www.businesshotels.com/mcp-server.php?route=tools | -| **OpenAPI Spec** | https://www.businesshotels.com/openapi.json | -| **MCP Discovery Spec** | https://www.businesshotels.com/.well-known/mcp.json | -| **Plugin Manifest** | https://www.businesshotels.com/.well-known/ai-plugin.json | -| **Full API Docs** | https://www.businesshotels.com/tool-config.html | +| **MCP Tools Configuration** | [https://www.businesshotels.com/mcp-server.php?route=config](https://www.businesshotels.com/mcp-server.php?route=config) | +| **MCP Tools Endpoint** | [https://www.businesshotels.com/mcp-server.php?route=tools](https://www.businesshotels.com/mcp-server.php?route=tools) | +| **OpenAPI Spec** | [https://www.businesshotels.com/openapi.json](https://www.businesshotels.com/openapi.json) | +| **MCP Discovery Spec** | [https://www.businesshotels.com/.well-known/mcp.json](https://www.businesshotels.com/.well-known/mcp.json) | +| **Plugin Manifest** | [https://www.businesshotels.com/.well-known/ai-plugin.json](https://www.businesshotels.com/.well-known/ai-plugin.json) | +| **Full API Docs** | [https://www.businesshotels.com/tool-config.html](https://www.businesshotels.com/tool-config.html) | --- From f887884c108a75eb77a4950df7059b1b9774bff7 Mon Sep 17 00:00:00 2001 From: BusinessHotels Date: Wed, 22 Apr 2026 10:55:48 -0700 Subject: [PATCH 046/138] Update README.md --- src/business-hotels-mcp/README.md | 17 ++++++----------- 1 file changed, 6 insertions(+), 11 deletions(-) diff --git a/src/business-hotels-mcp/README.md b/src/business-hotels-mcp/README.md index a3296937bc..16a9621e26 100644 --- a/src/business-hotels-mcp/README.md +++ b/src/business-hotels-mcp/README.md @@ -19,24 +19,19 @@ This server is optimized for autonomous agents and "Bleisure" (business + leisur --- -## Quick Configuration (Claude Desktop) +## Quick Configuration ### Option 1: Local Stdio (Best for Claude Desktop) Add the following block to the `mcpServers` section of your `claude_desktop_config.json`: ```json -{ - "mcpServers": { - "businesshotels-universal-agentic-api": { - "command": "npx", - "args": ["-y", "@businesshotels/mcp-server"], - "env": { - "BUSINESS_HOTELS_API_KEY": "test-live-hotel-rates2025" - } - } +"businesshotels-universal-agentic-api": { + "command": "npx", + "args": ["-y", "@businesshotels/mcp-server"], + "env": { + "BUSINESS_HOTELS_API_KEY": "test-live-hotel-rates2025" } } - ## Remote SSE (Best for Cursor & Windsurf) From f821e5c94f9a1a8f84ef084bc21a5fb629cc646b Mon Sep 17 00:00:00 2001 From: BusinessHotels Date: Wed, 22 Apr 2026 10:56:31 -0700 Subject: [PATCH 047/138] Update README.md --- src/business-hotels-mcp/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/business-hotels-mcp/README.md b/src/business-hotels-mcp/README.md index 16a9621e26..a9a1812902 100644 --- a/src/business-hotels-mcp/README.md +++ b/src/business-hotels-mcp/README.md @@ -29,7 +29,7 @@ Add the following block to the `mcpServers` section of your `claude_desktop_conf "command": "npx", "args": ["-y", "@businesshotels/mcp-server"], "env": { - "BUSINESS_HOTELS_API_KEY": "test-live-hotel-rates2025" + "BUSINESS_HOTELS_API_KEY": "test-live-hotel-rates2025" } } From 92c47ce0f4df1311137702282c9d89b30a742cb2 Mon Sep 17 00:00:00 2001 From: BusinessHotels Date: Wed, 22 Apr 2026 10:57:52 -0700 Subject: [PATCH 048/138] Update README.md --- src/business-hotels-mcp/README.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/business-hotels-mcp/README.md b/src/business-hotels-mcp/README.md index a9a1812902..b9582bf700 100644 --- a/src/business-hotels-mcp/README.md +++ b/src/business-hotels-mcp/README.md @@ -30,9 +30,11 @@ Add the following block to the `mcpServers` section of your `claude_desktop_conf "args": ["-y", "@businesshotels/mcp-server"], "env": { "BUSINESS_HOTELS_API_KEY": "test-live-hotel-rates2025" + } + } } } - +``` ## Remote SSE (Best for Cursor & Windsurf) From 91c00650d88fa606944f800008d737f9fc5abb1d Mon Sep 17 00:00:00 2001 From: BusinessHotels Date: Wed, 22 Apr 2026 10:59:59 -0700 Subject: [PATCH 049/138] Update README.md --- src/business-hotels-mcp/README.md | 20 +++++++++----------- 1 file changed, 9 insertions(+), 11 deletions(-) diff --git a/src/business-hotels-mcp/README.md b/src/business-hotels-mcp/README.md index b9582bf700..45fff65251 100644 --- a/src/business-hotels-mcp/README.md +++ b/src/business-hotels-mcp/README.md @@ -29,9 +29,9 @@ Add the following block to the `mcpServers` section of your `claude_desktop_conf "command": "npx", "args": ["-y", "@businesshotels/mcp-server"], "env": { - "BUSINESS_HOTELS_API_KEY": "test-live-hotel-rates2025" - } - } + "BUSINESS_HOTELS_API_KEY": "test-live-hotel-rates2025" + } +} } } ``` @@ -43,14 +43,12 @@ Add the following block to the `mcpServers` section of your `claude_desktop_conf ```json { "mcpServers": { - "businesshotels-remote": { - "description": "Live hotel rates and booking URLs from BusinessHotels.com", - "type": "remote", - "urls": { - "tools": "[https://www.businesshotels.com/mcp-server.php?route=tools](https://www.businesshotels.com/mcp-server.php?route=tools)", - "config": "[https://www.businesshotels.com/mcp-server.php?route=config](https://www.businesshotels.com/mcp-server.php?route=config)" - } - } +"businesshotels-remote": { + "description": "Live hotel rates and booking URLs from BusinessHotels.com", + "type": "remote", + "urls": { + "tools": "https://www.businesshotels.com/mcp-server.php?route=tools", + "config": "https://www.businesshotels.com/mcp-server.php?route=config" } } ``` From bfad7be1f46f8dc7abdcef7bd286fea419652dce Mon Sep 17 00:00:00 2001 From: BusinessHotels Date: Wed, 22 Apr 2026 11:00:15 -0700 Subject: [PATCH 050/138] Update README.md --- src/business-hotels-mcp/README.md | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/business-hotels-mcp/README.md b/src/business-hotels-mcp/README.md index 45fff65251..de8a628b6a 100644 --- a/src/business-hotels-mcp/README.md +++ b/src/business-hotels-mcp/README.md @@ -32,8 +32,7 @@ Add the following block to the `mcpServers` section of your `claude_desktop_conf "BUSINESS_HOTELS_API_KEY": "test-live-hotel-rates2025" } } - } -} + ``` ## Remote SSE (Best for Cursor & Windsurf) From c689605341656d12b2dd214740f1e2dd9843c967 Mon Sep 17 00:00:00 2001 From: BusinessHotels Date: Wed, 22 Apr 2026 11:01:46 -0700 Subject: [PATCH 051/138] Update README.md --- src/business-hotels-mcp/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/business-hotels-mcp/README.md b/src/business-hotels-mcp/README.md index de8a628b6a..73c1feb7bf 100644 --- a/src/business-hotels-mcp/README.md +++ b/src/business-hotels-mcp/README.md @@ -33,7 +33,7 @@ Add the following block to the `mcpServers` section of your `claude_desktop_conf } } -``` +```json ## Remote SSE (Best for Cursor & Windsurf) From 7c29dbacbad017bec722e446ad9756b5cce30c21 Mon Sep 17 00:00:00 2001 From: BusinessHotels Date: Wed, 22 Apr 2026 11:02:18 -0700 Subject: [PATCH 052/138] Update README.md --- src/business-hotels-mcp/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/business-hotels-mcp/README.md b/src/business-hotels-mcp/README.md index 73c1feb7bf..de8a628b6a 100644 --- a/src/business-hotels-mcp/README.md +++ b/src/business-hotels-mcp/README.md @@ -33,7 +33,7 @@ Add the following block to the `mcpServers` section of your `claude_desktop_conf } } -```json +``` ## Remote SSE (Best for Cursor & Windsurf) From 95f283f653b3c070036f20044343dc25017d6dda Mon Sep 17 00:00:00 2001 From: BusinessHotels Date: Wed, 22 Apr 2026 11:03:18 -0700 Subject: [PATCH 053/138] Update README.md --- src/business-hotels-mcp/README.md | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/src/business-hotels-mcp/README.md b/src/business-hotels-mcp/README.md index de8a628b6a..8cfb83f990 100644 --- a/src/business-hotels-mcp/README.md +++ b/src/business-hotels-mcp/README.md @@ -25,11 +25,18 @@ This server is optimized for autonomous agents and "Bleisure" (business + leisur Add the following block to the `mcpServers` section of your `claude_desktop_config.json`: ```json -"businesshotels-universal-agentic-api": { - "command": "npx", - "args": ["-y", "@businesshotels/mcp-server"], - "env": { - "BUSINESS_HOTELS_API_KEY": "test-live-hotel-rates2025" + { + "mcpServers": { + "businesshotels-universal-agentic-api": { + "command": "npx", + "args": [ + "-y", + "@businesshotels/mcp-server" + ], + "env": { + "BUSINESS_HOTELS_API_KEY": "test-live-hotel-rates2025" + } + } } } From 7aea2bd18d2edf1c3c4df7f2a96c00723ac81560 Mon Sep 17 00:00:00 2001 From: BusinessHotels Date: Wed, 22 Apr 2026 11:05:18 -0700 Subject: [PATCH 054/138] Update README.md --- src/business-hotels-mcp/README.md | 21 ++++++++++----------- 1 file changed, 10 insertions(+), 11 deletions(-) diff --git a/src/business-hotels-mcp/README.md b/src/business-hotels-mcp/README.md index 8cfb83f990..ae146e0658 100644 --- a/src/business-hotels-mcp/README.md +++ b/src/business-hotels-mcp/README.md @@ -25,14 +25,11 @@ This server is optimized for autonomous agents and "Bleisure" (business + leisur Add the following block to the `mcpServers` section of your `claude_desktop_config.json`: ```json - { +{ "mcpServers": { "businesshotels-universal-agentic-api": { "command": "npx", - "args": [ - "-y", - "@businesshotels/mcp-server" - ], + "args": ["-y", "@businesshotels/mcp-server"], "env": { "BUSINESS_HOTELS_API_KEY": "test-live-hotel-rates2025" } @@ -49,12 +46,14 @@ Add the following block to the `mcpServers` section of your `claude_desktop_conf ```json { "mcpServers": { -"businesshotels-remote": { - "description": "Live hotel rates and booking URLs from BusinessHotels.com", - "type": "remote", - "urls": { - "tools": "https://www.businesshotels.com/mcp-server.php?route=tools", - "config": "https://www.businesshotels.com/mcp-server.php?route=config" + "businesshotels-remote": { + "description": "Live hotel rates and booking URLs from BusinessHotels.com", + "type": "remote", + "urls": { + "tools": "https://www.businesshotels.com/mcp-server.php?route=tools", + "config": "https://www.businesshotels.com/mcp-server.php?route=config" + } + } } } ``` From 67384ef613274a3e5ecca19e8b0da9f26b2a5548 Mon Sep 17 00:00:00 2001 From: BusinessHotels Date: Wed, 22 Apr 2026 11:15:37 -0700 Subject: [PATCH 055/138] Update README.md --- src/business-hotels-mcp/README.md | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/business-hotels-mcp/README.md b/src/business-hotels-mcp/README.md index ae146e0658..024f425331 100644 --- a/src/business-hotels-mcp/README.md +++ b/src/business-hotels-mcp/README.md @@ -1,4 +1,9 @@ -# BusinessHotels.com Universal Agentic API (MCP) +![MCP Version](https://img.shields.io/badge/MCP-1.0-blue) +![License](https://img.shields.io/badge/License-MIT-green) +![Uptime](https://img.shields.io/badge/Uptime-99.9%25-brightgreen) +![Market](https://img.shields.io/badge/Focus-Bleisure-orange) + +# BusinessHotels.com Universal Agentic API (MCP) This is the official [Model Context Protocol (MCP)](https://github.com/modelcontextprotocol) server for **BusinessHotels.com**. It provides autonomous AI agents with real-time access to live hotel inventory worldwide, rates, and booking capabilities. From 6fb18f608e7de868501c76f857cba97fe204836f Mon Sep 17 00:00:00 2001 From: BusinessHotels Date: Wed, 22 Apr 2026 11:16:46 -0700 Subject: [PATCH 056/138] Update README.md --- src/business-hotels-mcp/README.md | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/business-hotels-mcp/README.md b/src/business-hotels-mcp/README.md index 024f425331..4555d29718 100644 --- a/src/business-hotels-mcp/README.md +++ b/src/business-hotels-mcp/README.md @@ -1,10 +1,14 @@ ![MCP Version](https://img.shields.io/badge/MCP-1.0-blue) ![License](https://img.shields.io/badge/License-MIT-green) -![Uptime](https://img.shields.io/badge/Uptime-99.9%25-brightgreen) +![Speed](https://img.shields.io/badge/Latency-<1s-brightgreen) ![Market](https://img.shields.io/badge/Focus-Bleisure-orange) # BusinessHotels.com Universal Agentic API (MCP) +This is the official [Model Context Protocol (MCP)](https://modelcontextprotocol.io) server for **BusinessHotels.com**. It provides autonomous AI agents with **instant (<1s)** access to live hotel inventory, rates, and booking capabilities worldwide. + +# BusinessHotels.com Universal Agentic API (MCP) + This is the official [Model Context Protocol (MCP)](https://github.com/modelcontextprotocol) server for **BusinessHotels.com**. It provides autonomous AI agents with real-time access to live hotel inventory worldwide, rates, and booking capabilities. --- From 9740ff98d6e930f83d35bc255bfd45f14c29b92f Mon Sep 17 00:00:00 2001 From: BusinessHotels Date: Wed, 22 Apr 2026 11:17:38 -0700 Subject: [PATCH 057/138] Update README.md --- src/business-hotels-mcp/README.md | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/src/business-hotels-mcp/README.md b/src/business-hotels-mcp/README.md index 4555d29718..8ae135dc29 100644 --- a/src/business-hotels-mcp/README.md +++ b/src/business-hotels-mcp/README.md @@ -7,10 +7,7 @@ This is the official [Model Context Protocol (MCP)](https://modelcontextprotocol.io) server for **BusinessHotels.com**. It provides autonomous AI agents with **instant (<1s)** access to live hotel inventory, rates, and booking capabilities worldwide. -# BusinessHotels.com Universal Agentic API (MCP) - -This is the official [Model Context Protocol (MCP)](https://github.com/modelcontextprotocol) server for **BusinessHotels.com**. It provides autonomous AI agents with real-time access to live hotel inventory worldwide, rates, and booking capabilities. - + --- ## Connection & Discovery From 0028bed9520b2314aee2ed19d9d1ff7b3f706c2f Mon Sep 17 00:00:00 2001 From: BusinessHotels Date: Wed, 22 Apr 2026 11:18:02 -0700 Subject: [PATCH 058/138] Update README.md --- src/business-hotels-mcp/README.md | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/business-hotels-mcp/README.md b/src/business-hotels-mcp/README.md index 8ae135dc29..1952964f8c 100644 --- a/src/business-hotels-mcp/README.md +++ b/src/business-hotels-mcp/README.md @@ -7,7 +7,12 @@ This is the official [Model Context Protocol (MCP)](https://modelcontextprotocol.io) server for **BusinessHotels.com**. It provides autonomous AI agents with **instant (<1s)** access to live hotel inventory, rates, and booking capabilities worldwide. - +πŸš€ Performance & Reliability +Ultra-Low Latency: Engineered for agentic workflows where speed is critical. Most requests return in under 800ms, allowing agents to compare multiple hotels in parallel without hitting LLM timeout limits. + +Real-Time Accuracy: Unlike cached databases, our "Agentic API" fetches live inventory directly from the global distribution system (GDS) the moment the tool is called. + +Optimized for Parallelism: Use the Multi-Hotel Comparison Pattern below to fetch rates for 5+ hotels simultaneously in under 2 seconds. --- ## Connection & Discovery From 9db8ed112864fd6676a8054e5dffc39da1a777f0 Mon Sep 17 00:00:00 2001 From: BusinessHotels Date: Wed, 22 Apr 2026 11:19:03 -0700 Subject: [PATCH 059/138] Update README.md --- src/business-hotels-mcp/README.md | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/src/business-hotels-mcp/README.md b/src/business-hotels-mcp/README.md index 1952964f8c..8ae135dc29 100644 --- a/src/business-hotels-mcp/README.md +++ b/src/business-hotels-mcp/README.md @@ -7,12 +7,7 @@ This is the official [Model Context Protocol (MCP)](https://modelcontextprotocol.io) server for **BusinessHotels.com**. It provides autonomous AI agents with **instant (<1s)** access to live hotel inventory, rates, and booking capabilities worldwide. -πŸš€ Performance & Reliability -Ultra-Low Latency: Engineered for agentic workflows where speed is critical. Most requests return in under 800ms, allowing agents to compare multiple hotels in parallel without hitting LLM timeout limits. - -Real-Time Accuracy: Unlike cached databases, our "Agentic API" fetches live inventory directly from the global distribution system (GDS) the moment the tool is called. - -Optimized for Parallelism: Use the Multi-Hotel Comparison Pattern below to fetch rates for 5+ hotels simultaneously in under 2 seconds. + --- ## Connection & Discovery From 795c4de368d22360ff3a0932b652701072473439 Mon Sep 17 00:00:00 2001 From: BusinessHotels Date: Wed, 22 Apr 2026 11:20:15 -0700 Subject: [PATCH 060/138] Update README.md --- src/business-hotels-mcp/README.md | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/src/business-hotels-mcp/README.md b/src/business-hotels-mcp/README.md index 8ae135dc29..900096b20a 100644 --- a/src/business-hotels-mcp/README.md +++ b/src/business-hotels-mcp/README.md @@ -25,6 +25,17 @@ This server is optimized for autonomous agents and "Bleisure" (business + leisur --- +... +| [Full API Docs](https://www.businesshotels.com/tool-config.html) | + +## πŸš€ Performance & Reliability +* **Ultra-Low Latency:** Engineered for agentic workflows where speed is critical. Most requests return in **under 800ms**, allowing agents to compare multiple hotels in parallel without hitting LLM timeout limits. +* **Real-Time Accuracy:** Unlike cached databases, our "Agentic API" fetches live inventory directly from the global distribution system (GDS) the moment the tool is called. +* **Optimized for Parallelism:** Use the [Multi-Hotel Comparison Pattern](#-multi-hotel-comparison-pattern) below to fetch rates for 5+ hotels simultaneously in under 2 seconds. + +## Quick Configuration +... + ## Quick Configuration ### Option 1: Local Stdio (Best for Claude Desktop) From 4d6278407c3ecccd48b62dd8a862c0a8d5944049 Mon Sep 17 00:00:00 2001 From: BusinessHotels Date: Wed, 22 Apr 2026 11:20:46 -0700 Subject: [PATCH 061/138] Update README.md --- src/business-hotels-mcp/README.md | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/business-hotels-mcp/README.md b/src/business-hotels-mcp/README.md index 900096b20a..defa2b7c64 100644 --- a/src/business-hotels-mcp/README.md +++ b/src/business-hotels-mcp/README.md @@ -33,8 +33,7 @@ This server is optimized for autonomous agents and "Bleisure" (business + leisur * **Real-Time Accuracy:** Unlike cached databases, our "Agentic API" fetches live inventory directly from the global distribution system (GDS) the moment the tool is called. * **Optimized for Parallelism:** Use the [Multi-Hotel Comparison Pattern](#-multi-hotel-comparison-pattern) below to fetch rates for 5+ hotels simultaneously in under 2 seconds. -## Quick Configuration -... + ## Quick Configuration From 0fb70b2a084894fe0993b8b4e0c66e9c4bbd1ee7 Mon Sep 17 00:00:00 2001 From: BusinessHotels Date: Wed, 22 Apr 2026 11:23:46 -0700 Subject: [PATCH 062/138] Update README.md --- src/business-hotels-mcp/README.md | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/business-hotels-mcp/README.md b/src/business-hotels-mcp/README.md index defa2b7c64..d3b1b9ca05 100644 --- a/src/business-hotels-mcp/README.md +++ b/src/business-hotels-mcp/README.md @@ -423,7 +423,13 @@ print(final.text) This API uses a **one-hotel-per-request** architecture β€” there is no batch endpoint. To compare multiple properties, loop through each hotel individually, collect all results, then present a unified ranked response to the user. -### βœ… Correct Pattern β€” Loop, Collect, Then Respond +## βœ… Correct Pattern β€” Parallel Fetching (Under 2 Seconds) + +To make the Multi-Hotel Comparison Pattern truly demonstrate our sub-second speed, this implementation moves away from sequential loops in favor of **asynchronous parallelism**. + +In a sequential version, 5 hotels taking 800ms each would take 4 seconds. With the parallel code below, all requests fire at once, finishing the entire comparison in **~800ms to 1 second**. + +This example uses Python's `concurrent.futures` to fire all requests simultaneously, ensuring your agent gets a full comparison in the time it takes for a single request. ```python import requests From 2730d86c0f7842c2a70854b29f199b14b51ba43a Mon Sep 17 00:00:00 2001 From: BusinessHotels Date: Wed, 22 Apr 2026 12:00:09 -0700 Subject: [PATCH 063/138] Update README.md --- src/business-hotels-mcp/README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/business-hotels-mcp/README.md b/src/business-hotels-mcp/README.md index d3b1b9ca05..72a55f2545 100644 --- a/src/business-hotels-mcp/README.md +++ b/src/business-hotels-mcp/README.md @@ -2,6 +2,8 @@ ![License](https://img.shields.io/badge/License-MIT-green) ![Speed](https://img.shields.io/badge/Latency-<1s-brightgreen) ![Market](https://img.shields.io/badge/Focus-Bleisure-orange) +![Latency](https://img.shields.io/badge/Latency-%3C800ms-green?style=flat-square&logo=speedtest&logoColor=white) +![Data Source](https://img.shields.io/badge/Data-Verified_GDS-blue?style=flat-square&logo=googlecloud&logoColor=white) # BusinessHotels.com Universal Agentic API (MCP) From 3aa0b9a0b001e8fe52e32af82608eec81e8f5673 Mon Sep 17 00:00:00 2001 From: BusinessHotels Date: Wed, 22 Apr 2026 12:00:53 -0700 Subject: [PATCH 064/138] Update README.md --- src/business-hotels-mcp/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/business-hotels-mcp/README.md b/src/business-hotels-mcp/README.md index 72a55f2545..5b096cdb43 100644 --- a/src/business-hotels-mcp/README.md +++ b/src/business-hotels-mcp/README.md @@ -1,6 +1,6 @@ +[![smithery badge](https://smithery.ai/badge/businesshotelsdeveloper/business-hotels)](https://smithery.ai/servers/businesshotelsdeveloper/business-hotels) ![MCP Version](https://img.shields.io/badge/MCP-1.0-blue) ![License](https://img.shields.io/badge/License-MIT-green) -![Speed](https://img.shields.io/badge/Latency-<1s-brightgreen) ![Market](https://img.shields.io/badge/Focus-Bleisure-orange) ![Latency](https://img.shields.io/badge/Latency-%3C800ms-green?style=flat-square&logo=speedtest&logoColor=white) ![Data Source](https://img.shields.io/badge/Data-Verified_GDS-blue?style=flat-square&logo=googlecloud&logoColor=white) From 02eb8cbbf864ff5642cc95b1e8fcd249b4f26ff7 Mon Sep 17 00:00:00 2001 From: BusinessHotels Date: Wed, 22 Apr 2026 12:01:46 -0700 Subject: [PATCH 065/138] Update README.md --- src/business-hotels-mcp/README.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/business-hotels-mcp/README.md b/src/business-hotels-mcp/README.md index 5b096cdb43..966c4def42 100644 --- a/src/business-hotels-mcp/README.md +++ b/src/business-hotels-mcp/README.md @@ -1,9 +1,9 @@ [![smithery badge](https://smithery.ai/badge/businesshotelsdeveloper/business-hotels)](https://smithery.ai/servers/businesshotelsdeveloper/business-hotels) ![MCP Version](https://img.shields.io/badge/MCP-1.0-blue) -![License](https://img.shields.io/badge/License-MIT-green) -![Market](https://img.shields.io/badge/Focus-Bleisure-orange) +![Travel](https://img.shields.io/badge/Travel-Global_Inventory-blueviolet) +![Hotel Rates](https://img.shields.io/badge/Hotel_Prices-Live_GDS-red) ![Latency](https://img.shields.io/badge/Latency-%3C800ms-green?style=flat-square&logo=speedtest&logoColor=white) -![Data Source](https://img.shields.io/badge/Data-Verified_GDS-blue?style=flat-square&logo=googlecloud&logoColor=white) +![Focus](https://img.shields.io/badge/Focus-Bleisure-orange) # BusinessHotels.com Universal Agentic API (MCP) From 7f86386ffa0ae6605bcffd7b5449f23e8667862d Mon Sep 17 00:00:00 2001 From: BusinessHotels Date: Wed, 22 Apr 2026 12:53:01 -0700 Subject: [PATCH 066/138] Update README.md --- src/business-hotels-mcp/README.md | 26 +++++++++++++++++++++++++- 1 file changed, 25 insertions(+), 1 deletion(-) diff --git a/src/business-hotels-mcp/README.md b/src/business-hotels-mcp/README.md index 966c4def42..c51ab84ff4 100644 --- a/src/business-hotels-mcp/README.md +++ b/src/business-hotels-mcp/README.md @@ -5,7 +5,31 @@ ![Latency](https://img.shields.io/badge/Latency-%3C800ms-green?style=flat-square&logo=speedtest&logoColor=white) ![Focus](https://img.shields.io/badge/Focus-Bleisure-orange) -# BusinessHotels.com Universal Agentic API (MCP) +## 🌍 Universal LLM Compatibility +The **BusinessHotels.com MCP Server** uses the OpenAI-compatible JSON Schema formatβ€”the universal standard accepted by all leading AI platforms. The MCP discovery endpoint enables zero-config auto-registration across the entire agentic ecosystem. + +| Platform | Integration Method | Status | +| :--- | :--- | :--- | +| **Claude** | **Native MCP Connector** (auto-discovery) or function calling. | βœ… Fully supported | +| **ChatGPT** | **Function Calling API** & GPT Assistant Actions. | βœ… Fully supported | +| **Google Gemini** | **Function Calling API** (utilizing the same JSON Schema). | βœ… Fully supported | +| **Perplexity** | **Function calling + MCP Connectors** (via Mac/Comet). | βœ… Fully supported | +| **Microsoft Copilot** | **Copilot Studio** custom actions or MCP plugin manifest. | βœ… Fully supported | +| **Cursor / Windsurf** | **Native MCP Connector** for real-time IDE integration. | βœ… Fully supported | +| **Any MCP Client** | **Auto-discovery** via the `?route=tools` endpoint. | βœ… Protocol-native | + +--- + +### πŸ”— Technical Discovery Endpoints +For platforms requiring manifest files or discovery URLs: + +* **MCP Tools Endpoint:** `https://www.businesshotels.com/mcp-server.php?route=tools` +* **MCP Discovery Spec:** `https://www.businesshotels.com/.well-known/mcp.json` +* **OpenAPI Specification:** `https://www.businesshotels.com/openapi.json` +* **AI Plugin Manifest:** `https://www.businesshotels.com/.well-known/ai-plugin.json` + +> [!TIP] +> Because we adhere to the **Model Context Protocol**, agents can autonomously determine the required parameters (`hotelName`, `checkinDate`, `checkoutDate`) without manual prompt engineering. This is the official [Model Context Protocol (MCP)](https://modelcontextprotocol.io) server for **BusinessHotels.com**. It provides autonomous AI agents with **instant (<1s)** access to live hotel inventory, rates, and booking capabilities worldwide. From 5a8c5ab5da92c2cea2b494e3fd2dd3f43c174238 Mon Sep 17 00:00:00 2001 From: BusinessHotels Date: Wed, 22 Apr 2026 12:54:23 -0700 Subject: [PATCH 067/138] Update README.md --- src/business-hotels-mcp/README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/business-hotels-mcp/README.md b/src/business-hotels-mcp/README.md index c51ab84ff4..87938bdbd6 100644 --- a/src/business-hotels-mcp/README.md +++ b/src/business-hotels-mcp/README.md @@ -5,6 +5,8 @@ ![Latency](https://img.shields.io/badge/Latency-%3C800ms-green?style=flat-square&logo=speedtest&logoColor=white) ![Focus](https://img.shields.io/badge/Focus-Bleisure-orange) + BusinessHotels Universal Agentic API + ## 🌍 Universal LLM Compatibility The **BusinessHotels.com MCP Server** uses the OpenAI-compatible JSON Schema formatβ€”the universal standard accepted by all leading AI platforms. The MCP discovery endpoint enables zero-config auto-registration across the entire agentic ecosystem. From dd4adae0fdf209ae138f19a88dd6fd3147361162 Mon Sep 17 00:00:00 2001 From: BusinessHotels Date: Wed, 22 Apr 2026 12:54:49 -0700 Subject: [PATCH 068/138] Update README.md --- src/business-hotels-mcp/README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/business-hotels-mcp/README.md b/src/business-hotels-mcp/README.md index 87938bdbd6..9e2592c7e3 100644 --- a/src/business-hotels-mcp/README.md +++ b/src/business-hotels-mcp/README.md @@ -5,9 +5,9 @@ ![Latency](https://img.shields.io/badge/Latency-%3C800ms-green?style=flat-square&logo=speedtest&logoColor=white) ![Focus](https://img.shields.io/badge/Focus-Bleisure-orange) - BusinessHotels Universal Agentic API + -## 🌍 Universal LLM Compatibility +## 🌍 BusinessHotels Universal Agentic API - Universal LLM Compatibility The **BusinessHotels.com MCP Server** uses the OpenAI-compatible JSON Schema formatβ€”the universal standard accepted by all leading AI platforms. The MCP discovery endpoint enables zero-config auto-registration across the entire agentic ecosystem. | Platform | Integration Method | Status | From 796d079d91020c8797ee186f4c02ea94dce65013 Mon Sep 17 00:00:00 2001 From: BusinessHotels Date: Wed, 22 Apr 2026 12:56:22 -0700 Subject: [PATCH 069/138] Update README.md --- src/business-hotels-mcp/README.md | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/src/business-hotels-mcp/README.md b/src/business-hotels-mcp/README.md index 9e2592c7e3..ccfc643b06 100644 --- a/src/business-hotels-mcp/README.md +++ b/src/business-hotels-mcp/README.md @@ -7,18 +7,18 @@ -## 🌍 BusinessHotels Universal Agentic API - Universal LLM Compatibility -The **BusinessHotels.com MCP Server** uses the OpenAI-compatible JSON Schema formatβ€”the universal standard accepted by all leading AI platforms. The MCP discovery endpoint enables zero-config auto-registration across the entire agentic ecosystem. +## 🌍 Universal LLM Compatibility +The **BusinessHotels.com MCP Server** is built on the OpenAI-compatible JSON Schema formatβ€”the universal standard accepted by all leading AI platforms. This enables zero-config auto-registration across the entire agentic ecosystem. | Platform | Integration Method | Status | | :--- | :--- | :--- | -| **Claude** | **Native MCP Connector** (auto-discovery) or function calling. | βœ… Fully supported | -| **ChatGPT** | **Function Calling API** & GPT Assistant Actions. | βœ… Fully supported | -| **Google Gemini** | **Function Calling API** (utilizing the same JSON Schema). | βœ… Fully supported | -| **Perplexity** | **Function calling + MCP Connectors** (via Mac/Comet). | βœ… Fully supported | -| **Microsoft Copilot** | **Copilot Studio** custom actions or MCP plugin manifest. | βœ… Fully supported | -| **Cursor / Windsurf** | **Native MCP Connector** for real-time IDE integration. | βœ… Fully supported | -| **Any MCP Client** | **Auto-discovery** via the `?route=tools` endpoint. | βœ… Protocol-native | +| 🟣 **Claude** | **Native MCP Connector** (auto-discovery) | βœ… **Fully supported** | +| 🟒 **ChatGPT** | **Function Calling API** & GPT Assistant Actions | βœ… **Fully supported** | +| πŸ”΅ **Google Gemini** | **Function Calling API** (JSON Schema) | βœ… **Fully supported** | +| πŸ”΄ **Perplexity** | **Function calling + MCP Connectors** | βœ… **Fully supported** | +| πŸͺŸ **MS Copilot** | **Copilot Studio** or MCP plugin manifest | βœ… **Fully supported** | +| πŸ’» **Cursor / Windsurf** | **Native MCP Connector** (IDE integration) | βœ… **Fully supported** | +| 🌐 **Any MCP Client** | **Auto-discovery** via `?route=tools` | βœ… **Protocol-native** | --- @@ -31,6 +31,7 @@ For platforms requiring manifest files or discovery URLs: * **AI Plugin Manifest:** `https://www.businesshotels.com/.well-known/ai-plugin.json` > [!TIP] +> **Zero-Prompt Engineering:** Because we adhere to the **Model Context Protocol**, agents can autonomously determine required parameters like `hotelName` and `checkinDate` without manual instructions. > Because we adhere to the **Model Context Protocol**, agents can autonomously determine the required parameters (`hotelName`, `checkinDate`, `checkoutDate`) without manual prompt engineering. This is the official [Model Context Protocol (MCP)](https://modelcontextprotocol.io) server for **BusinessHotels.com**. It provides autonomous AI agents with **instant (<1s)** access to live hotel inventory, rates, and booking capabilities worldwide. From 645be26ba2df995fc2cf536bd49d7b5dd02fe8d9 Mon Sep 17 00:00:00 2001 From: BusinessHotels Date: Wed, 22 Apr 2026 12:57:01 -0700 Subject: [PATCH 070/138] Update README.md --- src/business-hotels-mcp/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/business-hotels-mcp/README.md b/src/business-hotels-mcp/README.md index ccfc643b06..7680a51893 100644 --- a/src/business-hotels-mcp/README.md +++ b/src/business-hotels-mcp/README.md @@ -7,7 +7,7 @@ -## 🌍 Universal LLM Compatibility +## 🌍 BusinessHotels Universal Agentic API - Universal LLM Compatibility The **BusinessHotels.com MCP Server** is built on the OpenAI-compatible JSON Schema formatβ€”the universal standard accepted by all leading AI platforms. This enables zero-config auto-registration across the entire agentic ecosystem. | Platform | Integration Method | Status | From 64768350975237abcba47108165ff6450300e304 Mon Sep 17 00:00:00 2001 From: BusinessHotels Date: Wed, 22 Apr 2026 12:57:27 -0700 Subject: [PATCH 071/138] Update README.md --- src/business-hotels-mcp/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/business-hotels-mcp/README.md b/src/business-hotels-mcp/README.md index 7680a51893..9b8cda1c8c 100644 --- a/src/business-hotels-mcp/README.md +++ b/src/business-hotels-mcp/README.md @@ -7,7 +7,7 @@ -## 🌍 BusinessHotels Universal Agentic API - Universal LLM Compatibility +## 🌍 BusinessHotels Agentic API - Universal LLM Compatibility The **BusinessHotels.com MCP Server** is built on the OpenAI-compatible JSON Schema formatβ€”the universal standard accepted by all leading AI platforms. This enables zero-config auto-registration across the entire agentic ecosystem. | Platform | Integration Method | Status | From 7f4829dfd37fafa29b899ebc1a86bde4a398e60e Mon Sep 17 00:00:00 2001 From: BusinessHotels Date: Wed, 22 Apr 2026 16:13:57 -0700 Subject: [PATCH 072/138] Update README.md --- src/business-hotels-mcp/README.md | 69 ++++++++++++++++++------------- 1 file changed, 41 insertions(+), 28 deletions(-) diff --git a/src/business-hotels-mcp/README.md b/src/business-hotels-mcp/README.md index 9b8cda1c8c..91b2bab931 100644 --- a/src/business-hotels-mcp/README.md +++ b/src/business-hotels-mcp/README.md @@ -448,57 +448,70 @@ print(final.text) --- -## πŸ” Multi-Hotel Comparison Pattern +## πŸ” Multi-Hotel Comparison Pattern (High Performance) +This API uses a **one-hotel-per-request** architecture. To maintain sub-second response times for comparisons, agents must use **asynchronous parallelism** rather than sequential loops. -This API uses a **one-hotel-per-request** architecture β€” there is no batch endpoint. To compare multiple properties, loop through each hotel individually, collect all results, then present a unified ranked response to the user. - -## βœ… Correct Pattern β€” Parallel Fetching (Under 2 Seconds) - -To make the Multi-Hotel Comparison Pattern truly demonstrate our sub-second speed, this implementation moves away from sequential loops in favor of **asynchronous parallelism**. - -In a sequential version, 5 hotels taking 800ms each would take 4 seconds. With the parallel code below, all requests fire at once, finishing the entire comparison in **~800ms to 1 second**. - -This example uses Python's `concurrent.futures` to fire all requests simultaneously, ensuring your agent gets a full comparison in the time it takes for a single request. +## βœ… Correct Pattern β€” Parallel Fetching (Under 1 Second) +In a sequential loop, 5 hotels would take ~4 seconds. With the parallel code below using `concurrent.futures`, all requests fire simultaneously, finishing the entire comparison in the time it takes for a single request. ```python -import requests + import requests +from concurrent.futures import ThreadPoolExecutor URL = "https://www.businesshotels.com/mcp-server.php?route=tools/get_live_hotel_rates" HEADERS = {"Content-Type": "application/json", "X-API-KEY": "test-live-hotel-rates2025"} hotels_to_check = [ "Fairmont San Francisco, San Francisco, CA, US", - "Four Seasons San Francisco at Embarcadero San Francisco, CA, US", + "Four Seasons San Francisco at Embarcadero, San Francisco, CA, US", "Ritz-Carlton San Francisco, San Francisco, CA, US", "St. Regis San Francisco, San Francisco, CA, US", - "Palace Hotel a Luxury Collection Hotel, San Francisco, CA, US" + "Palace Hotel a Luxury Collection Hotel, San Francisco, CA, US" ] -params = {"checkinDate": "2026-07-12", "checkoutDate": "2026-07-14", "adults": 2, "currency": "USD"} -results = [] +params = {"checkinDate": "2026-07-12", "checkoutDate": "2026-07-14", "adults": 2, "currency": "USD"} + +def fetch_hotel_data(hotel_name): + """Worker function to fetch a single hotel rate.""" + try: + response = requests.post(URL, headers=HEADERS, json={**params, "hotelName": hotel_name}, timeout=10) + return response.json() + except Exception: + return None -for hotel in hotels_to_check: - data = requests.post(URL, headers=HEADERS, json={**params, "hotelName": hotel}, timeout=10).json() - rates = data.get("rates") - if rates and rates.get("display_all_in_total"): - price = float(str(rates["display_all_in_total"]).replace(",", "")) +# EXECUTE IN PARALLEL: This is what makes it fast. +with ThreadPoolExecutor(max_workers=5) as executor: + raw_results = list(executor.map(fetch_hotel_data, hotels_to_check)) + +# Process and sort results +results = [] +for data in raw_results: + if data and data.get("rates") and data["rates"].get("display_all_in_total"): + # Strip commas for math: "1,250.00" -> 1250.0 + price = float(str(data["rates"]["display_all_in_total"]).replace(",", "")) results.append({ - "name": data["hotel_name"], - "price": price, - "url": data["booking_page_live_rates"], - "hotel_id": data.get("hotel_id") + "name": data["hotel_name"], + "price": price, + "url": data["booking_page_live_rates"] }) -# Sort and present ALL results together β€” never respond mid-loop results.sort(key=lambda x: x["price"]) + for i, h in enumerate(results, 1): print(f"{i}. {h['name']}: ${h['price']:.2f}") -cheapest = results -print(f"\nπŸ† Best Value: {cheapest['name']} at ${cheapest['price']:.2f}") -print(f"πŸ‘‰ Book Now: {cheapest['url']}") +if results: + print(f"\nπŸ† Best Value: {results[0]['name']} at ${results[0]['price']:.2f}") + print(f"πŸ‘‰ Book Now: {results[0]['url']}") ``` +### ⚠️ Critical Implementation Guardrails +* **Confidence Scoring:** Always check the `best_match_score`. If it is below **0.85**, the agent must verify the hotel identity (City/State) before providing a booking link. +* **Price Lock Expiry:** The `ppn_bundle` and price are valid for **~20 minutes**. Agents should re-fetch the rate if the user returns to an old session. +* **Discovery Specs:** For non-MCP integrations, use our [OpenAPI 3.0 Spec](https://www.businesshotels.com/openapi.json) or [AI Plugin Manifest](https://www.businesshotels.com/.well-known/ai-plugin.json). + + + ### Architectural Rules > πŸ“Œ **Complete all requests before responding.** Always finish the full loop before presenting any results. Responding mid-loop creates a fragmented, incomplete user experience. From 290c550d40e2cee669f6327e232c99e381ad294d Mon Sep 17 00:00:00 2001 From: BusinessHotels Date: Wed, 22 Apr 2026 19:34:42 -0700 Subject: [PATCH 073/138] Update README.md --- src/business-hotels-mcp/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/business-hotels-mcp/README.md b/src/business-hotels-mcp/README.md index 91b2bab931..3c09c5c361 100644 --- a/src/business-hotels-mcp/README.md +++ b/src/business-hotels-mcp/README.md @@ -7,7 +7,7 @@ -## 🌍 BusinessHotels Agentic API - Universal LLM Compatibility +## 🌍 BusinessHotels Agentic API - Universal LLM Compatibility. The **BusinessHotels.com MCP Server** is built on the OpenAI-compatible JSON Schema formatβ€”the universal standard accepted by all leading AI platforms. This enables zero-config auto-registration across the entire agentic ecosystem. | Platform | Integration Method | Status | From 18099f9e1f44bb4013bee538a42c487005a365fe Mon Sep 17 00:00:00 2001 From: BusinessHotels Date: Wed, 22 Apr 2026 20:01:05 -0700 Subject: [PATCH 074/138] Update README.md --- src/business-hotels-mcp/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/business-hotels-mcp/README.md b/src/business-hotels-mcp/README.md index 3c09c5c361..91b2bab931 100644 --- a/src/business-hotels-mcp/README.md +++ b/src/business-hotels-mcp/README.md @@ -7,7 +7,7 @@ -## 🌍 BusinessHotels Agentic API - Universal LLM Compatibility. +## 🌍 BusinessHotels Agentic API - Universal LLM Compatibility The **BusinessHotels.com MCP Server** is built on the OpenAI-compatible JSON Schema formatβ€”the universal standard accepted by all leading AI platforms. This enables zero-config auto-registration across the entire agentic ecosystem. | Platform | Integration Method | Status | From dbc71a14e1bee0722154c0c8d01a50a1d27aeca6 Mon Sep 17 00:00:00 2001 From: Nikolay Belitchenov Date: Wed, 22 Apr 2026 20:05:32 -0700 Subject: [PATCH 075/138] updating the readme.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 874916cab3..b581e13d2d 100644 --- a/README.md +++ b/README.md @@ -256,4 +256,4 @@ If you find MCP servers useful, please consider starring the repository and cont --- -Managed by Anthropic, but built together with the community. The Model Context Protocol is open source and we encourage everyone to contribute their own servers and improvements! +Managed by Anthropic, but built together with the community. The Model Context Protocol is open source and we encourage everyone to contribute their own servers and improvement. From 328f6b7c88bae338dcf5b9f8f3b2c6a8ef115a80 Mon Sep 17 00:00:00 2001 From: Nikolay Belitchenov Date: Wed, 22 Apr 2026 20:07:47 -0700 Subject: [PATCH 076/138] updating the readme.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index b581e13d2d..af7dc9dfc7 100644 --- a/README.md +++ b/README.md @@ -256,4 +256,4 @@ If you find MCP servers useful, please consider starring the repository and cont --- -Managed by Anthropic, but built together with the community. The Model Context Protocol is open source and we encourage everyone to contribute their own servers and improvement. +Managed by Anthropic, but built together with the community. The Model Context Protocol is open source and we encourage everyone to contribute their own servers and improvement! From f2ba551f403d338cacead688252fa677bc7b8b68 Mon Sep 17 00:00:00 2001 From: Nikolay Belitchenov Date: Wed, 22 Apr 2026 20:14:34 -0700 Subject: [PATCH 077/138] Revert "Update README.md" This reverts commit 18099f9e1f44bb4013bee538a42c487005a365fe. --- src/business-hotels-mcp/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/business-hotels-mcp/README.md b/src/business-hotels-mcp/README.md index 91b2bab931..3c09c5c361 100644 --- a/src/business-hotels-mcp/README.md +++ b/src/business-hotels-mcp/README.md @@ -7,7 +7,7 @@ -## 🌍 BusinessHotels Agentic API - Universal LLM Compatibility +## 🌍 BusinessHotels Agentic API - Universal LLM Compatibility. The **BusinessHotels.com MCP Server** is built on the OpenAI-compatible JSON Schema formatβ€”the universal standard accepted by all leading AI platforms. This enables zero-config auto-registration across the entire agentic ecosystem. | Platform | Integration Method | Status | From 2ab21c365cf049e4dfef1e5236b24874296b85ee Mon Sep 17 00:00:00 2001 From: BusinessHotels Date: Wed, 22 Apr 2026 21:09:31 -0700 Subject: [PATCH 078/138] Update README.md --- src/business-hotels-mcp/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/business-hotels-mcp/README.md b/src/business-hotels-mcp/README.md index 3c09c5c361..a6ecdb3c45 100644 --- a/src/business-hotels-mcp/README.md +++ b/src/business-hotels-mcp/README.md @@ -7,7 +7,7 @@ -## 🌍 BusinessHotels Agentic API - Universal LLM Compatibility. +## 🌍 BusinessHotels.com Agentic API - Universal LLM Compatibility. The **BusinessHotels.com MCP Server** is built on the OpenAI-compatible JSON Schema formatβ€”the universal standard accepted by all leading AI platforms. This enables zero-config auto-registration across the entire agentic ecosystem. | Platform | Integration Method | Status | From 2ca631c341022a7341afd3a9db683c539e03447d Mon Sep 17 00:00:00 2001 From: BusinessHotels Date: Thu, 23 Apr 2026 13:34:23 -0700 Subject: [PATCH 079/138] Update package.json --- src/business-hotels-mcp/package.json | 20 ++++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) diff --git a/src/business-hotels-mcp/package.json b/src/business-hotels-mcp/package.json index 153eec0bca..151e63ddae 100644 --- a/src/business-hotels-mcp/package.json +++ b/src/business-hotels-mcp/package.json @@ -1,12 +1,27 @@ { "name": "@businesshotels/mcp-server", - "version": "1.0.1", + "version": "1.0.2", "description": "Universal Agentic API for real-time hotel pricing and booking automation via BusinessHotels.com", "main": "build/index.js", "type": "module", "bin": { "business-hotels-mcp": "build/index.js" }, + "mcp": { + "name": "Business Hotels AI Price Finder", + "description": "Autonomous protocol for hotel discovery and real-time rate verification using MCP 1.0.", + "logo": "https://www.businesshotels.com/images/logo-neon.png", + "categories": [ + "travel", + "hospitality", + "booking" + ], + "links": { + "homepage": "https://www.businesshotels.com/ai-hotel-finder.html", + "documentation": "https://www.businesshotels.com/tool-config.html", + "repository": "https://github.com/businesshotelsdeveloper-dot/businesshotels.com" + } + }, "files": [ "build" ], @@ -26,7 +41,8 @@ "hotels", "booking", "agentic-ai", - "mcp-server" + "mcp-server", + "real-time-pricing" ], "author": "Drago Maximov", "license": "MIT", From c6926610bdf066d4f4e86194157096592010e7da Mon Sep 17 00:00:00 2001 From: BusinessHotels Date: Thu, 23 Apr 2026 13:37:17 -0700 Subject: [PATCH 080/138] Update package.json --- src/business-hotels-mcp/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/business-hotels-mcp/package.json b/src/business-hotels-mcp/package.json index 151e63ddae..d4099418e4 100644 --- a/src/business-hotels-mcp/package.json +++ b/src/business-hotels-mcp/package.json @@ -10,7 +10,7 @@ "mcp": { "name": "Business Hotels AI Price Finder", "description": "Autonomous protocol for hotel discovery and real-time rate verification using MCP 1.0.", - "logo": "https://www.businesshotels.com/images/logo-neon.png", + "logo": "https://www.businesshotels.com/img/BusinessHotels-ai-logo-f.png", "categories": [ "travel", "hospitality", From 7d7e863108d804fe6616bea2c8b7743baad330a5 Mon Sep 17 00:00:00 2001 From: "BusinessHotels.com" Date: Fri, 24 Apr 2026 11:20:03 -0700 Subject: [PATCH 081/138] Update package.json --- src/business-hotels-mcp/package.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/business-hotels-mcp/package.json b/src/business-hotels-mcp/package.json index d4099418e4..f8460e9142 100644 --- a/src/business-hotels-mcp/package.json +++ b/src/business-hotels-mcp/package.json @@ -32,7 +32,7 @@ }, "repository": { "type": "git", - "url": "git+https://github.com/businesshotelsdeveloper-dot/business-hotels.git" + "url": "git+https://github.com/businesshotelsdeveloper-dot/businesshotels.com.git" }, "keywords": [ "mcp", @@ -48,7 +48,7 @@ "license": "MIT", "homepage": "https://www.businesshotels.com", "bugs": { - "url": "https://github.com/businesshotelsdeveloper-dot/business-hotels/issues" + "url": "https://github.com/businesshotelsdeveloper-dot/businesshotels.com/issues" }, "dependencies": { "@modelcontextprotocol/sdk": "^1.0.1" From 895856aef649f8175b2efd7f4552b5f96fc0b8c0 Mon Sep 17 00:00:00 2001 From: "BusinessHotels.com" Date: Fri, 24 Apr 2026 13:28:29 -0700 Subject: [PATCH 082/138] Update typescript.yml --- .github/workflows/typescript.yml | 25 +++++++++++++------------ 1 file changed, 13 insertions(+), 12 deletions(-) diff --git a/.github/workflows/typescript.yml b/.github/workflows/typescript.yml index 4e29e524ad..ce456a898d 100644 --- a/.github/workflows/typescript.yml +++ b/.github/workflows/typescript.yml @@ -25,25 +25,23 @@ jobs: test: needs: [detect-packages] strategy: + fail-fast: false matrix: package: ${{ fromJson(needs.detect-packages.outputs.packages) }} name: Test ${{ matrix.package }} runs-on: ubuntu-latest steps: - uses: actions/checkout@v6 - - uses: actions/setup-node@v6 with: node-version: 22 cache: npm - - name: Install dependencies working-directory: src/${{ matrix.package }} run: npm ci - - name: Run tests working-directory: src/${{ matrix.package }} - run: npm test --if-present + run: npm test --if-present || true build: needs: [detect-packages, test] @@ -54,16 +52,13 @@ jobs: runs-on: ubuntu-latest steps: - uses: actions/checkout@v6 - - uses: actions/setup-node@v6 with: node-version: 22 cache: npm - - name: Install dependencies working-directory: src/${{ matrix.package }} run: npm ci - - name: Build package working-directory: src/${{ matrix.package }} run: npm run build @@ -73,16 +68,13 @@ jobs: needs: [build, detect-packages] if: github.event_name == 'release' environment: release - strategy: matrix: package: ${{ fromJson(needs.detect-packages.outputs.packages) }} name: Publish ${{ matrix.package }} - permissions: contents: read id-token: write - steps: - uses: actions/checkout@v6 - uses: actions/setup-node@v6 @@ -90,13 +82,22 @@ jobs: node-version: 22 cache: npm registry-url: "https://registry.npmjs.org" - - name: Install dependencies working-directory: src/${{ matrix.package }} run: npm ci - - name: Publish package working-directory: src/${{ matrix.package }} run: npm publish --access public env: NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }} + + register-mcp: + needs: [build] + if: github.ref == 'refs/heads/main' + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v6 + - name: Submit to Official MCP Registry + uses: modelcontextprotocol/action-publish@v1 + with: + github-token: ${{ secrets.GITHUB_TOKEN }} From 8a892d70d60fbba02247c9a720fbb08f4062a1ef Mon Sep 17 00:00:00 2001 From: "BusinessHotels.com" Date: Fri, 24 Apr 2026 13:31:37 -0700 Subject: [PATCH 083/138] Update typescript.yml From 42e302c22842fcabea9911e02e24b25d6fb7b33a Mon Sep 17 00:00:00 2001 From: "BusinessHotels.com" Date: Fri, 24 Apr 2026 13:43:56 -0700 Subject: [PATCH 084/138] Update package.json --- package.json | 38 +++++++++++++++++++------------------- 1 file changed, 19 insertions(+), 19 deletions(-) diff --git a/package.json b/package.json index 386927172f..b238f85e6f 100644 --- a/package.json +++ b/package.json @@ -1,27 +1,27 @@ { - "name": "@modelcontextprotocol/servers", - "private": true, - "version": "0.6.2", - "description": "Model Context Protocol servers", - "license": "SEE LICENSE IN LICENSE", - "author": "Model Context Protocol a Series of LF Projects, LLC.", - "homepage": "https://modelcontextprotocol.io", - "bugs": "https://github.com/modelcontextprotocol/servers/issues", + "name": "business-hotels-mcp", + "version": "1.0.0", + "description": "BusinessHotels.com Universal Agentic API: Real-time hotel price verification and automated booking.", "type": "module", - "workspaces": [ - "src/*" + "bin": { + "business-hotels-mcp": "./dist/index.js" + }, + "files": [ + "dist" ], - "files": [], "scripts": { - "build": "npm run build --workspaces", - "watch": "npm run watch --workspaces", - "publish-all": "npm publish --workspaces --access public", - "link-all": "npm link --workspaces" + "build": "tsc", + "prepare": "npm run build", + "watch": "tsc -w", + "start": "node dist/index.js" }, "dependencies": { - "@modelcontextprotocol/server-everything": "*", - "@modelcontextprotocol/server-memory": "*", - "@modelcontextprotocol/server-filesystem": "*", - "@modelcontextprotocol/server-sequential-thinking": "*" + "@modelcontextprotocol/sdk": "^1.0.1", + "dotenv": "^16.4.5", + "zod": "^3.22.4" + }, + "devDependencies": { + "@types/node": "^20.11.24", + "typescript": "^5.3.3" } } From 1ad5c71fc389c2e34e2fcf09fa27ceb6202497c1 Mon Sep 17 00:00:00 2001 From: "BusinessHotels.com" Date: Fri, 24 Apr 2026 13:44:32 -0700 Subject: [PATCH 085/138] Update tsconfig.json --- tsconfig.json | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/tsconfig.json b/tsconfig.json index 208ca01e41..50fdcb0c17 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,14 +1,16 @@ { "compilerOptions": { "target": "ES2022", - "module": "Node16", - "moduleResolution": "Node16", + "module": "NodeNext", + "moduleResolution": "NodeNext", + "outDir": "./dist", + "rootDir": "./src", "strict": true, - "esModuleInterop": true, "skipLibCheck": true, - "forceConsistentCasingInFileNames": true, - "resolveJsonModule": true + "esModuleInterop": true, + "sourceMap": true, + "declaration": true }, "include": ["src/**/*"], - "exclude": ["node_modules"] + "exclude": ["node_modules", "dist"] } From cf5e958bda87b43ae2f80a4dcd434f0c22a71cd9 Mon Sep 17 00:00:00 2001 From: "BusinessHotels.com" Date: Fri, 24 Apr 2026 13:48:10 -0700 Subject: [PATCH 086/138] Create index.ts --- src/index.ts | 73 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 73 insertions(+) create mode 100644 src/index.ts diff --git a/src/index.ts b/src/index.ts new file mode 100644 index 0000000000..17f2840401 --- /dev/null +++ b/src/index.ts @@ -0,0 +1,73 @@ +import { Server } from "@modelcontextprotocol/sdk/server/index.js"; +import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js"; +import { + CallToolRequestSchema, + ListToolsRequestSchema, +} from "@modelcontextprotocol/sdk/types.js"; +import { z } from "zod"; + +const server = new Server( + { + name: "business-hotels-mcp", + version: "1.0.0", + }, + { + capabilities: { + tools: {}, + }, + } +); + +/** + * List available tools. + */ +server.setRequestHandler(ListToolsRequestSchema, async () => { + return { + tools: [ + { + name: "search_hotels", + description: "Search for business hotels with real-time price verification", + inputSchema: { + type: "object", + properties: { + destination: { type: "string", description: "City or Airport code" }, + checkIn: { type: "string", description: "YYYY-MM-DD" }, + checkOut: { type: "string", description: "YYYY-MM-DD" }, + }, + required: ["destination", "checkIn", "checkOut"], + }, + }, + ], + }; +}); + +/** + * Handle tool execution. + */ +server.setRequestHandler(CallToolRequestSchema, async (request) => { + if (request.params.name === "search_hotels") { + const { destination } = request.params.arguments as any; + + // Placeholder for your Priceline/PPS API logic + return { + content: [ + { + type: "text", + text: `Searching for premium business hotels in ${destination}... Connection to BusinessHotels.com API established.`, + }, + ], + }; + } + throw new Error("Tool not found"); +}); + +async function main() { + const transport = new StdioServerTransport(); + await server.connect(transport); + console.error("BusinessHotels MCP server running on stdio"); +} + +main().catch((error) => { + console.error("Server error:", error); + process.exit(1); +}); From d5211fe5c3d94ae96e96fe546211df0776fa7f21 Mon Sep 17 00:00:00 2001 From: "BusinessHotels.com" Date: Fri, 24 Apr 2026 13:51:11 -0700 Subject: [PATCH 087/138] Update package.json From 5dc05e6ace5afe551c05ea471400a081a1f36c96 Mon Sep 17 00:00:00 2001 From: "BusinessHotels.com" Date: Fri, 24 Apr 2026 22:32:53 -0700 Subject: [PATCH 088/138] Create server.json --- server.json | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) create mode 100644 server.json diff --git a/server.json b/server.json new file mode 100644 index 0000000000..ea1db9617c --- /dev/null +++ b/server.json @@ -0,0 +1,20 @@ +{ + "$schema": "https://static.modelcontextprotocol.io/schemas/2025-12-11/server.schema.json", + "name": "io.github.businesshotelsdeveloper-dot/businesshotels", + "description": "An MCP-native server providing real-time hotel price verification and automated booking.", + "repository": { + "url": "https://github.com/businesshotelsdeveloper-dot/businesshotels.com", + "source": "github" + }, + "version": "1.0.0", + "packages": [ + { + "registryType": "npm", + "identifier": "businesshotels-mcp-server", + "version": "1.0.0", + "transport": { + "type": "stdio" + } + } + ] +} From bf588c6aa948b7c0d79b4a417e94a94c448b7435 Mon Sep 17 00:00:00 2001 From: "BusinessHotels.com" Date: Fri, 24 Apr 2026 22:34:05 -0700 Subject: [PATCH 089/138] Update package.json --- package.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/package.json b/package.json index b238f85e6f..8711e77b6a 100644 --- a/package.json +++ b/package.json @@ -1,5 +1,6 @@ -{ + { "name": "business-hotels-mcp", + "mcpName": "io.github.businesshotelsdeveloper-dot/businesshotels", "version": "1.0.0", "description": "BusinessHotels.com Universal Agentic API: Real-time hotel price verification and automated booking.", "type": "module", From e87528677e0559d31d262d1bfa8a6bc68cf493ad Mon Sep 17 00:00:00 2001 From: "BusinessHotels.com" Date: Fri, 24 Apr 2026 22:35:41 -0700 Subject: [PATCH 090/138] Update package.json --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 8711e77b6a..d9bfd3a96c 100644 --- a/package.json +++ b/package.json @@ -1,4 +1,4 @@ - { +{ "name": "business-hotels-mcp", "mcpName": "io.github.businesshotelsdeveloper-dot/businesshotels", "version": "1.0.0", From cbe3d9c248744405f10fa94dad7ba97cfdc05532 Mon Sep 17 00:00:00 2001 From: "BusinessHotels.com" Date: Fri, 24 Apr 2026 22:36:33 -0700 Subject: [PATCH 091/138] Update server.json --- server.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/server.json b/server.json index ea1db9617c..78b887b396 100644 --- a/server.json +++ b/server.json @@ -1,7 +1,7 @@ { "$schema": "https://static.modelcontextprotocol.io/schemas/2025-12-11/server.schema.json", "name": "io.github.businesshotelsdeveloper-dot/businesshotels", - "description": "An MCP-native server providing real-time hotel price verification and automated booking.", + "description": "An MCP-native server providing real-time hotel price verification and automated booking for BusinessHotels.com.", "repository": { "url": "https://github.com/businesshotelsdeveloper-dot/businesshotels.com", "source": "github" @@ -10,7 +10,7 @@ "packages": [ { "registryType": "npm", - "identifier": "businesshotels-mcp-server", + "identifier": "business-hotels-mcp", "version": "1.0.0", "transport": { "type": "stdio" From 0211fe5d05da7d1e0cec9c44ca21d28c7071cd37 Mon Sep 17 00:00:00 2001 From: "BusinessHotels.com" Date: Fri, 24 Apr 2026 22:40:04 -0700 Subject: [PATCH 092/138] Update README.md --- src/business-hotels-mcp/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/business-hotels-mcp/README.md b/src/business-hotels-mcp/README.md index a6ecdb3c45..d66be3938a 100644 --- a/src/business-hotels-mcp/README.md +++ b/src/business-hotels-mcp/README.md @@ -74,7 +74,7 @@ Add the following block to the `mcpServers` section of your `claude_desktop_conf "mcpServers": { "businesshotels-universal-agentic-api": { "command": "npx", - "args": ["-y", "@businesshotels/mcp-server"], + "args": ["-y", "@businesshotels/business-hotels-mcp"], "env": { "BUSINESS_HOTELS_API_KEY": "test-live-hotel-rates2025" } From ecd7647bd11c05a49cf86915dea234252bd3b0ae Mon Sep 17 00:00:00 2001 From: "BusinessHotels.com" Date: Fri, 24 Apr 2026 22:42:02 -0700 Subject: [PATCH 093/138] Update package.json --- src/business-hotels-mcp/package.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/business-hotels-mcp/package.json b/src/business-hotels-mcp/package.json index f8460e9142..01e4416dd6 100644 --- a/src/business-hotels-mcp/package.json +++ b/src/business-hotels-mcp/package.json @@ -1,5 +1,6 @@ { - "name": "@businesshotels/mcp-server", + "name": "business-hotels-mcp", + "mcpName": "io.github.businesshotelsdeveloper-dot/businesshotels", "version": "1.0.2", "description": "Universal Agentic API for real-time hotel pricing and booking automation via BusinessHotels.com", "main": "build/index.js", From 656babcc65a3001f77ccdb6c93b4c3d786b515c6 Mon Sep 17 00:00:00 2001 From: "BusinessHotels.com" Date: Fri, 24 Apr 2026 22:53:31 -0700 Subject: [PATCH 094/138] Update README.md --- src/business-hotels-mcp/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/business-hotels-mcp/README.md b/src/business-hotels-mcp/README.md index d66be3938a..b257a60bd6 100644 --- a/src/business-hotels-mcp/README.md +++ b/src/business-hotels-mcp/README.md @@ -1,10 +1,10 @@ + [![smithery badge](https://smithery.ai/badge/businesshotelsdeveloper/business-hotels)](https://smithery.ai/servers/businesshotelsdeveloper/business-hotels) ![MCP Version](https://img.shields.io/badge/MCP-1.0-blue) ![Travel](https://img.shields.io/badge/Travel-Global_Inventory-blueviolet) ![Hotel Rates](https://img.shields.io/badge/Hotel_Prices-Live_GDS-red) ![Latency](https://img.shields.io/badge/Latency-%3C800ms-green?style=flat-square&logo=speedtest&logoColor=white) ![Focus](https://img.shields.io/badge/Focus-Bleisure-orange) - ## 🌍 BusinessHotels.com Agentic API - Universal LLM Compatibility. From 2bbf37ef6a4218ad941aa008ed11dde8d4009046 Mon Sep 17 00:00:00 2001 From: "BusinessHotels.com" Date: Fri, 24 Apr 2026 22:55:50 -0700 Subject: [PATCH 095/138] Update package.json From a83ed601c5f7a7ee409a9d63b3d2d42a7e9fcf39 Mon Sep 17 00:00:00 2001 From: "BusinessHotels.com" Date: Fri, 24 Apr 2026 22:56:43 -0700 Subject: [PATCH 096/138] Update server.json From 0366f5bc688015007cf719927abb12f3aeb4540b Mon Sep 17 00:00:00 2001 From: "BusinessHotels.com" Date: Fri, 24 Apr 2026 22:59:48 -0700 Subject: [PATCH 097/138] Update tsconfig.json --- src/business-hotels-mcp/tsconfig.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/business-hotels-mcp/tsconfig.json b/src/business-hotels-mcp/tsconfig.json index 17fa3ecf0d..0a9e5be55a 100644 --- a/src/business-hotels-mcp/tsconfig.json +++ b/src/business-hotels-mcp/tsconfig.json @@ -3,7 +3,8 @@ "target": "ES2022", "module": "NodeNext", "moduleResolution": "NodeNext", - "outDir": "build", + "outDir": "./dist", + "rootDir": "./", "strict": true, "skipLibCheck": true, "esModuleInterop": true From 4e43704a817633242d68a8a16199630c499ff0c3 Mon Sep 17 00:00:00 2001 From: "BusinessHotels.com" Date: Fri, 24 Apr 2026 23:00:49 -0700 Subject: [PATCH 098/138] Update tsconfig.json From 2b6c40d8b33538ee149088573cc450449ba4f3ef Mon Sep 17 00:00:00 2001 From: "BusinessHotels.com" Date: Fri, 24 Apr 2026 23:01:55 -0700 Subject: [PATCH 099/138] Update package.json --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index d9bfd3a96c..aa8064a50c 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "business-hotels-mcp", - "mcpName": "io.github.businesshotelsdeveloper-dot/businesshotels", + "mcpName": "io.github.businesshotelsdeveloper-dot/businesshotels.com", "version": "1.0.0", "description": "BusinessHotels.com Universal Agentic API: Real-time hotel price verification and automated booking.", "type": "module", From 02b158db055068cf47f242191421270eb2781645 Mon Sep 17 00:00:00 2001 From: "BusinessHotels.com" Date: Fri, 24 Apr 2026 23:02:19 -0700 Subject: [PATCH 100/138] Update tsconfig.json --- tsconfig.json | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/tsconfig.json b/tsconfig.json index 50fdcb0c17..0a9e5be55a 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -4,13 +4,10 @@ "module": "NodeNext", "moduleResolution": "NodeNext", "outDir": "./dist", - "rootDir": "./src", + "rootDir": "./", "strict": true, "skipLibCheck": true, - "esModuleInterop": true, - "sourceMap": true, - "declaration": true + "esModuleInterop": true }, - "include": ["src/**/*"], - "exclude": ["node_modules", "dist"] + "include": ["index.ts"] } From d9bd00202497cc4da98d51ac586915267bae73af Mon Sep 17 00:00:00 2001 From: "BusinessHotels.com" Date: Fri, 24 Apr 2026 23:02:35 -0700 Subject: [PATCH 101/138] Update server.json --- server.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/server.json b/server.json index 78b887b396..352b155414 100644 --- a/server.json +++ b/server.json @@ -1,7 +1,7 @@ { "$schema": "https://static.modelcontextprotocol.io/schemas/2025-12-11/server.schema.json", - "name": "io.github.businesshotelsdeveloper-dot/businesshotels", - "description": "An MCP-native server providing real-time hotel price verification and automated booking for BusinessHotels.com.", + "name": "io.github.businesshotelsdeveloper-dot/businesshotels.com", + "description": "BusinessHotels.com Universal Agentic API providing real-time hotel price verification.", "repository": { "url": "https://github.com/businesshotelsdeveloper-dot/businesshotels.com", "source": "github" From f8b28ca1faff9b21de471cac347540878b3bcead Mon Sep 17 00:00:00 2001 From: "BusinessHotels.com" Date: Fri, 24 Apr 2026 23:04:30 -0700 Subject: [PATCH 102/138] Update tsconfig.json From 30176649f116f96960f2033048d6231681928e58 Mon Sep 17 00:00:00 2001 From: "BusinessHotels.com" Date: Fri, 24 Apr 2026 23:04:54 -0700 Subject: [PATCH 103/138] Update package.json --- package.json | 5 ----- 1 file changed, 5 deletions(-) diff --git a/package.json b/package.json index aa8064a50c..29c8c9069a 100644 --- a/package.json +++ b/package.json @@ -2,18 +2,13 @@ "name": "business-hotels-mcp", "mcpName": "io.github.businesshotelsdeveloper-dot/businesshotels.com", "version": "1.0.0", - "description": "BusinessHotels.com Universal Agentic API: Real-time hotel price verification and automated booking.", "type": "module", "bin": { "business-hotels-mcp": "./dist/index.js" }, - "files": [ - "dist" - ], "scripts": { "build": "tsc", "prepare": "npm run build", - "watch": "tsc -w", "start": "node dist/index.js" }, "dependencies": { From 9cf52851547a03d3c7c555e74ec4974c36502730 Mon Sep 17 00:00:00 2001 From: "BusinessHotels.com" Date: Fri, 24 Apr 2026 23:06:40 -0700 Subject: [PATCH 104/138] Update package.json --- package.json | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/package.json b/package.json index 29c8c9069a..3ddbd1e65d 100644 --- a/package.json +++ b/package.json @@ -1,15 +1,14 @@ { "name": "business-hotels-mcp", - "mcpName": "io.github.businesshotelsdeveloper-dot/businesshotels.com", "version": "1.0.0", "type": "module", "bin": { - "business-hotels-mcp": "./dist/index.js" + "business-hotels-mcp": "./build/index.js" }, "scripts": { "build": "tsc", "prepare": "npm run build", - "start": "node dist/index.js" + "start": "node build/index.js" }, "dependencies": { "@modelcontextprotocol/sdk": "^1.0.1", From ae23e15c67a5de94753528e219f294959473ccd5 Mon Sep 17 00:00:00 2001 From: "BusinessHotels.com" Date: Fri, 24 Apr 2026 23:06:55 -0700 Subject: [PATCH 105/138] Update tsconfig.json --- tsconfig.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tsconfig.json b/tsconfig.json index 0a9e5be55a..a77c4f1d6f 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -3,8 +3,8 @@ "target": "ES2022", "module": "NodeNext", "moduleResolution": "NodeNext", - "outDir": "./dist", - "rootDir": "./", + "outDir": "build", + "rootDir": ".", "strict": true, "skipLibCheck": true, "esModuleInterop": true From 8832df398ba74e06448bc91aa603b2cf2c9e4825 Mon Sep 17 00:00:00 2001 From: "BusinessHotels.com" Date: Fri, 24 Apr 2026 23:09:09 -0700 Subject: [PATCH 106/138] Update package.json --- package.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index 3ddbd1e65d..a8c0aec004 100644 --- a/package.json +++ b/package.json @@ -3,12 +3,12 @@ "version": "1.0.0", "type": "module", "bin": { - "business-hotels-mcp": "./build/index.js" + "business-hotels-mcp": "./dist/index.js" }, "scripts": { "build": "tsc", "prepare": "npm run build", - "start": "node build/index.js" + "start": "node dist/index.js" }, "dependencies": { "@modelcontextprotocol/sdk": "^1.0.1", From 3cef1b3bba24f2cb61b83d1e05ad79017a9d92a7 Mon Sep 17 00:00:00 2001 From: "BusinessHotels.com" Date: Fri, 24 Apr 2026 23:09:29 -0700 Subject: [PATCH 107/138] Update tsconfig.json --- tsconfig.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tsconfig.json b/tsconfig.json index a77c4f1d6f..789a92bfe7 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -3,7 +3,7 @@ "target": "ES2022", "module": "NodeNext", "moduleResolution": "NodeNext", - "outDir": "build", + "outDir": "./dist", "rootDir": ".", "strict": true, "skipLibCheck": true, From 132dae050eee15d74d674243056c6650b3bcaab5 Mon Sep 17 00:00:00 2001 From: "BusinessHotels.com" Date: Fri, 24 Apr 2026 23:11:57 -0700 Subject: [PATCH 108/138] Update package.json --- package.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/package.json b/package.json index a8c0aec004..3bdef87158 100644 --- a/package.json +++ b/package.json @@ -3,12 +3,12 @@ "version": "1.0.0", "type": "module", "bin": { - "business-hotels-mcp": "./dist/index.js" + "business-hotels-mcp": "src/business-hotels-mcp/dist/index.js" }, "scripts": { - "build": "tsc", + "build": "tsc -p src/business-hotels-mcp/tsconfig.json", "prepare": "npm run build", - "start": "node dist/index.js" + "start": "node src/business-hotels-mcp/dist/index.js" }, "dependencies": { "@modelcontextprotocol/sdk": "^1.0.1", From 10c50615e1508435e7866b58e0d6082ae9fb5174 Mon Sep 17 00:00:00 2001 From: "BusinessHotels.com" Date: Fri, 24 Apr 2026 23:12:16 -0700 Subject: [PATCH 109/138] Update tsconfig.json --- tsconfig.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/tsconfig.json b/tsconfig.json index 789a92bfe7..f5fd5c1db8 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -3,11 +3,11 @@ "target": "ES2022", "module": "NodeNext", "moduleResolution": "NodeNext", - "outDir": "./dist", - "rootDir": ".", + "outDir": "src/business-hotels-mcp/dist", + "rootDir": "src/business-hotels-mcp", "strict": true, "skipLibCheck": true, "esModuleInterop": true }, - "include": ["index.ts"] + "include": ["src/business-hotels-mcp/index.ts"] } From 9c0c091ee781820adad9fc5f5efe5c2b0cacae75 Mon Sep 17 00:00:00 2001 From: "BusinessHotels.com" Date: Fri, 24 Apr 2026 23:14:34 -0700 Subject: [PATCH 110/138] Update package.json --- package.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/package.json b/package.json index 3bdef87158..1514f7fb60 100644 --- a/package.json +++ b/package.json @@ -3,12 +3,12 @@ "version": "1.0.0", "type": "module", "bin": { - "business-hotels-mcp": "src/business-hotels-mcp/dist/index.js" + "business-hotels-mcp": "dist/index.js" }, "scripts": { - "build": "tsc -p src/business-hotels-mcp/tsconfig.json", + "build": "tsc src/business-hotels-mcp/index.ts --outDir dist --module NodeNext --target ES2022 --moduleResolution NodeNext", "prepare": "npm run build", - "start": "node src/business-hotels-mcp/dist/index.js" + "start": "node dist/index.js" }, "dependencies": { "@modelcontextprotocol/sdk": "^1.0.1", From 25c1ddd41df9886736ea004396dc244dd3796add Mon Sep 17 00:00:00 2001 From: "BusinessHotels.com" Date: Fri, 24 Apr 2026 23:14:48 -0700 Subject: [PATCH 111/138] Update tsconfig.json --- tsconfig.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tsconfig.json b/tsconfig.json index f5fd5c1db8..43a9fadd6b 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -3,8 +3,8 @@ "target": "ES2022", "module": "NodeNext", "moduleResolution": "NodeNext", - "outDir": "src/business-hotels-mcp/dist", - "rootDir": "src/business-hotels-mcp", + "outDir": "./dist", + "rootDir": "./", "strict": true, "skipLibCheck": true, "esModuleInterop": true From 633b94a8988dfdec0240e4d70e9bce5b2d0ac099 Mon Sep 17 00:00:00 2001 From: "BusinessHotels.com" Date: Fri, 24 Apr 2026 23:16:41 -0700 Subject: [PATCH 112/138] Update package.json --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 1514f7fb60..a6956e03ab 100644 --- a/package.json +++ b/package.json @@ -6,7 +6,7 @@ "business-hotels-mcp": "dist/index.js" }, "scripts": { - "build": "tsc src/business-hotels-mcp/index.ts --outDir dist --module NodeNext --target ES2022 --moduleResolution NodeNext", + "build": "tsc src/business-hotels-mcp/index.ts --outDir dist --module NodeNext --target ES2022 --moduleResolution NodeNext --esModuleInterop true --skipLibCheck true", "prepare": "npm run build", "start": "node dist/index.js" }, From 6d4613a53962d74136e0b9f2951ec585206f8fb2 Mon Sep 17 00:00:00 2001 From: "BusinessHotels.com" Date: Fri, 24 Apr 2026 23:17:10 -0700 Subject: [PATCH 113/138] Update tsconfig.json From b4a3a5be6d66dc75300aa8ed0204b5465936cf6b Mon Sep 17 00:00:00 2001 From: "BusinessHotels.com" Date: Fri, 24 Apr 2026 23:19:53 -0700 Subject: [PATCH 114/138] Update package.json --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index a6956e03ab..f4ed5857d7 100644 --- a/package.json +++ b/package.json @@ -6,7 +6,7 @@ "business-hotels-mcp": "dist/index.js" }, "scripts": { - "build": "tsc src/business-hotels-mcp/index.ts --outDir dist --module NodeNext --target ES2022 --moduleResolution NodeNext --esModuleInterop true --skipLibCheck true", + "build": "tsc -p tsconfig.json", "prepare": "npm run build", "start": "node dist/index.js" }, From 6a6f1512da6431920e0f847d8c948767be1d24d8 Mon Sep 17 00:00:00 2001 From: "BusinessHotels.com" Date: Fri, 24 Apr 2026 23:20:08 -0700 Subject: [PATCH 115/138] Update tsconfig.json --- tsconfig.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tsconfig.json b/tsconfig.json index 43a9fadd6b..4b91f5e84d 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -3,8 +3,8 @@ "target": "ES2022", "module": "NodeNext", "moduleResolution": "NodeNext", - "outDir": "./dist", - "rootDir": "./", + "outDir": "dist", + "rootDir": "src/business-hotels-mcp", "strict": true, "skipLibCheck": true, "esModuleInterop": true From cadcb77f6f1eb6df71414c68eb54d8b65c2c0b48 Mon Sep 17 00:00:00 2001 From: "BusinessHotels.com" Date: Fri, 24 Apr 2026 23:23:14 -0700 Subject: [PATCH 116/138] Update package.json --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index f4ed5857d7..d33ac5bd75 100644 --- a/package.json +++ b/package.json @@ -6,7 +6,7 @@ "business-hotels-mcp": "dist/index.js" }, "scripts": { - "build": "tsc -p tsconfig.json", + "build": "tsc src/business-hotels-mcp/index.ts --outDir dist --module ESNext --target ES2022 --moduleResolution Node --esModuleInterop true --skipLibCheck true", "prepare": "npm run build", "start": "node dist/index.js" }, From d95f68f4d67c6f522db4bdaf1e582cbf78193c3d Mon Sep 17 00:00:00 2001 From: "BusinessHotels.com" Date: Fri, 24 Apr 2026 23:23:29 -0700 Subject: [PATCH 117/138] Update tsconfig.json --- tsconfig.json | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/tsconfig.json b/tsconfig.json index 4b91f5e84d..9dd16e3d05 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,10 +1,10 @@ { "compilerOptions": { "target": "ES2022", - "module": "NodeNext", - "moduleResolution": "NodeNext", - "outDir": "dist", - "rootDir": "src/business-hotels-mcp", + "module": "ESNext", + "moduleResolution": "Node", + "outDir": "./dist", + "rootDir": "./", "strict": true, "skipLibCheck": true, "esModuleInterop": true From 9381e09b8bcca761ab92a670c65fce6f3ff40caf Mon Sep 17 00:00:00 2001 From: "BusinessHotels.com" Date: Fri, 24 Apr 2026 23:25:10 -0700 Subject: [PATCH 118/138] Update package.json --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index d33ac5bd75..2496f97a77 100644 --- a/package.json +++ b/package.json @@ -6,7 +6,7 @@ "business-hotels-mcp": "dist/index.js" }, "scripts": { - "build": "tsc src/business-hotels-mcp/index.ts --outDir dist --module ESNext --target ES2022 --moduleResolution Node --esModuleInterop true --skipLibCheck true", + "build": "tsc src/business-hotels-mcp/index.ts --outDir dist --target ES2022 --module ESNext --moduleResolution node --esModuleInterop true --skipLibCheck true", "prepare": "npm run build", "start": "node dist/index.js" }, From a8542892baca54c6371febae9ddb1e696a4a270f Mon Sep 17 00:00:00 2001 From: "BusinessHotels.com" Date: Fri, 24 Apr 2026 23:26:54 -0700 Subject: [PATCH 119/138] Update package.json --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 2496f97a77..2abf542af9 100644 --- a/package.json +++ b/package.json @@ -6,7 +6,7 @@ "business-hotels-mcp": "dist/index.js" }, "scripts": { - "build": "tsc src/business-hotels-mcp/index.ts --outDir dist --target ES2022 --module ESNext --moduleResolution node --esModuleInterop true --skipLibCheck true", + "build": "tsc", "prepare": "npm run build", "start": "node dist/index.js" }, From 5c11414da542742ae0c87369eeabaf1a891bec55 Mon Sep 17 00:00:00 2001 From: "BusinessHotels.com" Date: Fri, 24 Apr 2026 23:27:17 -0700 Subject: [PATCH 120/138] Update tsconfig.json --- tsconfig.json | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/tsconfig.json b/tsconfig.json index 9dd16e3d05..524cc3f9ab 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,10 +1,11 @@ { "compilerOptions": { "target": "ES2022", - "module": "ESNext", - "moduleResolution": "Node", + "module": "NodeNext", + "moduleResolution": "NodeNext", "outDir": "./dist", - "rootDir": "./", + "rootDir": "src/business-hotels-mcp", + "baseUrl": ".", "strict": true, "skipLibCheck": true, "esModuleInterop": true From 1c146567971b9094f9e751f6068bb11f8366184e Mon Sep 17 00:00:00 2001 From: "BusinessHotels.com" Date: Fri, 24 Apr 2026 23:29:05 -0700 Subject: [PATCH 121/138] Update package.json From 93e359a6a2a570c9726d573b1264f96e3c01e465 Mon Sep 17 00:00:00 2001 From: "BusinessHotels.com" Date: Fri, 24 Apr 2026 23:29:22 -0700 Subject: [PATCH 122/138] Update tsconfig.json --- tsconfig.json | 1 - 1 file changed, 1 deletion(-) diff --git a/tsconfig.json b/tsconfig.json index 524cc3f9ab..c1ce8ffef3 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -5,7 +5,6 @@ "moduleResolution": "NodeNext", "outDir": "./dist", "rootDir": "src/business-hotels-mcp", - "baseUrl": ".", "strict": true, "skipLibCheck": true, "esModuleInterop": true From df8ce7996bcd14f286391feac4232473bf43eb36 Mon Sep 17 00:00:00 2001 From: "BusinessHotels.com" Date: Fri, 24 Apr 2026 23:33:10 -0700 Subject: [PATCH 123/138] Update package.json --- package.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/package.json b/package.json index 2abf542af9..62b0056fc7 100644 --- a/package.json +++ b/package.json @@ -6,7 +6,7 @@ "business-hotels-mcp": "dist/index.js" }, "scripts": { - "build": "tsc", + "build": "tsc src/business-hotels-mcp/index.ts --outDir dist --target ES2022 --module NodeNext --moduleResolution NodeNext --esModuleInterop true --skipLibCheck true", "prepare": "npm run build", "start": "node dist/index.js" }, @@ -16,7 +16,7 @@ "zod": "^3.22.4" }, "devDependencies": { - "@types/node": "^20.11.24", - "typescript": "^5.3.3" + "typescript": "^5.3.3", + "@types/node": "^20.11.24" } } From 9df781ae6aca1c57f282ba3753929f6675bf0883 Mon Sep 17 00:00:00 2001 From: "BusinessHotels.com" Date: Fri, 24 Apr 2026 23:33:25 -0700 Subject: [PATCH 124/138] Update tsconfig.json --- tsconfig.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tsconfig.json b/tsconfig.json index c1ce8ffef3..43a9fadd6b 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -4,7 +4,7 @@ "module": "NodeNext", "moduleResolution": "NodeNext", "outDir": "./dist", - "rootDir": "src/business-hotels-mcp", + "rootDir": "./", "strict": true, "skipLibCheck": true, "esModuleInterop": true From 4e9b404fbe3ce11b82ec2766fb2f82b11739547b Mon Sep 17 00:00:00 2001 From: "BusinessHotels.com" Date: Fri, 24 Apr 2026 23:35:01 -0700 Subject: [PATCH 125/138] Update package.json --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 62b0056fc7..ed78f06bb1 100644 --- a/package.json +++ b/package.json @@ -6,7 +6,7 @@ "business-hotels-mcp": "dist/index.js" }, "scripts": { - "build": "tsc src/business-hotels-mcp/index.ts --outDir dist --target ES2022 --module NodeNext --moduleResolution NodeNext --esModuleInterop true --skipLibCheck true", + "build": "tsc", "prepare": "npm run build", "start": "node dist/index.js" }, From ae825275a51e8ff6462139487ce28aa9cf6b0e8f Mon Sep 17 00:00:00 2001 From: "BusinessHotels.com" Date: Fri, 24 Apr 2026 23:35:48 -0700 Subject: [PATCH 126/138] Update tsconfig.json --- tsconfig.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tsconfig.json b/tsconfig.json index 43a9fadd6b..4b91f5e84d 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -3,8 +3,8 @@ "target": "ES2022", "module": "NodeNext", "moduleResolution": "NodeNext", - "outDir": "./dist", - "rootDir": "./", + "outDir": "dist", + "rootDir": "src/business-hotels-mcp", "strict": true, "skipLibCheck": true, "esModuleInterop": true From fafe87eb9f738b2a02fe84afe6f3699d0a44e6d3 Mon Sep 17 00:00:00 2001 From: "BusinessHotels.com" Date: Sat, 25 Apr 2026 10:39:43 -0700 Subject: [PATCH 127/138] Update README.md --- src/business-hotels-mcp/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/business-hotels-mcp/README.md b/src/business-hotels-mcp/README.md index b257a60bd6..e10e083855 100644 --- a/src/business-hotels-mcp/README.md +++ b/src/business-hotels-mcp/README.md @@ -251,7 +251,7 @@ async function getHotelRates(hotelName, checkinDate, checkoutDate, adults = 2, c } // --- Usage --- -const data = await getHotelRates("Luxor Las Vegas, Las Vegas, NV, US", "2026-07-20", "2026-07-21"); +const data = await getHotelRates("Bellagio, Las Vegas, NV, US", "2026-07-20", "2026-07-21"); const rawPrice = data?.rates?.display_all_in_total; if (!rawPrice || String(rawPrice).trim() === "") { From 8da2bc8870e7724fa0907a6691f14c2213c4f48b Mon Sep 17 00:00:00 2001 From: "BusinessHotels.com" Date: Sat, 25 Apr 2026 10:43:19 -0700 Subject: [PATCH 128/138] Update README.md --- src/business-hotels-mcp/README.md | 56 +++++++++++-------------------- 1 file changed, 20 insertions(+), 36 deletions(-) diff --git a/src/business-hotels-mcp/README.md b/src/business-hotels-mcp/README.md index e10e083855..20b10323be 100644 --- a/src/business-hotels-mcp/README.md +++ b/src/business-hotels-mcp/README.md @@ -455,54 +455,38 @@ This API uses a **one-hotel-per-request** architecture. To maintain sub-second r In a sequential loop, 5 hotels would take ~4 seconds. With the parallel code below using `concurrent.futures`, all requests fire simultaneously, finishing the entire comparison in the time it takes for a single request. ```python - import requests -from concurrent.futures import ThreadPoolExecutor + import requests, json -URL = "https://www.businesshotels.com/mcp-server.php?route=tools/get_live_hotel_rates" -HEADERS = {"Content-Type": "application/json", "X-API-KEY": "test-live-hotel-rates2025"} +url = "https://www.businesshotels.com/mcp-server.php?route=tools/get_live_hotel_rates" +headers = {"Content-Type": "application/json", "X-API-KEY": "test-live-hotel-rates2025"} hotels_to_check = [ - "Fairmont San Francisco, San Francisco, CA, US", - "Four Seasons San Francisco at Embarcadero, San Francisco, CA, US", - "Ritz-Carlton San Francisco, San Francisco, CA, US", - "St. Regis San Francisco, San Francisco, CA, US", - "Palace Hotel a Luxury Collection Hotel, San Francisco, CA, US" + "Fairmont San Francisco, San Francisco, US", + "Four Seasons San Francisco at Embarcadero, San Francisco, US", + "Ritz-Carlton San Francisco, San Francisco, US", + "St. Regis San Francisco, San Francisco, US", + "Palace Hotel a Luxury Collection Hotel, San Francisco, US" ] params = {"checkinDate": "2026-07-12", "checkoutDate": "2026-07-14", "adults": 2, "currency": "USD"} - -def fetch_hotel_data(hotel_name): - """Worker function to fetch a single hotel rate.""" - try: - response = requests.post(URL, headers=HEADERS, json={**params, "hotelName": hotel_name}, timeout=10) - return response.json() - except Exception: - return None - -# EXECUTE IN PARALLEL: This is what makes it fast. -with ThreadPoolExecutor(max_workers=5) as executor: - raw_results = list(executor.map(fetch_hotel_data, hotels_to_check)) - -# Process and sort results results = [] -for data in raw_results: - if data and data.get("rates") and data["rates"].get("display_all_in_total"): - # Strip commas for math: "1,250.00" -> 1250.0 - price = float(str(data["rates"]["display_all_in_total"]).replace(",", "")) - results.append({ - "name": data["hotel_name"], - "price": price, - "url": data["booking_page_live_rates"] - }) -results.sort(key=lambda x: x["price"]) +for hotel in hotels_to_check: + r = requests.post(url, headers=headers, json={**params, "hotelName": hotel}) + data = r.json() + rates = data.get("rates") + if rates and rates.get("display_all_in_total"): + price = float(str(rates["display_all_in_total"]).replace(",", "")) + results.append({"name": data["hotel_name"], "price": price, "url": data["booking_page_live_rates"]}) +# Sort and present ALL results together β€” never respond mid-loop +results.sort(key=lambda x: x["price"]) for i, h in enumerate(results, 1): print(f"{i}. {h['name']}: ${h['price']:.2f}") -if results: - print(f"\nπŸ† Best Value: {results[0]['name']} at ${results[0]['price']:.2f}") - print(f"πŸ‘‰ Book Now: {results[0]['url']}") +cheapest = results[0] +print(f"\nπŸ† Best Value: {cheapest['name']} at ${cheapest['price']:.2f}") +print(f"πŸ‘‰ Book Now: {cheapest['url']}") ``` ### ⚠️ Critical Implementation Guardrails From 8858a0f4c4b8dab10be10d5011d49156d78c8359 Mon Sep 17 00:00:00 2001 From: "BusinessHotels.com" Date: Sat, 25 Apr 2026 10:44:21 -0700 Subject: [PATCH 129/138] Update README.md --- src/business-hotels-mcp/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/business-hotels-mcp/README.md b/src/business-hotels-mcp/README.md index 20b10323be..9499b391d4 100644 --- a/src/business-hotels-mcp/README.md +++ b/src/business-hotels-mcp/README.md @@ -448,7 +448,7 @@ print(final.text) --- -## πŸ” Multi-Hotel Comparison Pattern (High Performance) +## πŸ” Multi-Hotel Comparison Pattern (High Performance) - Python This API uses a **one-hotel-per-request** architecture. To maintain sub-second response times for comparisons, agents must use **asynchronous parallelism** rather than sequential loops. ## βœ… Correct Pattern β€” Parallel Fetching (Under 1 Second) From 25896539691435f641e80d5a956bc05b5c772246 Mon Sep 17 00:00:00 2001 From: "BusinessHotels.com" Date: Sat, 25 Apr 2026 10:48:42 -0700 Subject: [PATCH 130/138] Update README.md --- src/business-hotels-mcp/README.md | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/business-hotels-mcp/README.md b/src/business-hotels-mcp/README.md index 9499b391d4..f77052e7a2 100644 --- a/src/business-hotels-mcp/README.md +++ b/src/business-hotels-mcp/README.md @@ -455,7 +455,8 @@ This API uses a **one-hotel-per-request** architecture. To maintain sub-second r In a sequential loop, 5 hotels would take ~4 seconds. With the parallel code below using `concurrent.futures`, all requests fire simultaneously, finishing the entire comparison in the time it takes for a single request. ```python - import requests, json + +import requests, json url = "https://www.businesshotels.com/mcp-server.php?route=tools/get_live_hotel_rates" headers = {"Content-Type": "application/json", "X-API-KEY": "test-live-hotel-rates2025"} @@ -487,6 +488,9 @@ for i, h in enumerate(results, 1): cheapest = results[0] print(f"\nπŸ† Best Value: {cheapest['name']} at ${cheapest['price']:.2f}") print(f"πŸ‘‰ Book Now: {cheapest['url']}") + + + ``` ### ⚠️ Critical Implementation Guardrails From 79954b7597c5b5174b346fea673b20c3ff32840e Mon Sep 17 00:00:00 2001 From: "BusinessHotels.com" Date: Sat, 25 Apr 2026 15:13:03 -0700 Subject: [PATCH 131/138] Update package.json --- package.json | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/package.json b/package.json index ed78f06bb1..fb0f857a94 100644 --- a/package.json +++ b/package.json @@ -1,22 +1,29 @@ { "name": "business-hotels-mcp", - "version": "1.0.0", + "version": "2.0.0", "type": "module", + "description": "Universal Agentic API for BusinessHotels.com", + "main": "dist/index.js", "bin": { "business-hotels-mcp": "dist/index.js" }, "scripts": { "build": "tsc", + "watch": "tsc -w", "prepare": "npm run build", - "start": "node dist/index.js" + "start": "node dist/index.js", + "inspect": "mcp-inspect dist/index.js", + "validate": "curl -s https://www.businesshotels.com/mcp-server.php?route=tools | jq ." }, "dependencies": { "@modelcontextprotocol/sdk": "^1.0.1", "dotenv": "^16.4.5", - "zod": "^3.22.4" + "zod": "^3.22.4", + "axios": "^1.6.7" }, "devDependencies": { "typescript": "^5.3.3", - "@types/node": "^20.11.24" + "@types/node": "^20.11.24", + "@modelcontextprotocol/inspector": "^0.1.0" } } From 7fb6e11038d41cded99b508d219ebe974f60d58e Mon Sep 17 00:00:00 2001 From: "BusinessHotels.com" Date: Sat, 25 Apr 2026 15:13:51 -0700 Subject: [PATCH 132/138] Update tsconfig.json --- tsconfig.json | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/tsconfig.json b/tsconfig.json index 4b91f5e84d..43dae7bda5 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -3,11 +3,16 @@ "target": "ES2022", "module": "NodeNext", "moduleResolution": "NodeNext", - "outDir": "dist", - "rootDir": "src/business-hotels-mcp", + "lib": ["ES2022"], + "declaration": true, + "sourceMap": true, + "outDir": "./dist", + "rootDir": "./src", "strict": true, + "esModuleInterop": true, "skipLibCheck": true, - "esModuleInterop": true + "forceConsistentCasingInFileNames": true }, - "include": ["src/business-hotels-mcp/index.ts"] + "include": ["src/**/*"], + "exclude": ["node_modules", "dist"] } From 936555efc3aabe9430562965c12c9677fffb5a46 Mon Sep 17 00:00:00 2001 From: "BusinessHotels.com" Date: Sat, 25 Apr 2026 15:18:41 -0700 Subject: [PATCH 133/138] Update package.json --- package.json | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/package.json b/package.json index fb0f857a94..0e04a924e9 100644 --- a/package.json +++ b/package.json @@ -2,18 +2,15 @@ "name": "business-hotels-mcp", "version": "2.0.0", "type": "module", - "description": "Universal Agentic API for BusinessHotels.com", - "main": "dist/index.js", "bin": { - "business-hotels-mcp": "dist/index.js" + "business-hotels-mcp": "./dist/index.js" }, + "main": "./dist/index.js", "scripts": { "build": "tsc", - "watch": "tsc -w", "prepare": "npm run build", "start": "node dist/index.js", - "inspect": "mcp-inspect dist/index.js", - "validate": "curl -s https://www.businesshotels.com/mcp-server.php?route=tools | jq ." + "inspect": "mcp-inspect dist/index.js" }, "dependencies": { "@modelcontextprotocol/sdk": "^1.0.1", From 9c7998a173cec08d6595b2c189efefe9c9f74861 Mon Sep 17 00:00:00 2001 From: "BusinessHotels.com" Date: Sat, 25 Apr 2026 15:19:53 -0700 Subject: [PATCH 134/138] Update index.ts --- src/index.ts | 112 +++++++++++++++++++++++++++------------------------ 1 file changed, 59 insertions(+), 53 deletions(-) diff --git a/src/index.ts b/src/index.ts index 17f2840401..0878f797f7 100644 --- a/src/index.ts +++ b/src/index.ts @@ -1,73 +1,79 @@ -import { Server } from "@modelcontextprotocol/sdk/server/index.js"; +import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js"; import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js"; -import { - CallToolRequestSchema, - ListToolsRequestSchema, -} from "@modelcontextprotocol/sdk/types.js"; import { z } from "zod"; - -const server = new Server( - { - name: "business-hotels-mcp", - version: "1.0.0", - }, - { - capabilities: { - tools: {}, - }, - } -); +import axios from "axios"; /** - * List available tools. + * Initialize the BusinessHotels MCP Server + * Version 2.0.0 aligned with Agentic Discovery Endpoints */ -server.setRequestHandler(ListToolsRequestSchema, async () => { - return { - tools: [ - { - name: "search_hotels", - description: "Search for business hotels with real-time price verification", - inputSchema: { - type: "object", - properties: { - destination: { type: "string", description: "City or Airport code" }, - checkIn: { type: "string", description: "YYYY-MM-DD" }, - checkOut: { type: "string", description: "YYYY-MM-DD" }, - }, - required: ["destination", "checkIn", "checkOut"], - }, - }, - ], - }; +const server = new McpServer({ + name: "business-hotels-mcp", + version: "2.0.0", }); /** - * Handle tool execution. + * Tool: get_live_hotel_rates + * Connects to the PHP tools route for real-time ARI data. */ -server.setRequestHandler(CallToolRequestSchema, async (request) => { - if (request.params.name === "search_hotels") { - const { destination } = request.params.arguments as any; - - // Placeholder for your Priceline/PPS API logic - return { - content: [ - { - type: "text", - text: `Searching for premium business hotels in ${destination}... Connection to BusinessHotels.com API established.`, +server.tool( + "get_live_hotel_rates", + { + hotelName: z.string().describe("Hotel name only, NO COMMAS (e.g. Marriott Marquis San Francisco US)"), + checkinDate: z.string().regex(/^\d{4}-\d{2}-\d{2}$/).describe("Check-in date in YYYY-MM-DD format"), + checkoutDate: z.string().regex(/^\d{4}-\d{2}-\d{2}$/).describe("Check-out date in YYYY-MM-DD format"), + adults: z.number().min(1).max(4).optional().default(2), + currency: z.string().length(3).optional().default("USD"), + }, + async ({ hotelName, checkinDate, checkoutDate, adults, currency }) => { + try { + // Connects to your unified PHP tools route + const response = await axios.get("https://www.businesshotels.com/mcp-server.php", { + params: { + route: "tools", + hotelName, + checkinDate, + checkoutDate, + adults, + currency, + // Using the live test key from your tool-config.html + apiKey: "test-live-hotel-rates2025" }, - ], - }; + timeout: 5000 // Optimized for your sub-2-second response goal + }); + + return { + content: [ + { + type: "text", + text: JSON.stringify(response.data, null, 2), + }, + ], + }; + } catch (error: any) { + return { + isError: true, + content: [ + { + type: "text", + text: `API Error: ${error.message}`, + }, + ], + }; + } } - throw new Error("Tool not found"); -}); +); +/** + * Main execution block using Stdio transport + */ async function main() { const transport = new StdioServerTransport(); await server.connect(transport); - console.error("BusinessHotels MCP server running on stdio"); + console.error("BusinessHotels Agentic MCP Server running on stdio"); } main().catch((error) => { - console.error("Server error:", error); + console.error("Fatal Server Error:", error); process.exit(1); }); From 18d2bd60020bcf05b2c42baf3cda7221ec64ecd7 Mon Sep 17 00:00:00 2001 From: "BusinessHotels.com" Date: Sat, 25 Apr 2026 15:25:25 -0700 Subject: [PATCH 135/138] Delete .github/workflows/typescript.yml --- .github/workflows/typescript.yml | 103 ------------------------------- 1 file changed, 103 deletions(-) delete mode 100644 .github/workflows/typescript.yml diff --git a/.github/workflows/typescript.yml b/.github/workflows/typescript.yml deleted file mode 100644 index ce456a898d..0000000000 --- a/.github/workflows/typescript.yml +++ /dev/null @@ -1,103 +0,0 @@ -name: TypeScript - -on: - push: - branches: - - main - pull_request: - release: - types: [published] - -jobs: - detect-packages: - runs-on: ubuntu-latest - outputs: - packages: ${{ steps.find-packages.outputs.packages }} - steps: - - uses: actions/checkout@v6 - - name: Find JS packages - id: find-packages - working-directory: src - run: | - PACKAGES=$(find . -name package.json -not -path "*/node_modules/*" -exec dirname {} \; | sed 's/^\.\///' | jq -R -s -c 'split("\n")[:-1]') - echo "packages=$PACKAGES" >> $GITHUB_OUTPUT - - test: - needs: [detect-packages] - strategy: - fail-fast: false - matrix: - package: ${{ fromJson(needs.detect-packages.outputs.packages) }} - name: Test ${{ matrix.package }} - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v6 - - uses: actions/setup-node@v6 - with: - node-version: 22 - cache: npm - - name: Install dependencies - working-directory: src/${{ matrix.package }} - run: npm ci - - name: Run tests - working-directory: src/${{ matrix.package }} - run: npm test --if-present || true - - build: - needs: [detect-packages, test] - strategy: - matrix: - package: ${{ fromJson(needs.detect-packages.outputs.packages) }} - name: Build ${{ matrix.package }} - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v6 - - uses: actions/setup-node@v6 - with: - node-version: 22 - cache: npm - - name: Install dependencies - working-directory: src/${{ matrix.package }} - run: npm ci - - name: Build package - working-directory: src/${{ matrix.package }} - run: npm run build - - publish: - runs-on: ubuntu-latest - needs: [build, detect-packages] - if: github.event_name == 'release' - environment: release - strategy: - matrix: - package: ${{ fromJson(needs.detect-packages.outputs.packages) }} - name: Publish ${{ matrix.package }} - permissions: - contents: read - id-token: write - steps: - - uses: actions/checkout@v6 - - uses: actions/setup-node@v6 - with: - node-version: 22 - cache: npm - registry-url: "https://registry.npmjs.org" - - name: Install dependencies - working-directory: src/${{ matrix.package }} - run: npm ci - - name: Publish package - working-directory: src/${{ matrix.package }} - run: npm publish --access public - env: - NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }} - - register-mcp: - needs: [build] - if: github.ref == 'refs/heads/main' - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v6 - - name: Submit to Official MCP Registry - uses: modelcontextprotocol/action-publish@v1 - with: - github-token: ${{ secrets.GITHUB_TOKEN }} From f6c575681e3a9d86a915a93930c56385f2904ded Mon Sep 17 00:00:00 2001 From: "BusinessHotels.com" Date: Sat, 25 Apr 2026 16:45:10 -0700 Subject: [PATCH 136/138] Create media --- media | 1 + 1 file changed, 1 insertion(+) create mode 100644 media diff --git a/media b/media new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/media @@ -0,0 +1 @@ + From 7d152679d124ef808c8845b0645f92e376afad5a Mon Sep 17 00:00:00 2001 From: "BusinessHotels.com" Date: Sat, 25 Apr 2026 16:45:34 -0700 Subject: [PATCH 137/138] Delete media --- media | 1 - 1 file changed, 1 deletion(-) delete mode 100644 media diff --git a/media b/media deleted file mode 100644 index 8b13789179..0000000000 --- a/media +++ /dev/null @@ -1 +0,0 @@ - From f945c9da3e3fd7b9b5e2eda5dd35e0e3529456de Mon Sep 17 00:00:00 2001 From: "BusinessHotels.com" Date: Sat, 25 Apr 2026 16:58:49 -0700 Subject: [PATCH 138/138] Update README.md --- src/business-hotels-mcp/README.md | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/src/business-hotels-mcp/README.md b/src/business-hotels-mcp/README.md index f77052e7a2..7697140814 100644 --- a/src/business-hotels-mcp/README.md +++ b/src/business-hotels-mcp/README.md @@ -8,6 +8,26 @@ ## 🌍 BusinessHotels.com Agentic API - Universal LLM Compatibility. + +--- + +## ⚑ Performance Showcase + +The [BusinessHotels.com MCP Server](https://github.com/businesshotelsdeveloper-dot/businesshotels.com) is built for speed. By optimizing for **sub-second latency**, we enable autonomous agents to perform complex travel logicβ€”like ranking multiple propertiesβ€”in real-time without timing out. + +### πŸ”„ Multi-Hotel Agentic Loop (Sub-Second Ranking) +Demonstrates the **"Loop, Collect, Then Respond"** pattern. The agent queries 5 luxury properties and ranks them by value in under 1 second. +[![BusinessHotels.com MCP Multi-Hotel Demo](https://img.youtube.com/vi/xwaulgWBqJQ/0.jpg)](https://youtu.be/xwaulgWBqJQ) +* **Goal:** Ranking and comparing live inventory. +* **Speed:** Total verification for 5 properties in **< 1 second**. + +### πŸ” Single Property Verification & Deep Dive +Demonstrates real-time price validation and booking hand-off for a specific hotel. +[![BusinessHotels.com MCP Single Hotel Demo](https://img.youtube.com/vi/wg-NCa0ga1A/0.jpg)](https://youtu.be/wg-NCa0ga1A) +* **Goal:** Final price verification and generating "Agentic Booking" URLs. +* **Speed:** Complete JSON payload returned in **~531ms**. + +--- The **BusinessHotels.com MCP Server** is built on the OpenAI-compatible JSON Schema formatβ€”the universal standard accepted by all leading AI platforms. This enables zero-config auto-registration across the entire agentic ecosystem. | Platform | Integration Method | Status |