SynXis PMS MCP Server
Unofficial MCP server for SynXis PMS (Property Management System) API.
Version: 0.2.1 Status: Internal Bodai integration component
Quick Links
Quality & CI
Crackerjack is the standard quality-control and CI/CD gate for SynXis PMS MCP changes. Local verification should mirror the Crackerjack workflow used across the Bodai ecosystem.
Overview
SynXis PMS MCP exposes property-management workflows through a FastMCP server. It is designed for agent-facing hotel operations such as guest lookup, room status checks, check-in, check-out, and folio review while keeping provider credentials, request validation, and transport concerns in a narrow integration boundary.
The server is intentionally separate from synxis-crs-mcp. PMS owns on-property operational workflows; CRS owns central reservation shopping, rates, availability, and booking workflows.
Capabilities
Implemented tool surface:
- Guest lookup: retrieve guest profile details by guest ID
- Room status: inspect room status, type, features, floor, and occupancy
- Check-in: assign a room and complete guest arrival workflow
- Check-out: complete departure workflow and return billing summary details
- Folio lookup: retrieve charges, payments, totals, and balance information
- 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 PMS OAuth2 credentials for live API access
Local Setup
git clone https://github.com/lesleslie/synxis-pms-mcp.git
cd synxis-pms-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_PMS_MOCK_MODE=true
uv run synxis-pms-mcp start
uv run synxis-pms-mcp health
Run With Live Credentials
export SYNXIS_PMS_CLIENT_ID="your-client-id"
export SYNXIS_PMS_CLIENT_SECRET="your-client-secret"
export SYNXIS_PMS_PROPERTY_ID="your-property-id"
uv run synxis-pms-mcp start
The default HTTP bind is 127.0.0.1:3047.
CLI Commands
The CLI is built with mcp-common and provides the standard lifecycle command surface used by Bodai MCP servers.
uv run synxis-pms-mcp start # Start the HTTP MCP server
uv run synxis-pms-mcp stop # Stop the managed server process
uv run synxis-pms-mcp restart # Restart the managed server process
uv run synxis-pms-mcp status # Show process status
uv run synxis-pms-mcp health # Run the local health probe
MCP Server Configuration
Claude / Codex Style Configuration
Add the server to an MCP client configuration:
{
"mcpServers": {
"synxis-pms": {
"command": "uv",
"args": ["run", "synxis-pms-mcp", "start"],
"cwd": "/Users/les/Projects/synxis-pms-mcp",
"env": {
"SYNXIS_PMS_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:3047/health
curl http://127.0.0.1:3047/healthz
Installation via Bodai Marketplace
This repo ships a Bodai Claude Code plugin manifest (.claude-plugin/plugin.json) plus a colocated .mcp.json and three slash commands in commands/. To install via the Bodai marketplace, first register the marketplace with Claude Code, then install the plugin by name (synxis-pms). The plugin registers the MCP server over HTTP at http://localhost:3047/mcp, so start the server (uv run synxis-pms-mcp start) before invoking any command. Once installed, the slash commands /synxis-pms-property, /synxis-pms-room, and /synxis-pms-stay become available alongside the mcp__synxis-pms__* tools.
Tool Reference
| Tool | Purpose | Required Inputs |
|---|---|---|
get_guest |
Retrieve guest profile details | guest_id |
get_room_status |
Retrieve room status and room metadata | room_id |
check_in |
Check in a reservation to a room | reservation_id, room_id |
check_out |
Check out a reservation and return billing summary | reservation_id |
get_folio |
Retrieve folio charges, payments, totals, and balance | reservation_id |
Tool responses follow a consistent ToolResponse shape:
{
"success": true,
"message": "Room 1201 status: clean",
"data": {},
"error": null,
"next_steps": []
}
Configuration
Committed defaults live in settings/synxis-pms.yaml. Runtime overrides should come from environment variables or a local .env file that is not committed.
| Setting | Environment Variable | Default |
|---|---|---|
| Client ID | SYNXIS_PMS_CLIENT_ID |
empty |
| Client secret | SYNXIS_PMS_CLIENT_SECRET |
empty |
| Base URL | SYNXIS_PMS_BASE_URL |
https://api.synxis.com/pms/v1 |
| Property ID | SYNXIS_PMS_PROPERTY_ID |
empty |
| Mock mode | SYNXIS_PMS_MOCK_MODE |
false |
| Timeout | SYNXIS_PMS_TIMEOUT |
30.0 |
| Max retries | SYNXIS_PMS_MAX_RETRIES |
3 |
| HTTP host | SYNXIS_PMS_HTTP_HOST |
127.0.0.1 |
| HTTP port | SYNXIS_PMS_HTTP_PORT |
3047 |
| Log level | SYNXIS_PMS_LOG_LEVEL |
INFO |
| JSON logs | SYNXIS_PMS_LOG_JSON |
true |
Project Structure
synxis_pms_mcp/
__init__.py # Package marker + version
__main__.py # python -m synxis_pms_mcp entry point
cli.py # mcp-common lifecycle CLI
client.py # SynXis PMS client boundary
config.py # Pydantic settings and logging
models.py # Typed PMS domain models
server.py # FastMCP application factory
tools/
__init__.py # Package marker
pms_tools.py # Registered MCP tools
profiles.py # Tool profile gating
settings/
synxis-pms.yaml # Committed defaults
tests/
__init__.py # Package marker
test_example.py # Smoke fixtures
test_version_sync.py # User-Agent / version stamp guard
test_doc_drift.py # Doc-drift CI guard
__init__.py
test_example.py
unit/
test_fastmcp_version.py
test_no_direct_fastmcp_imports.py
Development
uv sync --group dev
uv run pytest
uv run ruff check synxis_pms_mcp tests
uv run ruff format synxis_pms_mcp tests
Use direct pytest commands for targeted debugging:
uv run pytest tests/test_example.py -v
Security Notes
- Do not commit SynXis credentials, bearer tokens, tenant identifiers, guest profile data, or folio/payment details.
- Keep examples and tests on mock mode or scrubbed fixtures.
- Treat check-in, check-out, room assignment, and billing payloads as sensitive operational data.
- Keep SynXis URLs, ports, and property settings configurable rather than hard-coded in new code.
Metadata
Release files for synxis-pms-mcp 0.5.1
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_pms_mcp-0.5.1.tar.gz | 506.0 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| synxis_pms_mcp-0.5.1-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 530.9 kB
Release files / synxis_pms_mcp-0.5.1.tar.gz
| Download URL | synxis_pms_mcp-0.5.1.tar.gz |
|---|---|
| Size | 506.0 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
ef911f27f0d7b589e5a02916d37eb356a8d780f1ea55b56284b554b2bb668bb2
|
|
BLAKE2b-256 checksum How to use checksums |
843903c9f138bb4be38501cd4304e092f87f74adf658200dd5473e9d2c48317a
|
| 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_pms_mcp-0.5.1-py3-none-any.whl
| Download URL | synxis_pms_mcp-0.5.1-py3-none-any.whl |
|---|---|
| Size | 24.9 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
8c0b75a82670bfd1f628c766dd63942008cebd24dac8b47982b3a0c1cba41ed8
|
|
BLAKE2b-256 checksum How to use checksums |
6442b21a629fe3b5962570c11310f1b4b60d546a38d0361f1323753cda49585b
|
| 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}
|