Rizerve MCP Server
Install
git clone https://github.com/panoskiriakopoulos-sys/rizerve-mcp-server.git
cd rizerve-mcp-server
npm install && npm run build
The Rizerve MCP Server gives AI assistants direct, operational access to the Rizerve direct booking platform through natural language. Built on the Model Context Protocol (MCP) — the open standard that allows AI models to connect to external tools and data sources — this server exposes 19 tools covering properties, bookings, availability, iCal sync, analytics, webhooks, and guest management. It works with Claude Desktop, Cursor, Windsurf, and any MCP-compatible client.
Key Takeaways
- 19 tools covering the full Rizerve API — properties, bookings, availability, iCal feeds, analytics, webhooks, and guest lookup.
- Works with Claude Desktop, Cursor, Windsurf, and any stdio or HTTP MCP client.
- Built in TypeScript, targets Rizerve API v1, runs locally or as a remote HTTP server.
- Requires a Rizerve API key and Node.js 18 or higher.
What You Can Do With the Rizerve MCP Server
Once connected, an MCP-enabled AI assistant can manage a Rizerve account entirely through conversation — no dashboard required for routine operations. The server translates natural language requests into Rizerve API calls and returns structured results the model can read, summarize, or act on.
Practical examples of what a connected assistant can handle:
- “Show me all my properties and their current nightly rates”
- “What bookings check in this week across all properties?”
- “Create a new property in Crete for €120 per night with 2 bedrooms”
- “Is the beach villa available July 5 to 10?”
- “Block August 1 through 15 for maintenance on all properties”
- “Import my Airbnb calendar into the villa”
- “What was our occupancy rate last month?”
- “Show me all revenue for Q2 broken down by property”
- “Find all bookings from this guest email address”
- “Create a webhook that fires when a new booking is created”
Quick Start
Requirements
Node.js 18 or higher is required. A Rizerve account and API key are required — the key is available in the Rizerve Dashboard under Integrations → API Access and follows the format rz_xxxxxxxxxxxxxxxx.
Installation
git clone https://github.com/panoskiriakopoulos-sys/rizerve-mcp-server.git
cd rizerve-mcp-server
npm install
npm run build
Set the API Key and Run
# Set your API key
export RIZERVE_API_KEY="rz_xxxxxxxxxxxxxxxx"
# Run via stdio (for Claude Desktop, Cursor, Windsurf)
npm start
# Or run as an HTTP server for remote MCP clients
TRANSPORT=http PORT=3000 npm start
Client Configuration
Claude Desktop
Add the following to your claude_desktop_config.json file, replacing the path and API key with your own values:
{
"mcpServers": {
"rizerve": {
"command": "node",
"args": ["/path/to/rizerve-mcp-server/dist/index.js"],
"env": {
"RIZERVE_API_KEY": "rz_xxxxxxxxxxxxxxxx"
}
}
}
}
Once saved and Claude Desktop is restarted, the Rizerve tools appear automatically in the tool list. No further configuration is needed.
Cursor, Windsurf, and Other MCP Clients
{
"mcpServers": {
"rizerve": {
"command": "node",
"args": ["dist/index.js"],
"cwd": "/path/to/rizerve-mcp-server",
"env": {
"RIZERVE_API_KEY": "rz_xxxxxxxxxxxxxxxx"
}
}
}
}
Remote HTTP Transport
For MCP clients that connect over HTTP rather than stdio — useful for shared team environments or hosted deployments — start the server with the HTTP transport flag:
TRANSPORT=http PORT=3000 npm start
The server will listen on the specified port and accept standard MCP-over-HTTP requests.
Environment Variables
| Variable | 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 — override for staging or local testing |
TRANSPORT | stdio | Use stdio for local MCP clients, http for remote access |
PORT | 3000 | HTTP port when running in HTTP transport mode |
Full Tool Reference
The server exposes 19 tools across six functional areas. All tools return raw JSON from the Rizerve API v1, transparently wrapped for MCP tool compatibility. All prices are in the property’s configured currency as face-value numbers, not cents.
Properties — 5 Tools
| Tool | Key Arguments | Description |
|---|---|---|
rizerve_list_properties | page, limit, published_only | List all properties with full details, pricing, and amenities |
rizerve_get_property | slug | Get a 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 | Partial update — only supplied fields are changed |
rizerve_delete_property | slug | Permanently deletes property and all related data ⚠️ |
Bookings — 4 Tools
| Tool | Key Arguments | Description |
|---|---|---|
rizerve_list_bookings | status, property_slug, check_in_from, check_in_to, page, limit | List bookings with date and status filters |
rizerve_get_booking | id | Get a single booking by UUID |
rizerve_create_booking | property_id*, guest_name*, check_in*, check_out*, total_price*, guest_email, guests, notes | Create a booking — minimum stay rules are automatically enforced |
rizerve_update_booking_status | id, status | Transition status: pending → confirmed / cancelled, confirmed → cancelled / completed |
Availability — 3 Tools
| Tool | Key Arguments | Description |
|---|---|---|
rizerve_get_availability | slug, check_in, check_out | Check whether a property is available for a given date range |
rizerve_block_date | slug, date, available, reason | Block or unblock a single date with an optional reason label |
rizerve_batch_set_availability | ranges[] with property_id, date_from, date_to, available, reason | Bulk block or unblock up to 50 date ranges in a single call |
iCal Feeds — 4 Tools
| Tool | Key Arguments | Description |
|---|---|---|
rizerve_list_ical_feeds | slug | List all imported calendar feeds (Airbnb, Booking.com, VRBO) |
rizerve_import_ical_feed | slug, url, source | Import an external iCal feed — syncs automatically within minutes |
rizerve_export_ical | slug | Get the public iCal URL to share with OTAs for outbound calendar sync |
rizerve_delete_ical_feed | slug, feed_id | Remove an imported feed and its blocked dates ⚠️ |
Analytics — 3 Tools
| Tool | Key Arguments | Description |
|---|---|---|
rizerve_get_property_stats | slug, period | Page views, booking count, conversion rate, revenue, and occupancy for a property |
rizerve_get_revenue_report | period, group_by | Revenue breakdown by day, week, month, or property |
rizerve_get_occupancy_report | period, property_slug | Occupancy rates across one or all properties for a given period |
Webhooks and Guest Lookup — 4 Tools
| Tool | Key Arguments | Description |
|---|---|---|
rizerve_create_webhook | url, events[] | Register a webhook endpoint for booking.created, booking.status_changed, or availability.updated |
rizerve_list_webhooks | — | List all registered webhooks with failure statistics |
rizerve_delete_webhook | id | Remove a registered webhook |
rizerve_lookup_guest | email | Find all bookings associated with a guest’s email address |
Project Structure
The server is written in TypeScript and organized by functional domain. Each tool group has its own file under src/tools/, with matching Zod validation schemas under src/schemas/. The API client in src/services/api-client.ts handles HTTP communication, response wrapping, and error normalization. The entry point at src/index.ts registers all tools with the MCP server instance.
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
│ ├── bookings.ts
│ ├── availability.ts
│ ├── ical.ts
│ └── analytics.ts
└── schemas/
├── common.ts
├── properties.ts
├── bookings.ts
├── availability.ts
├── ical.ts
└── analytics.ts
Development
# Install dependencies
npm install
# Build TypeScript to dist/
npm run build
# Watch mode for active development
npm run dev
# Run with debug logging
DEBUG=* npm start
API Compatibility and Response Format
This server targets Rizerve API v1. All responses are raw JSON arrays or objects from the API, transparently wrapped for MCP tool compatibility — the model receives the same data structure a direct API call would return. The full API reference is available in the repository at rizerve-api-docs.md.
The source code and issue tracker are on GitHub at github.com/panoskiriakopoulos-sys/rizerve-mcp-server. Licensed MIT. To get started, generate an API key from the Rizerve Dashboard under Integrations → API Access, clone the repository, and add the server config to your MCP client — the 19 tools will be available in your next session.
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 [email protected]“
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