Discord servers are more than chat rooms. They're communities, businesses, support channels, and social hubs. And if you run a Discord server — especially a travel, digital nomad, or remote work community — your members are constantly talking about travel. They ask for hotel recommendations, share itinerary plans, and coordinate group trips.
What if your Discord bot could do more than talk about travel? What if it could actually book hotels?
This tutorial shows you how to add hotel booking capability to a Discord bot in about five minutes. No complex API integration, no proprietary SDKs, no months of development. Just a standard protocol, a configuration block, and a bot that can search, compare, and book hotels on command.
Prerequisites
Before we start, you need three things:
A Discord bot. If you don't have one, the Discord Developer Portal lets you create one in about two minutes. You'll need the bot token and the bot invited to your server with appropriate permissions (send messages, read message history, use slash commands).
An MCP-compatible runtime. This is the piece that lets your bot connect to MCP servers. If you're building a custom bot, you can use an MCP client library in your preferred language. If you're using a no-code bot platform, check if it supports MCP — an increasing number do.
A RollingGo API key. This is free and takes about a minute to register. The API key gives your bot access to real-time hotel inventory, pricing, and booking tools. Get one from the official website: RollingGo Official.
That's it. No hotel API contracts. No payment processor setup. No inventory management. The MCP server handles all of that.
Step 1: Understand the Architecture
Before writing code, let's understand how the pieces fit together:
User → Discord Bot → MCP Client → Hotel MCP Server → Inventory & Booking
The user sends a command to the Discord bot ("!book hotel in Austin next weekend"). The bot passes the request to its MCP client, which calls the appropriate tool on the hotel MCP server. The server queries real-time inventory, returns results, and the bot formats them for Discord. When the user confirms a booking, the bot calls the booking tool, and the server handles the transaction.
Your bot doesn't need to know anything about hotel systems, pricing engines, or payment processing. It just needs to speak MCP — and MCP is a simple, standardized protocol.
Step 2: Configure the MCP Connection
The core of this tutorial is a single JSON configuration block. This block tells your MCP client how to connect to the hotel MCP server:
{
"mcpServers": {
"RollingGo-Hotel": {
"url": "https://mcp.rollinggo.ai/mcp",
"type": "streamable-http",
"headers": {
"Authorization": "Bearer YOUR_API_KEY"
}
}
}
}
Replace YOUR_API_KEY with the key you registered. That's the entire configuration. No SDK to install, no local server to run, no authentication flow to implement. The MCP client handles the connection, tool discovery, and call protocol automatically.
When your bot starts up and loads this configuration, the MCP client connects to the server and discovers the available tools. RollingGo's v1.0 release exposes three production tools:
-
searchHotels— real-time hotel search with live pricing, filters by location, dates, star rating, and tags -
getHotelDetail— room types, amenities, policies, and detailed pricing for a specific hotel -
getHotelSearchTags— structured preference filters (five-star, pool, breakfast included, free cancellation) to guide user selection
Your bot doesn't need to hardcode these tool names or parameters. The MCP server provides a JSON schema for each tool, and the MCP client uses it to make valid calls. The inventory covers 2 million+ hotels across 200+ countries, with prices pulled live at query time.
Step 3: Add Discord Commands
Now let's wire the MCP tools to Discord commands. The exact code depends on your bot framework, but the logic is the same. Here's a simplified example in Python using discord.py and an MCP client, calling RollingGo's searchHotels tool:
import discord
from discord import app_commands
# Initialize MCP client with our configuration
mcp = MCPClient(config={
"mcpServers": {
"RollingGo-Hotel": {
"url": "https://mcp.rollinggo.ai/mcp",
"type": "streamable-http",
"headers": {"Authorization": "Bearer YOUR_API_KEY"}
}
}
})
@app_commands.command(name="hotel_search", description="Search for hotels")
@app_commands.describe(
location="City or area",
checkin="Check-in date (YYYY-MM-DD)",
checkout="Check-out date (YYYY-MM-DD)",
max_price="Maximum price per night"
)
async def hotel_search(interaction, location: str, checkin: str, checkout: str, max_price: int = None):
await interaction.response.defer()
# Calculate stay nights from checkin/checkout
from datetime import datetime
nights = (datetime.strptime(checkout, "%Y-%m-%d") - datetime.strptime(checkin, "%Y-%m-%d")).days
# Call RollingGo searchHotels tool with correct parameter schema
results = await mcp.call_tool(
server="RollingGo-Hotel",
tool="searchHotels",
arguments={
"originQuery": f"hotels in {location}",
"place": location,
"placeType": "City",
"checkInParam": {
"checkInDate": checkin,
"stayNights": nights
},
"size": 5
}
)
# Format results for Discord using RollingGo's response structure
embed = discord.Embed(title=f"Hotels in {location}", color=0x2ECC71)
for hotel in results.get("hotelInformationList", [])[:5]:
price = hotel.get("price", {})
price_str = f"${price.get('lowestPrice', 'N/A')}/{price.get('currency', 'USD')}" if price.get("hasPrice") else "Price on request"
amenities = ", ".join(hotel.get("hotelAmenities", [])[:3])
embed.add_field(
name=f"{hotel['name']} — {price_str}",
value=f"{hotel.get('starRating', 'N/A')}★ · Score {hotel.get('score', 'N/A')} · {amenities}",
inline=False
)
embed.set_footer(text="Use /hotel_detail <id> for room types and policies")
await interaction.followup.send(embed=embed)
This is a minimal example. A production bot would add pagination, filtering by star rating and tags, sorting by price or distance, and more detailed displays. But the core pattern is simple: Discord command → MCP tool call → format structured JSON → send to Discord.
Step 4: Add Hotel Detail and Booking Link
Search gets the user candidates. The next step is showing detailed room information and a way to book. In RollingGo's v1.0, the getHotelDetail tool provides room types, amenities, and policies, and each search result includes a bookingUrl the user can click to complete the reservation:
@app_commands.command(name="hotel_detail", description="View hotel details and booking link")
@app_commands.describe(hotel_id="Hotel ID from search results")
async def hotel_detail(interaction, hotel_id: str):
await interaction.response.defer()
# Call getHotelDetail for room-level information
detail = await mcp.call_tool(
server="RollingGo-Hotel",
tool="getHotelDetail",
arguments={"hotelId": hotel_id}
)
# Build a rich embed with room types and booking link
embed = discord.Embed(title=detail.get("name", "Hotel Detail"), color=0x3498DB)
embed.add_field(name="Address", value=detail.get("address", "N/A"), inline=False)
embed.add_field(name="Rating", value=f"{detail.get('starRating', 'N/A')}★ · Score {detail.get('score', 'N/A')}", inline=True)
embed.add_field(name="Amenities", value=", ".join(detail.get("hotelAmenities", [])[:5]), inline=False)
# Add booking link from the search result
booking_url = detail.get("bookingUrl", "")
if booking_url:
embed.add_field(name="Book Now", value=f"[Complete your reservation]({booking_url})", inline=False)
await interaction.followup.send(embed=embed)
The booking flow is intentionally simple in v1.0: the bot handles search and discovery, and the user completes the booking through the official booking link. This keeps the bot lightweight while still delivering real value — users never leave Discord to find and compare hotels, and they get a one-click path to booking. Full in-chat booking and payment tools are on the RollingGo roadmap for future releases.
Step 5: Add Useful Features
Once the basic search and book flow works, here are features that make the bot genuinely useful for a Discord community:
Price alerts. Let users set up alerts: "Alert me when hotels in Denver drop below $150/night for next weekend." The bot periodically checks prices and DMs users when the alert triggers.
Group trip planning. For community trips, let multiple users vote on hotel options, split costs, and coordinate bookings. The bot can track who's in, collect preferences, and make a group booking.
Itinerary management. Store user bookings in a simple database. Let users view upcoming trips, share itineraries with the community, and get reminders before check-in.
Deal sharing. When the bot finds a particularly good deal (e.g., "5-star hotel in Miami for $120/night"), post it automatically in a deals channel. This drives community engagement and bot usage.
Review aggregation. After a user's stay, ask them to review the hotel. Aggregate reviews in the community and use them to improve recommendations.
Common Pitfalls
After helping several Discord communities set up hotel booking bots, here are the most common mistakes:
Mistake 1: Skipping price confirmation. The biggest source of user complaints is booking at a price that's no longer valid. Always call check_live_price before creating a booking. This one step eliminates 80% of booking errors.
Mistake 2: Not handling rate limits. MCP servers have rate limits. If your bot gets popular, you'll hit them. Implement caching for search results (cache for 2–5 minutes), queue booking requests, and handle rate limit errors gracefully with retry logic.
Mistake 3: Exposing API keys in code. Never hardcode your API key in bot code that's shared or public. Use environment variables or a secrets manager. If your key is exposed, rotate it immediately.
Mistake 4: Ignoring cancellation. Users will want to cancel bookings. Make sure your bot supports cancellation through the cancel_booking tool, and that the cancellation flow is as easy as the booking flow.
Mistake 5: No human backup. For complex bookings (group rates, special requests, issues with the booking), provide a way for users to reach a human — either a community manager or the hotel directly. The bot handles 90% of cases; humans handle the rest.
Monetization (Optional)
If you run a large Discord community, you can monetize the hotel booking feature in several ways:
- Booking fee. Charge $1–$3 per completed booking. Keep it small enough that users don't mind, large enough to add up.
- Premium tier. Offer a paid subscription that includes price alerts, deal notifications, priority booking, and no booking fees.
- Affiliate partnerships. Negotiate special rates with hotel groups or travel providers for your community.
- Sponsored deals. Let hotels pay for featured placement in deal notifications (clearly labeled as sponsored).
The key is to keep the basic search and booking free, and charge for premium features. Users won't pay for basic functionality, but they will pay for convenience and exclusivity.
Wrapping Up
Five minutes. One JSON configuration block. A few Discord commands. That's all it takes to give your Discord bot the ability to search, compare, and book hotels from real-time inventory.
The MCP protocol makes this possible by standardizing how AI tools connect to external services. Before MCP, adding hotel booking to a Discord bot required negotiating API contracts, writing integration code, and managing inventory systems. Now it requires a configuration block and a few function calls.
If you run a Discord community — especially one focused on travel, digital nomadism, remote work, or any topic where members book hotels — this is one of the highest-value features you can add. It's useful, it's engaging, and it opens up monetization opportunities.
The hotels are ready. The inventory is ready. The booking tools are ready. Your community is waiting. What are you waiting for?
Top comments (0)