Rizerve MCP Server
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Rizerve MCP Server Show me all properties in Crete"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Rizerve MCP Server
MCP server for the Rizerve direct booking platform. Manage properties, bookings, availability, iCal sync, analytics, and webhooks through AI assistants.
Install
git clone https://github.com/panoskiriakopoulos-sys/rizerve-mcp-server.git
cd rizerve-mcp-server
npm install && npm run buildRelated MCP server: guesty-mcp-server
Setup
Get your API key from Rizerve Dashboard → Integrations → API Access.
Claude Desktop
{
"mcpServers": {
"rizerve": {
"command": "node",
"args": ["/path/to/rizerve-mcp-server/dist/index.js"],
"env": {
"RIZERVE_API_KEY": "rz_xxxxxxxxxxxxxxxx"
}
}
}
}Cursor / Windsurf
{
"mcpServers": {
"rizerve": {
"command": "node",
"args": ["dist/index.js"],
"cwd": "/path/to/rizerve-mcp-server",
"env": {
"RIZERVE_API_KEY": "rz_xxxxxxxxxxxxxxxx"
}
}
}
}What You Can Ask
Connect to any MCP-compatible client and ask:
"Show me all my properties"
"What bookings check in this week?"
"Create a new property in Crete for €120/night"
"Is the beach villa available July 5–10?"
"Block August 1–15 for maintenance on all properties"
"Import my Airbnb calendar into the villa"
"What's our occupancy rate this month?"
"Create a webhook that notifies Slack on new bookings"
"How much revenue did we make in Q2?"
"Show me all bookings from maria@example.com"
Tool Reference
Properties (5 tools)
Tool | Arguments | Description |
|
| List all properties with full details, prices, amenities |
|
| Get single property by its public slug |
|
| Create a new property listing |
|
| Update property fields (partial update) |
|
| Permanently delete property + all related data ⚠️ |
Bookings (4 tools)
Tool | Arguments | Description |
|
| List bookings with filters |
|
| Get single booking by UUID |
|
| Create a new booking — auto-enforces minimum stay |
|
| Transition: pending→confirmed/cancelled, confirmed→cancelled/completed |
Availability (3 tools)
Tool | Arguments | Description |
|
| Check if a property is available for a date range |
|
| Block or unblock a single date |
|
| Bulk block/unblock up to 50 date ranges |
iCal Feeds (4 tools)
Tool | Arguments | Description |
|
| List imported calendar feeds (Airbnb, Booking.com, VRBO) |
|
| Import external iCal feed — auto-syncs within minutes |
|
| Get the public iCal URL to share with OTAs |
|
| Remove imported feed and its dates ⚠️ |
Analytics (3 tools)
Tool | Arguments | Description |
|
| Page views, bookings, conversion, revenue, occupancy |
|
| Revenue breakdown by day/week/month/property |
|
| Occupancy rates across properties |
Webhooks & Guests (3 tools)
Tool | Arguments | Description |
|
| Register webhook for |
| — | List registered webhooks with failure stats |
|
| Remove webhook |
|
| Find all bookings for a guest by email |
19 tools total — full CRUD across properties, bookings, availability, iCal, analytics, webhooks, and guest history.
Configuration
Env Var | Default | Description |
| required | API key from Rizerve Dashboard → Integrations → API Access |
|
| API base URL (change for staging/testing) |
|
|
|
|
| HTTP port when |
API Compatibility
This server targets Rizerve API v1. All prices are in the property's configured currency (face value, not cents). Response format is raw JSON arrays/objects — the MCP server transparently wraps them for tool compatibility.
Full API reference: rizerve-api-docs.md
Development
# Install
npm install
# Build
npm run build
# Watch mode
npm run dev
# Run with debug logging
DEBUG=* npm startProject Structure
src/
├── index.ts # MCP server entry, registers all tools
├── constants.ts # API URL, response formats, valid values
├── types.ts # TypeScript interfaces matching v1 API responses
├── services/
│ └── api-client.ts # HTTP client, response wrapping, error handling
├── tools/
│ ├── properties.ts # Property CRUD tools
│ ├── bookings.ts # Booking CRUD + status machine tools
│ ├── availability.ts # Date blocking + batch tools
│ ├── ical.ts # iCal import/export tools
│ └── analytics.ts # Revenue, occupancy, stats tools
└── schemas/
├── common.ts # Shared Zod schemas (pagination, response format)
├── properties.ts # Property input validation
├── bookings.ts # Booking input validation
├── availability.ts # Availability input validation
├── ical.ts # iCal input validation
└── analytics.ts # Analytics input validationLicense
MIT © Osolvo Ltd
Available Tools
19 toolsrizerve_batch_set_availabilityBatch Set AvailabilityAIdempotent
Set availability for multiple properties and date ranges at once.
Efficient for bulk operations like blocking off-season dates or marking multi-property maintenance windows.
Args:
ranges (array): Array of { property_id, date_from, date_to, available, reason? } objects (max 50)
response_format ('markdown' | 'json'): Output format (default: 'markdown')
Returns: Summary with number of ranges processed and total dates affected.
Examples:
"Block August 1-15 for owner stay across two villas" → rizerve_batch_set_availability({ ranges: [{ property_id: "550e...", date_from: "2026-08-01", date_to: "2026-08-15", available: false, reason: "owner_stay" }] })
Inputs: ranges (required), response_format.
rizerve_block_dateBlock or Unblock a DateAIdempotent
Block or unblock a specific date for a property.
Use to mark dates as unavailable for maintenance, owner stays, or manual blocks.
Args:
slug (string): Property public slug
date (string): Date to block/unblock YYYY-MM-DD (required)
available (boolean): false to block, true to unblock (required)
reason (string): Optional reason (e.g. "maintenance", "owner_stay")
response_format ('markdown' | 'json'): Output format (default: 'markdown')
Examples:
"Block July 3rd for maintenance" → rizerve_block_date({ slug: "beachfront-villa", date: "2026-07-03", available: false, reason: "maintenance" })
"Unblock July 3rd" → rizerve_block_date({ slug: "beachfront-villa", date: "2026-07-03", available: true })
Inputs: date (required), slug (required), available (required), reason, +1 more.
rizerve_create_bookingCreate Rizerve BookingA
Create a new booking for a property. Automatically blocks the calendar for the booked dates.
Required: property_id, guest_name, check_in, check_out, total_price (in cents). Returns 409 conflict if dates overlap with existing bookings.
Args:
property_id (string): Property UUID (required)
guest_name (string): Full guest name (required)
check_in (date): Check-in date YYYY-MM-DD (required)
check_out (date): Check-out date YYYY-MM-DD (required)
total_price (number): Total price in cents (required)
guest_email, guest_phone, guests, currency, payment_mode, notes (optional)
Returns: Created booking object with status "pending".
Examples:
"Book the villa for Maria, July 5-10, €750" → rizerve_create_booking({ property_id: "550e...", guest_name: "Maria P.", check_in: "2026-07-05", check_out: "2026-07-10", total_price: 75000 })
Inputs: check_in (required), check_out (required), guest_name (required), property_id (required), +6 more.
rizerve_create_propertyCreate Rizerve PropertyC
Create a new property listing.
Required fields: title, price_per_night (in cents). Optional: description, location, public_slug (auto-generated if omitted), bedrooms, bathrooms, max_guests, amenities, minimum_stay, check_in_time, check_out_time, extra_fee, extra_fee_type, theme_color, latitude, longitude, main_site_url.
Args:
title (string): Property title (required)
price_per_night (number): Price in cents, e.g. 15000 = €150.00 (required)
All other fields optional (see schema)
Returns: Created property object with generated id and public_slug.
Examples:
"Add a new villa in Crete" → rizerve_create_property({ title: "Cretan Sunset Villa", price_per_night: 12000, location: "Crete, Greece", bedrooms: 3, max_guests: 6 })
Inputs: name (required), price_per_night (required), bedrooms, currency, +15 more.
rizerve_delete_ical_feedDelete iCal FeedADestructiveIdempotent
Remove an imported iCal feed. Imported dates from this feed are cleared.
Args:
slug (string): Property public slug
feed_id (string): iCal feed UUID to delete
response_format ('markdown' | 'json'): Output format (default: 'markdown')
Examples:
"Remove the Airbnb calendar connection" → rizerve_delete_ical_feed({ slug: "beachfront-villa", feed_id: "770e8400-..." })
Inputs: slug (required), feed_id (required), response_format.
rizerve_delete_propertyDelete Rizerve PropertyADestructiveIdempotent
Delete a property permanently.
⚠️ DESTRUCTIVE: This action cannot be undone. All bookings, availability data, and iCal feeds for this property will also be deleted.
Args:
slug (string): Property public slug to delete
response_format ('markdown' | 'json'): Output format (default: 'markdown')
Examples:
"Remove the old cabin listing" → rizerve_delete_property({ slug: "old-cabin" })
Inputs: slug (required), response_format.
rizerve_export_icalGet iCal Export URLARead-onlyIdempotent
Get a property's public iCal feed URL for importing into OTAs (Airbnb, VRBO, Booking.com).
This is the URL you give to external platforms so they can read Rizerve's calendar.
Args:
slug (string): Property public slug
response_format ('markdown' | 'json'): Output format (default: 'markdown')
Returns: Public iCal URL for the property.
Examples:
"Get the iCal URL to share with Airbnb" → rizerve_export_ical({ slug: "beachfront-villa" })
Inputs: slug (required), response_format.
rizerve_get_availabilityCheck Property AvailabilityARead-onlyIdempotent
Check availability for a property over a date range.
Returns available/blocked dates with reasons. Also returns overall availability status (true/false) for the entire range.
Args:
slug (string): Property public slug
check_in (date): Start date YYYY-MM-DD (required)
check_out (date): End date YYYY-MM-DD (required)
response_format ('markdown' | 'json'): Output format (default: 'markdown')
Returns: Availability data with total_nights, available_nights, blocked_dates, and overall available flag.
Examples:
"Is the villa available July 5-10?" → rizerve_get_availability({ slug: "beachfront-villa", check_in: "2026-07-05", check_out: "2026-07-10" })
Inputs: slug (required), check_in (required), check_out (required), response_format.
rizerve_get_bookingGet Rizerve BookingARead-onlyIdempotent
Get a single booking by its UUID.
Args:
id (string): Booking UUID
response_format ('markdown' | 'json'): Output format (default: 'markdown')
Returns: Full booking object with guest details, dates, pricing, and status.
Examples:
"Show me booking 660e8400-..." → rizerve_get_booking({ id: "660e8400-e29b-41d4-a716-446655440001" })
Inputs: id (required), response_format.
rizerve_get_occupancy_reportGet Occupancy ReportARead-onlyIdempotent
Get occupancy rates across properties.
Args:
period (string): Time period - "30d", "90d", "365d" (default: "30d")
property_slug (string): Filter to single property (omit for all)
response_format ('markdown' | 'json'): Output format (default: 'markdown')
Returns: Overall occupancy rate with per-property breakdown.
Examples:
"What's our occupancy this month?" → rizerve_get_occupancy_report({ period: "30d" })
"Occupancy for just the villa" → rizerve_get_occupancy_report({ property_slug: "beachfront-villa" })
Inputs: period, property_slug, response_format.
rizerve_get_propertyGet Rizerve PropertyARead-onlyIdempotent
Get a single property by its public slug.
Args:
slug (string): Property public slug (e.g. "beachfront-villa")
response_format ('markdown' | 'json'): Output format (default: 'markdown')
Returns: Full property object with all details.
Examples:
"Show me the beachfront villa property" → rizerve_get_property({ slug: "beachfront-villa" })
Error Handling:
Returns "Property with slug 'X' not found" if the slug doesn't exist. Use rizerve_list_properties to see available slugs.
Inputs: slug (required), response_format.
rizerve_get_property_statsGet Property StatisticsARead-onlyIdempotent
Get detailed statistics for a single property.
Includes page views, bookings, conversion rate, revenue, average stay length, and occupancy rate.
Args:
slug (string): Property public slug
period (string): Time period - "7d", "30d", "90d", "365d", or "YYYY-MM-DD/YYYY-MM-DD" (default: "30d")
response_format ('markdown' | 'json'): Output format (default: 'markdown')
Returns: Property stats object with all metrics.
Examples:
"How's the villa doing this month?" → rizerve_get_property_stats({ slug: "beachfront-villa", period: "30d" })
"Show me villa stats for all of 2026" → rizerve_get_property_stats({ slug: "beachfront-villa", period: "2026-01-01/2026-12-31" })
Inputs: slug (required), period, response_format.
rizerve_get_revenue_reportGet Revenue ReportARead-onlyIdempotent
Get revenue report across all properties with breakdown by period or property.
Args:
period (string): Time period - "7d", "30d", "90d", "365d" (default: "30d")
group_by (string): "day", "week", "month", or "property" (default: "month")
response_format ('markdown' | 'json'): Output format (default: 'markdown')
Returns: Total revenue with breakdown.
Examples:
"How much did we make this month?" → rizerve_get_revenue_report({ period: "30d" })
"Revenue by property this year" → rizerve_get_revenue_report({ period: "365d", group_by: "property" })
Inputs: period, group_by, response_format.
rizerve_import_ical_feedImport iCal FeedA
Import an external iCal feed for auto-sync. The system will sync it within a few minutes.
Use this to pull calendars from Airbnb, VRBO, Booking.com, etc. into Rizerve.
Args:
slug (string): Property public slug
url (string): External iCal feed URL (required)
source (string): Label like "airbnb", "booking", "vrbo"
response_format ('markdown' | 'json'): Output format (default: 'markdown')
Returns: Created feed object.
Examples:
"Connect the Airbnb calendar to my villa" → rizerve_import_ical_feed({ slug: "beachfront-villa", url: "https://www.airbnb.com/calendar/ical/12345.ics", source: "airbnb" })
Inputs: url (required), slug (required), source, response_format.
rizerve_list_bookingsList Rizerve BookingsARead-onlyIdempotent
List bookings across all properties with optional filters.
Supports filtering by status, property, and date range. Results are paginated.
Args:
page (number): Page number (default: 1)
limit (number): Items per page, max 100 (default: 20)
status (string): Filter by status: pending, confirmed, cancelled, completed
property_slug (string): Filter by property slug
check_in_from (date): Show bookings from this date (YYYY-MM-DD)
check_in_to (date): Show bookings up to this date (YYYY-MM-DD)
response_format ('markdown' | 'json'): Output format (default: 'markdown')
Returns: Paginated booking list with full guest details, pricing, and status.
Examples:
"Show all confirmed bookings" → rizerve_list_bookings({ status: "confirmed" })
"What bookings check in this week?" → rizerve_list_bookings({ check_in_from: "2026-06-27", check_in_to: "2026-07-04" })
"Show pending bookings for the villa" → rizerve_list_bookings({ property_slug: "beachfront-villa", status: "pending" })
Inputs: page, limit, status, check_in_to, +3 more.
rizerve_list_ical_feedsList iCal FeedsARead-onlyIdempotent
List external iCal feeds imported for a property.
Shows feed URLs, sources (Airbnb, Booking.com, etc.), and last sync times.
Args:
slug (string): Property public slug
response_format ('markdown' | 'json'): Output format (default: 'markdown')
Returns: Array of iCal feed objects with sync status.
Examples:
"What iCal feeds are connected to the villa?" → rizerve_list_ical_feeds({ slug: "beachfront-villa" })
Inputs: slug (required), response_format.
rizerve_list_propertiesList Rizerve PropertiesARead-onlyIdempotent
List all properties owned by the authenticated account.
This tool returns properties with full details including pricing (in cents), amenities, availability settings, and branding configuration.
Args:
page (number): Page number, 1-based (default: 1)
limit (number): Items per page, max 100 (default: 20)
published_only (boolean): Filter to published only (default: false)
response_format ('markdown' | 'json'): Output format (default: 'markdown')
Returns: For JSON format: Paginated response with { data: Property[], meta: { total, page, limit } } For markdown format: Formatted list with property details
Examples:
"Show all my properties" → rizerve_list_properties()
"Show published properties" → rizerve_list_properties({ published_only: true })
"Get properties as JSON" → rizerve_list_properties({ response_format: 'json' })
Inputs: page, limit, published_only, response_format.
rizerve_update_booking_statusUpdate Booking StatusADestructiveIdempotent
Update a booking's status.
Valid transitions:
pending → confirmed, cancelled
confirmed → cancelled, completed
cancelled → (terminal, no further transitions)
completed → (terminal, no further transitions)
Cancelling unblocks the calendar dates. Confirming keeps them blocked.
Args:
id (string): Booking UUID
status (string): New status
response_format ('markdown' | 'json'): Output format (default: 'markdown')
Examples:
"Confirm Maria's booking" → rizerve_update_booking_status({ id: "660e...", status: "confirmed" })
"Cancel the pending booking" → rizerve_update_booking_status({ id: "660e...", status: "cancelled" })
Inputs: id (required), status (required), response_format.
rizerve_update_propertyUpdate Rizerve PropertyA
Update a property's details. Send only the fields you want to change — omitted fields are left unchanged.
Args:
slug (string): Property public slug
Any property fields to update (title, description, price_per_night, is_published, etc.)
response_format ('markdown' | 'json'): Output format (default: 'markdown')
Examples:
"Change the villa price to €120" → rizerve_update_property({ slug: "beachfront-villa", price_per_night: 12000 })
"Publish the mountain cabin" → rizerve_update_property({ slug: "mountain-cabin", is_published: true })
Inputs: slug (required), name, bedrooms, latitude, +16 more.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 19 tools
Each tool targets a distinct resource and action. For example, rizerve_block_date and rizerve_batch_set_availability are clearly differentiated by scope (single vs. batch). The booking and property tools form clear CRUD sets with no overlap.
All tools follow the consistent pattern 'rizerve_verb_noun', using standard verbs like create, get, list, update, delete, block, import, export. No mixing of styles or ambiguous verbs.
19 tools is appropriate for a property management server, covering properties, bookings, availability, iCal feeds, reports, and stats without excessive granularity.
The tool set covers core CRUD for properties and bookings, plus availability management and reports. A minor gap is the lack of a tool to update booking details beyond status (e.g., dates, guest name).
Maintenance
Related MCP Connectors
Hotel booking MCP server. Search, book, and manage reservations across 250K+ properties worldwide.
Official MCP server for MAQAMI, a hotel and flight booking platform with 3M+ hotels. Search live hotel rates and flights, look up places, airports and hotel details, then prebook and book. Remote Streamable HTTP endpoint, no API key required.
Hosted MCP server connecting AI assistants to 9,000+ apps and 40,000+ actions via Zapier.
Airbnb MCP server for short-term rental data: occupancy, ADR, RevPAR, revenue, comps, live rates
Related MCP Servers
AlicenseBqualityBmaintenanceMCP server for the Hostkit API, enabling management of properties, reservations, guests, invoices, and other property operations.36MIT- AlicenseBqualityAmaintenanceMCP server for Guesty property management. Manage reservations, guests, messaging, financials, listings, and operations via AI clients.43100 npm6MIT
- AlicenseNot gradedqualityDmaintenanceMCP server that connects AI assistants to the TehProf Booking platform for checking real-time availability and managing reservations.MIT
- FlicenseAqualityDmaintenanceA read-only MCP server that lets AI assistants query the WebHotelier REST API for live hotel data, including property info, room availability, rates, calendars, and offers via natural language tools.8-