From bbd2e16820fcf4d53602451b7c0fcbe6c7ad30dc Mon Sep 17 00:00:00 2001 From: businesshotelsdeveloper-dot Date: Tue, 21 Apr 2026 12:04:19 -0700 Subject: [PATCH 01/72] 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 02/72] 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 03/72] 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 04/72] 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 05/72] 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 06/72] 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 07/72] 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 08/72] 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 09/72] 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 10/72] 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 11/72] 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 12/72] 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 13/72] 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 14/72] 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 15/72] 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 16/72] 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 17/72] 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 18/72] 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 19/72] 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 20/72] 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 21/72] 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 22/72] 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 23/72] 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 24/72] 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 25/72] 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 26/72] 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 27/72] 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 28/72] 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 29/72] 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 30/72] 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 31/72] 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 32/72] 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 33/72] 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 34/72] 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 35/72] 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 36/72] 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 37/72] 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 38/72] 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 39/72] 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 40/72] 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 41/72] 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 42/72] 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 43/72] 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 44/72] 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 45/72] 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 46/72] 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 47/72] 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 48/72] 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 49/72] 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 50/72] 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 51/72] 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 52/72] 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 53/72] 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 54/72] 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 55/72] 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 56/72] 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 57/72] 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 58/72] 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 59/72] 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 60/72] 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 61/72] 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 62/72] 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 63/72] 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 64/72] 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 65/72] 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 66/72] 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 67/72] 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 68/72] 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 69/72] 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 70/72] 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 71/72] 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 72/72] 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.