One MCP integration.
Every supplier.
The unified distribution interface for AI agents: search, live rates, and two-phase confirmed booking — with quotes that carry their own evidence and pricing rules you configure.
The new integration tax
Hotel suppliers are each shipping their own MCP. Every integration means another account, another ID space, another pricing black box — your agent rebuilds the same plumbing per supplier, forever.
Aggregate once
Every supplier connector (Dida, Tourmind, Yalago, Hotelbeds, ...) lives behind one MCP tool surface. When a supplier ships their own MCP tomorrow, it becomes one more upstream lane for us — not one more integration for you.
Three ways in
Same tool surface, same contract — pick the path that matches where your agent runs.
Local gateway
Machines you control (Claude Code / Cursor / Codex): hbcli runs a local stdio gateway; the key stays in the local credential store and agent configs carry zero secrets.
{ "mcpServers": { "hotelbyte":
{ "command": "hbcli", "args": ["mcp", "serve"] } } }Static key
Hosted platforms and CI: mint a long-idle static key (dies only after 30 idle days; absolute lifetime server-capped at 365 days) and put it straight into the config.
$ hbcli mcp token
{ "type": "http", "url": "https://…/mcp",
"headers": { "Authorization": "Bearer <token>" } }OAuth 2.1 platform connectors
Claude web / ChatGPT connectors: standard RFC 9728/8414 discovery, dynamic registration, and PKCE. The consent page is hosted on our side; the token is a platform JWT.
GET /.well-known/oauth-protected-resource → 401 WWW-Authenticate: resource_metadata=…
Connect your agent in one minute
Every card starts with one command — hbcli mcp setup <client> — which writes the config (or prints your token + the exact fields to paste) and verifies the connection. Write tools still require explicit confirmation.
Zero signup — try now
hbcli mcp setup <client> --demo works right now — the shared sandbox identity is built into the CLI, no account, no credentials. Search real hotels in seconds; upgrade to your own tenant whenever you want more.
Bring your own tenant
Register on the portal, issue API credentials, then hbcli auth set-credentials && hbcli mcp setup — your supplier rules, your markup, your customers. One user can hold both identities.
Claude CodeCLIOne-liner remote HTTP; or the local stdio gateway to keep keys off the wire.
hbcli mcp setup claude-code # runs: claude mcp add hotelbyte --scope user -- hbcli mcp serve # (no claude on PATH? prints a paste-ready snippet instead)
CursorIDEGlobal ~/.cursor/mcp.json, or per-project .cursor/mcp.json.
hbcli mcp setup cursor # merges hotelbyte into ~/.cursor/mcp.json # (your other MCP servers are preserved)
ChatGPTConnectorCustom plugin (developer mode): MCP URL + API-key auth — pick API key, not OAuth, or creation fails at the probe.
hbcli mcp setup chatgpt # prints your token + the exact form fields: # Server URL: https://api-test.hotelbyte.com/mcp # Authentication: API key ← NOT OAuth # Header: Authorization · Value: Bearer <token>
GrokConnector · xAIGrok connectors — custom MCP server on grok.com, web and mobile.
hbcli mcp setup grok # writes [mcp_servers.hotelbyte] into ~/.grok/config.toml # web/mobile connectors instead: grok.com/connectors → Custom # (hbcli mcp setup generic prints a token for it)
CodexCLI~/.codex/config.toml — the stdio gateway.
hbcli mcp setup codex # appends [mcp_servers.hotelbyte] to ~/.codex/config.toml
AntigravityIDE · GoogleGoogle's agent-first IDE (2.0 at I/O 2026) — native MCP, browser control, agent manager.
hbcli mcp setup generic # token + fields, then paste into mcp_config.json
{ "mcpServers": { "hotelbyte":
{ "command": "hbcli", "args": ["mcp", "serve"] } } }
# note: no "type" field in Antigravity configsDevin DesktopAgent · CognitionCognition's autonomous agent desktop — formerly Windsurf (June 2026).
hbcli mcp setup generic # token + URL # Devin → Settings → MCP Marketplace → Add Your Own → paste # (needs the Manage MCP Servers permission)
Claude Desktop · WebConnectorsSettings → Extensions / Connectors → Add custom connector: paste the endpoint URL, auth = Bearer. Directory-style platform connectors use the OAuth 2.1 discovery flow above.
hbcli mcp setup claude-connectors # prints your token, then: # Add custom connector → paste URL → auth: Bearer <token> # order.book / order.cancel always require confirm=true
VS Code · CopilotIDEWorkspace .vscode/mcp.json (stdio type).
hbcli mcp setup vscode # writes .vscode/mcp.json in the current folder (servers key)
豆包 · DoubaoWork agent · ByteDanceDoubao desktop (work mode) — custom MCP connectors in 技能·连接器: URL + token, or a local command.
hbcli mcp setup doubao # prints your token, then 豆包电脑版 → 技能·连接器: # 新建 → 自定义连接器 → URL + token # URL: https://api-test.hotelbyte.com/mcp # token: Bearer <token> # or command mode: hbcli mcp serve
WorkBuddyWorkbench · TencentTencent's all-scene AI work bench — its open platform (Sep 2026) takes MCP connectors: preset or your own server.
hbcli mcp setup workbuddy # prints your token, then WorkBuddy → MCP 连接器 → 自定义 Server: # URL: https://api-test.hotelbyte.com/mcp # Header: Authorization · Value: Bearer <token>
TraeIDE · ByteDanceByteDance's AI IDE — MCP panel or .trae/mcp.json.
hbcli mcp setup trae # writes [mcp_servers.hotelbyte] into ~/.trae/traecli.toml # (read by both Traex.app and the trae CLI)
Coze · 扣子Agent platform · ByteDanceByteDance agent platform — attach MCP extensions to any bot or workflow.
hbcli mcp setup coze # prints your token, then Bot/工作流 → 扩展 → MCP: # Type: Streamable HTTP # URL: https://api-test.hotelbyte.com/mcp # Header: Authorization · Value: Bearer <token>
QoderIDE · AlibabaAlibaba's agentic coding platform — add MCP in settings.
hbcli mcp setup generic # token + fields
{ "mcpServers": { "hotelbyte":
{ "command": "hbcli", "args": ["mcp", "serve"] } } }
# MCP settings → paste JSON (stdio) or remote URLCodeBuddyIDE · TencentTencent AI coding assistant — add MCP in its MCP settings.
hbcli mcp setup generic # token + fields
{ "mcpServers": { "hotelbyte":
{ "command": "hbcli", "args": ["mcp", "serve"] } } }
# MCP settings → import or pasteCherry StudioDesktop · open sourceOpen-source desktop AI client — Settings → MCP Servers, stdio or streamable HTTP.
hbcli mcp setup cherry # prints your token, then 设置 → MCP 服务器 → 添加: # Type: Streamable HTTP · URL: .../mcp # Header: Authorization · Value: Bearer <token>
OpenClawOpen source · 20262026's breakout open-source agent — workflow-driven tool orchestration, speaks MCP.
hbcli mcp setup generic # token + fields # register hotelbyte as an MCP tool source: transport: stdio command: hbcli mcp serve
HermesOpen source · 2026Autonomous open-source agent with long-term memory — MCP-compatible tool calls.
hbcli mcp setup generic # token + fields Type: Streamable HTTP URL: https://api-test.hotelbyte.com/mcp Header: Authorization: Bearer <token>
ClineVS Code agentOpen-source VS Code agent — MCP Servers panel → Configure.
hbcli mcp setup cline # merges hotelbyte into cline_mcp_settings.json
Roo CodeVS Code agentOpen-source VS Code agent (Cline family) — MCP settings.
hbcli mcp setup generic # token + fields # Roo Code → MCP Servers → Edit JSON → paste the snippet
Open WebUISelf-hosted chatSelf-hosted chat UI — bridge any MCP server via mcpo, then add it as a tool.
hbcli mcp setup generic # token + fields uvx mcpo --port 8010 -- hbcli mcp serve # Open WebUI → Settings → Tools → http://localhost:8010
LangChain · LangGraphFrameworkPython agent frameworks — langchain-mcp-adapters exposes the tools directly.
hbcli mcp setup generic # get the token first
from langchain_mcp_adapters.client import MultiServerMCPClient
client = MultiServerMCPClient({"hotelbyte": {
"url": "https://api-test.hotelbyte.com/mcp",
"transport": "streamable_http",
"headers": {"Authorization": "Bearer <token>"}}})
tools = await client.get_tools()CrewAIFrameworkMulti-agent orchestration — MCPServerAdapter turns the endpoint into crew tools.
hbcli mcp setup generic # get the token first
from crewai_tools import MCPServerAdapter
adapter = MCPServerAdapter({"hotelbyte": {
"url": "https://api-test.hotelbyte.com/mcp",
"headers": {"Authorization": "Bearer <token>"}}})
tools = adapter.tools()Dots · ChatGPTDevDay · 2026-09OpenAI's always-on agents (DevDay 2026, Sep 29) — each dot runs on its own cloud computer; wire hotel supply in as a plugin.
hbcli mcp setup generic # token + fields 1. Settings → Security and login → Developer mode: ON 2. chatgpt.com/plugins → “+” → add MCP server (Bearer <token>) 3. Dot profile → Customize → Plugins → enable hotelbyte
InstinctPersonal · 2026-08The viral message-first personal agent (books flights and hotels over iMessage/WhatsApp) — hosted, so supply lands platform-side.
Hosted agent — no client-side config. Its platform team integrates the unified API / MCP behind the scenes: one contract, all suppliers. → Partner integration: sales@hotelbyte.com
KarpoPersonal · 2026MachinePulse's city sidekick living inside iMessage — proactive plans, restaurants, stays. Platform-side supply.
Hosted agent — no client-side config. City-plan tools call the unified API / MCP behind the scenes: one contract, all suppliers. → Partner integration: sales@hotelbyte.com
Any agent · self-builtJSON-RPCNo SDK required: MCP over streamable-http is three JSON-RPC calls. Works from any language, framework, or runtime — including agents you build yourself. Official SDKs (Python mcp, TypeScript @modelcontextprotocol/sdk) point at the same URL.
POST https://api-test.hotelbyte.com/mcp
Authorization: Bearer <token> · Accept: application/json, text/event-stream
# 1) initialize — protocol version + client info
{"jsonrpc":"2.0","id":1,"method":"initialize","params":{
"protocolVersion":"2025-06-18","capabilities":{},
"clientInfo":{"name":"my-agent","version":"1.0"}}}
# 2) tools/list — discover the tools and their schemas
{"jsonrpc":"2.0","id":2,"method":"tools/list"}
# 3) tools/call — search hotels in Dubai for two adults
{"jsonrpc":"2.0","id":3,"method":"tools/call","params":{
"name":"hotel.list","arguments":{
"destinationName":"Dubai","checkIn":"2026-11-20","checkOut":"2026-11-22",
"rooms":[{"adultCount":2}]}}}Every result returns { response, evidence } — keep the traceId for reconciliation. order.book needs check_avail first and confirm=true; retries reuse customerReferenceNo.
Token source: hbcli mcp token (static key, dies after 30 idle days) or any portal-issued ticket. Never paste supplier credentials here — the token is your HotelByte identity.
The tool surface
The tools cover the whole transaction. Write tools exist only when a deployment enables them — and never execute without explicit confirmation.
hotel.listreadSearch hotels; returns the sessionId used across the flowhotel.ratesreadRoom types and live rates, with refundability and cancel feeshotel.check_availreadPhase 1 of two: re-verify inventory and price before bookingorder.queryreadOrder status and confirmation lookupsorder.bookwrite · confirmRequires confirm=true; customerReferenceNo is the idempotency keyorder.cancelwrite · confirmRequires confirm=true; cancellation may be charged and irreversibleQuotes that carry evidence
Every tool result returns { response, evidence }. The response mirrors the HTTP API; the evidence envelope makes each quote citable and traceable — hand the traceId to support and they can reconstruct that exact quote.
{
"response": { "list": [ … ] },
"evidence": {
"tool": "hotel.list",
"traceId": "20261003…",
"sessionId": "S-2026…",
"currency": "USD"
}
}Bookings with a hard confirmation boundary
- hotel.rates — present price, refundability and cancel fees to the user.
- hotel.check_avail — re-verify the exact rate; live prices can move.
- order.book with confirm=true — only after the user consents. Anything less is rejected server-side before the order flow starts.
- Retries reuse customerReferenceNo — idempotent by key, duplicates surface as a soft warning you must confirm.
Try the sandbox now
UAT · no SLAThe sandbox endpoint is publicly reachable. Any MCP client can initialize against it with a valid ticket:
curl -X POST https://api-test.hotelbyte.com/mcp \
-H "Authorization: Bearer <ticket>" \
-H "Accept: application/json, text/event-stream" \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/list"}'Procurement view
What to check when evaluating an AI distribution interface
Vendor-neutral. Three questions separate an aggregation layer from another single-inventory MCP — and how to prove each on the spot.
Is this yet another single-inventory supplier MCP
No. We are the aggregation layer: every supplier connector sits behind one tool surface, and every new supplier MCP is just another upstream lane for us.
Run hotel.list for one destinationName and check whether results span multiple suppliers with a true minimum price.
Can the agent accidentally fire a real booking
No. order.book requires confirm=true (after the user consents to the exact price, dates and cancellation policy); missing or false confirm is rejected server-side before the order flow starts.
Call order.book without confirm and check for an explicit rejection and zero side effects.
How transparent is pricing
Every quote carries an evidence envelope (traceId / sessionId / currency / time) that is citable and traceable; cost and markup composition opens in tiers via configurable rules, not a black box.
Take the traceId from a response and ask the vendor to reconstruct the full chain of that one quote.