Skip to main content
Glama
Rizerve MCP Server

Rizerve MCP Server

Rizerve MCP Server

MCP API Node npm

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 build

Related 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

rizerve_list_properties

page, limit, published_only

List all properties with full details, prices, amenities

rizerve_get_property

slug

Get single property by its public slug

rizerve_create_property

name*, price_per_night*, location, bedrooms, amenities, ...

Create a new property listing

rizerve_update_property

slug, then any field to change

Update property fields (partial update)

rizerve_delete_property

slug

Permanently delete property + all related data ⚠️

Bookings (4 tools)

Tool

Arguments

Description

rizerve_list_bookings

status, property_slug, check_in_from, check_in_to, page, limit

List bookings with filters

rizerve_get_booking

id

Get single booking by UUID

rizerve_create_booking

property_id*, guest_name*, check_in*, check_out*, total_price*, guest_email, guest_phone, guests, notes

Create a new booking — auto-enforces minimum stay

rizerve_update_booking_status

id, status

Transition: pending→confirmed/cancelled, confirmed→cancelled/completed

Availability (3 tools)

Tool

Arguments

Description

rizerve_get_availability

slug, check_in, check_out

Check if a property is available for a date range

rizerve_block_date

slug, date, available, reason

Block or unblock a single date

rizerve_batch_set_availability

ranges[] (property_id, date_from, date_to, available, reason)

Bulk block/unblock up to 50 date ranges

iCal Feeds (4 tools)

Tool

Arguments

Description

rizerve_list_ical_feeds

slug

List imported calendar feeds (Airbnb, Booking.com, VRBO)

rizerve_import_ical_feed

slug, url, source

Import external iCal feed — auto-syncs within minutes

rizerve_export_ical

slug

Get the public iCal URL to share with OTAs

rizerve_delete_ical_feed

slug, feed_id

Remove imported feed and its dates ⚠️

Analytics (3 tools)

Tool

Arguments

Description

rizerve_get_property_stats

slug, period

Page views, bookings, conversion, revenue, occupancy

rizerve_get_revenue_report

period, group_by

Revenue breakdown by day/week/month/property

rizerve_get_occupancy_report

period, property_slug

Occupancy rates across properties

Webhooks & Guests (3 tools)

Tool

Arguments

Description

rizerve_create_webhook

url, events[]

Register webhook for booking.created, booking.status_changed, availability.updated

rizerve_list_webhooks

—

List registered webhooks with failure stats

rizerve_delete_webhook

id

Remove webhook

rizerve_lookup_guest

email

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

RIZERVE_API_KEY

required

API key from Rizerve Dashboard → Integrations → API Access

RIZERVE_API_URL

https://api.rizerve.io/v1

API base URL (change for staging/testing)

TRANSPORT

stdio

stdio for local MCP clients, http for remote access

PORT

3000

HTTP port when TRANSPORT=http


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 start

Project 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 validation

License

MIT © Osolvo Ltd

Available Tools

19 tools
rizerve_batch_set_availabilityBatch Set AvailabilityA
Idempotent

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 DateA
Idempotent

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 FeedA
DestructiveIdempotent

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 PropertyA
DestructiveIdempotent

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 URLA
Read-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 AvailabilityA
Read-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 BookingA
Read-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 ReportA
Read-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 PropertyA
Read-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 StatisticsA
Read-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 ReportA
Read-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:

Inputs: url (required), slug (required), source, response_format.

rizerve_list_bookingsList Rizerve BookingsA
Read-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 FeedsA
Read-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 PropertiesA
Read-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 StatusA
DestructiveIdempotent

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

    A3.9/5.0

    Scored across 19 tools

    Disambiguation5/5

    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.

    Naming Consistency5/5

    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.

    Tool Count5/5

    19 tools is appropriate for a property management server, covering properties, bookings, availability, iCal feeds, reports, and stats without excessive granularity.

    Completeness4/5

    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

    ActivityInactive
    ResponsivenessNo recent community issues

    Related MCP Connectors

    Related MCP Servers

    • A
      license
      B
      quality
      B
      maintenance
      MCP server for the Hostkit API, enabling management of properties, reservations, guests, invoices, and other property operations.
      36
      MIT
    • A
      license
      Not graded
      quality
      D
      maintenance
      MCP server that connects AI assistants to the TehProf Booking platform for checking real-time availability and managing reservations.
      MIT
    • F
      license
      A
      quality
      D
      maintenance
      A 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
      -