SynXis CRS MCP Server
MCP server for SynXis CRS (Central Reservation System) integration.
Version: 0.2.0 Status: Standalone FastMCP server
Quick Links
- Overview
- Capabilities
- Quick Start
- MCP Server Configuration
- Tool Reference
- Configuration
- Development
- Installation via Claude Code marketplace
Installation via Claude Code marketplace
This repo is packaged as a Claude Code plugin. Register the www-mcp-servers marketplace with Claude Code, then install the synxis-crs plugin to expose the slash commands (/synxis-crs-lookup, /synxis-crs-availability, /synxis-crs-reservation) and connect to the running MCP server at http://localhost:3046/mcp. The plugin self-references its colocated .mcp.json, so no additional client configuration is required.
Quality & CI
Crackerjack is the standard quality-control and CI/CD gate for SynXis CRS MCP changes. Local verification should mirror the Crackerjack workflow.
Overview
SynXis CRS MCP exposes central-reservations workflows through a FastMCP server. It is designed for agent-facing hotel search, availability, rate lookup, and reservation creation while keeping provider credentials, request validation, and transport concerns in a narrow integration boundary.
The server is intentionally separate from synxis-pms-mcp. CRS owns shopping and booking workflows that belong to the central reservation system; PMS owns property operations such as guest, room, check-in, check-out, and folio workflows.
Capabilities
Tools (4 MCP tools):
- Property search (
search_properties): find hotels by city, state, region, or other location text - Availability lookup (
get_availability): check available room types for a property and date range - Rate lookup (
get_rates): retrieve rate plans, totals, currency, and cancellation policy details - Reservation creation (
create_reservation): create a booking from property, room type, rate plan, dates, and guest details
Plus runtime features:
- Mock mode: exercise the MCP tool surface without live SynXis credentials
- HTTP health routes:
/healthand/healthzfor MCP client and process supervision checks
Quick Start
Prerequisites
- Python 3.13+
- UV package manager
- SynXis CRS OAuth2 credentials for live API access
Local Setup
git clone https://github.com/lesleslie/synxis-crs-mcp.git
cd synxis-crs-mcp
uv sync --group dev
Run In Mock Mode
Mock mode is the safest way to validate client wiring and tool behavior before using live credentials.
export SYNXIS_CRS_MOCK_MODE=true
uv run synxis-crs-mcp start
uv run synxis-crs-mcp health
Run With Live Credentials
export SYNXIS_CRS_CLIENT_ID="your-client-id"
export SYNXIS_CRS_CLIENT_SECRET="your-client-secret"
export SYNXIS_CRS_HOTEL_ID="your-hotel-or-chain-id"
uv run synxis-crs-mcp start
The default HTTP bind is 127.0.0.1:3046.
CLI Commands
The CLI is built with mcp-common and provides the standard lifecycle command surface.
uv run synxis-crs-mcp start # Start the HTTP MCP server
uv run synxis-crs-mcp stop # Stop the managed server process
uv run synxis-crs-mcp restart # Restart the managed server process
uv run synxis-crs-mcp status # Show process status
uv run synxis-crs-mcp health # Run the local health probe
MCP Server Configuration
Claude / Codex Style Configuration
Add the server to an MCP client configuration:
{
"mcpServers": {
"synxis-crs": {
"command": "uv",
"args": ["run", "synxis-crs-mcp", "start"],
"cwd": "/Users/les/Projects/synxis-crs-mcp",
"env": {
"SYNXIS_CRS_MOCK_MODE": "true"
}
}
}
}
For live access, replace mock mode with credential environment variables supplied by your secret manager.
Health Checks
curl http://127.0.0.1:3046/health
curl http://127.0.0.1:3046/healthz
Tool Reference
| Tool | Purpose | Required Inputs |
|---|---|---|
search_properties |
Search hotels by location | location |
get_availability |
Check room availability for a property | property_id, start_date, end_date |
get_rates |
Retrieve rates for a property and date range | property_id, start_date, end_date (optional: room_type) |
create_reservation |
Create a hotel reservation | property_id, room_type, rate_plan_id, start_date, end_date, guest fields |
Dates use YYYY-MM-DD. Tool responses follow a consistent ToolResponse shape:
{
"success": true,
"message": "Found 2 properties in Miami Beach",
"data": {},
"error": null,
"next_steps": []
}
Configuration
Committed defaults live in settings/synxis-crs.yaml. Runtime overrides should come from environment variables or a local .env file that is not committed.
| Setting | Environment Variable | Default |
|---|---|---|
| Client ID | SYNXIS_CRS_CLIENT_ID |
empty |
| Client secret | SYNXIS_CRS_CLIENT_SECRET |
empty |
| Base URL | SYNXIS_CRS_BASE_URL |
https://api.synxis.com/crs/v1 |
| Hotel or chain ID | SYNXIS_CRS_HOTEL_ID |
empty |
| Mock mode | SYNXIS_CRS_MOCK_MODE |
false |
| Timeout | SYNXIS_CRS_TIMEOUT |
30.0 |
| Max retries | SYNXIS_CRS_MAX_RETRIES |
3 |
| HTTP host | SYNXIS_CRS_HTTP_HOST |
127.0.0.1 |
| HTTP port | SYNXIS_CRS_HTTP_PORT |
3046 |
| Log level | SYNXIS_CRS_LOG_LEVEL |
INFO |
| JSON logs | SYNXIS_CRS_LOG_JSON |
true |
Project Structure
synxis_crs_mcp/
cli.py # mcp-common lifecycle CLI
client.py # SynXis CRS client boundary
config.py # Pydantic settings and logging
models.py # Typed CRS domain models
server.py # FastMCP application factory
tools/crs_tools.py # Registered MCP tools
settings/
synxis-crs.yaml # Committed defaults
tests/
test_schema_validation.py
Development
uv sync --group dev
uv run pytest
uv run ruff check synxis_crs_mcp tests
uv run ruff format synxis_crs_mcp tests
Use direct pytest commands for targeted debugging:
uv run pytest tests/test_schema_validation.py -v
Security Notes
- Do not commit SynXis credentials, bearer tokens, tenant identifiers, or guest payment data.
- Keep examples and tests on mock mode or scrubbed fixtures.
- Treat reservation payloads and guest contact fields as sensitive operational data.
- Keep SynXis URLs, ports, and tenant settings configurable rather than hard-coded in new code.
Built on Oneiric for runtime configuration and mcp-common for the FastMCP baseline. Crackerjack gates every commit.
Metadata
Release files for synxis-crs-mcp 0.4.3
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| synxis_crs_mcp-0.4.3.tar.gz | 534.6 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| synxis_crs_mcp-0.4.3-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 559.1 kB
Release files / synxis_crs_mcp-0.4.3.tar.gz
| Download URL | synxis_crs_mcp-0.4.3.tar.gz |
|---|---|
| Size | 534.6 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
2a4090110c90f99928fa36b729c292d5c1a5d1b6830e53ea8d33fc4681ce3431
|
|
BLAKE2b-256 checksum How to use checksums |
80a01c945549042c3b51209432045e482c193200ca41cbc178b028b5506e3365
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.12.7 {"installer":{"name":"uv","version":"0.12.7","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
|
Release files / synxis_crs_mcp-0.4.3-py3-none-any.whl
| Download URL | synxis_crs_mcp-0.4.3-py3-none-any.whl |
|---|---|
| Size | 24.6 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
7946bb480a17475dcf5ded6e574d2b6a1111677680526d574e6b15a37cd5f52d
|
|
BLAKE2b-256 checksum How to use checksums |
4a830a82ad2dc64945ffa66a77e17afbe653bf3597614a8d8f27c1883e6d49d1
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.12.7 {"installer":{"name":"uv","version":"0.12.7","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
|