A PMS (Property Management System) for hotels and event spaces, set up by your AI assistant.
Maintain this server? Claim it
Call this server's tools from your browser. Nothing to install.
Requests go through mcptry because browsers can't call most MCP servers directly. Header values are sent to the server for that request only and are never stored or logged.
Tool list from our last check. Connect live to refresh it.
Adds a picture from a public web address (PNG, JPEG or WebP, up to 10 MB) to the booking page: the hotel, or one room type. 40 a day while testing. Needs the owner's sign-in.
Public https address of the picture
true to make it the main photo
Short caption
Room type code or name, for a room-type photo; leave out for the hotel
This tool isn't marked read-only, so it may change something on the server or in an account you connected.
Pick your client. Values in capitals, like YOUR_TOKEN, are yours to fill in.
Run in a terminal
claude mcp add --transport http hotel-pms https://guestlogic.ai/mcp
Adds a picture from a public web address (PNG, JPEG or WebP, up to 10 MB) to the booking page: the hotel, or one room type. 40 a day while testing. Needs the owner's sign-in.
| Argument | Type | Description |
|---|---|---|
| url* | string | Public https address of the picture |
| cover | boolean | true to make it the main photo |
| caption | string | Short caption |
| room_type | string | Room type code or name, for a room-type photo; leave out for the hotel |
{
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"description": "Public https address of the picture"
},
"cover": {
"type": "boolean",
"description": "true to make it the main photo"
},
"caption": {
"type": "string",
"description": "Short caption"
},
"room_type": {
"type": "string",
"description": "Room type code or name, for a room-type photo; leave out for the hotel"
}
},
"additionalProperties": false
}Asks the Guest Logic team to connect card payments, Expedia and Booking.com, or to finish the whole setup by hand. Connected within 24 hours. Needs the owner's sign-in.
| Argument | Type | Description |
|---|---|---|
| note | string | Anything the team should know |
| what* | string |
{
"type": "object",
"required": [
"what"
],
"properties": {
"note": {
"type": "string",
"description": "Anything the team should know"
},
"what": {
"enum": [
"cards",
"channels",
"white_glove"
],
"type": "string"
}
},
"additionalProperties": false
}The last runs of the company's automations: when, result, error. Needs the owner's sign-in.
No arguments.
{
"type": "object",
"required": [],
"properties": {},
"additionalProperties": false
}Rooms free each night by room type for a date range (up to 31 days). Needs the owner's sign-in.
| Argument | Type | Description |
|---|---|---|
| to* | string | Last night YYYY-MM-DD |
| from* | string | First night YYYY-MM-DD |
{
"type": "object",
"required": [
"from",
"to"
],
"properties": {
"to": {
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$",
"description": "Last night YYYY-MM-DD"
},
"from": {
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$",
"description": "First night YYYY-MM-DD"
}
},
"additionalProperties": false
}Confirms or changes one setup step. step and values: hotel {name, phone, email} · taxes {state, tourism, other} as percentages · checkin {check_in, check_out} as HH:MM · policies {cancellation, deposit, noshow, pets, smoking} · room_types {CODE: {name, sleeps}} · rates {CODE: nightly rate} · rooms (confirm the room list) · ooo (no out-of-order rooms) · people (just the owner for now) · bookings (no bookings on hand). Needs the owner's sign-in.
| Argument | Type | Description |
|---|---|---|
| step* | string | |
| values | object | The values for that step (see the description) |
{
"type": "object",
"required": [
"step"
],
"properties": {
"step": {
"enum": [
"hotel",
"taxes",
"checkin",
"policies",
"room_types",
"rates",
"rooms",
"ooo",
"people",
"bookings"
],
"type": "string"
},
"values": {
"type": "object",
"description": "The values for that step (see the description)"
}
},
"additionalProperties": false
}The owner's links to drop files you cannot send as text (a scanned PDF) and to manage photos. Needs the owner's sign-in.
No arguments.
{
"type": "object",
"required": [],
"properties": {},
"additionalProperties": false
}For one day: arrivals, departures, in house, rooms by housekeeping status, rooms out of order. Needs the owner's sign-in.
| Argument | Type | Description |
|---|---|---|
| date | string | Day YYYY-MM-DD (default today) |
{
"type": "object",
"required": [],
"properties": {
"date": {
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$",
"description": "Day YYYY-MM-DD (default today)"
}
},
"additionalProperties": false
}E-mails a sign-in to an employee or a manager. Needs the owner's sign-in.
| Argument | Type | Description |
|---|---|---|
| role | string | |
| email* | string | Their e-mail |
| full_name* | string | Their full name |
{
"type": "object",
"required": [
"email",
"full_name"
],
"properties": {
"role": {
"enum": [
"employee",
"manager"
],
"type": "string"
},
"email": {
"type": "string",
"description": "Their e-mail"
},
"full_name": {
"type": "string",
"description": "Their full name"
}
},
"additionalProperties": false
}The company's automations: what each sends, when, and whether it is on. Needs the owner's sign-in.
No arguments.
{
"type": "object",
"required": [],
"properties": {},
"additionalProperties": false
}Loads the stays read from the reports into the hotel. First call without confirm to see the rows that need a decision; show them to the owner; then call with confirm true. Needs the owner's sign-in.
| Argument | Type | Description |
|---|---|---|
| confirm | boolean | true to load |
{
"type": "object",
"required": [],
"properties": {
"confirm": {
"type": "boolean",
"description": "true to load"
}
},
"additionalProperties": false
}The hotel's details: name, address, phone, rooms, check-in and check-out, taxes, and whether it is in test mode. Needs the owner's sign-in.
No arguments.
{
"type": "object",
"required": [],
"properties": {},
"additionalProperties": false
}Files the request to go live once the legal name, address, billing e-mail and the owner's accepted agreement are in; otherwise names what is missing. The Guest Logic team presses the last button. Needs the owner's sign-in.
No arguments.
{
"type": "object",
"required": [],
"properties": {},
"additionalProperties": false
}The legal name, mailing address, billing e-mail, website and time zone. Send only what you have. Needs the owner's sign-in.
| Argument | Type | Description |
|---|---|---|
| address | object | |
| website | string | Website |
| time_zone | string | Time zone, e.g. America/New_York |
| legal_name | string | Legal name |
| billing_email | string | Billing e-mail |
{
"type": "object",
"required": [],
"properties": {
"address": {
"type": "object",
"required": [],
"properties": {
"zip": {
"type": "string",
"description": "ZIP code"
},
"city": {
"type": "string",
"description": "City"
},
"state": {
"type": "string",
"description": "State, two letters"
},
"street": {
"type": "string",
"description": "Street"
}
},
"additionalProperties": false
},
"website": {
"type": "string",
"description": "Website"
},
"time_zone": {
"type": "string",
"description": "Time zone, e.g. America/New_York"
},
"legal_name": {
"type": "string",
"description": "Legal name"
},
"billing_email": {
"type": "string",
"description": "Billing e-mail"
}
},
"additionalProperties": false
}The positions hired for (shown on the company's careers page), the hiring e-mail and the hiring phone. Needs the owner's sign-in.
| Argument | Type | Description |
|---|---|---|
| positions | array | |
| hiring_email | string | Hiring e-mail |
| hiring_phone | string | Hiring phone |
{
"type": "object",
"required": [],
"properties": {
"positions": {
"type": "array",
"items": {
"type": "object",
"required": [
"title"
],
"properties": {
"title": {
"type": "string",
"description": "Position"
},
"hiring_now": {
"type": "boolean"
}
},
"additionalProperties": false
},
"maxItems": 50
},
"hiring_email": {
"type": "string",
"description": "Hiring e-mail"
},
"hiring_phone": {
"type": "string",
"description": "Hiring phone"
}
},
"additionalProperties": false
}Sets the company's logo from a public web address (PNG, JPEG or WebP, up to 10 MB). Needs the owner's sign-in.
| Argument | Type | Description |
|---|---|---|
| url* | string | Public https address of the logo |
{
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"description": "Public https address of the logo"
}
},
"additionalProperties": false
}E-mails a sign-in to each team member, up to 25 a call. Reports the result per person. Needs the owner's sign-in.
| Argument | Type | Description |
|---|---|---|
| members* | array |
{
"type": "object",
"required": [
"members"
],
"properties": {
"members": {
"type": "array",
"items": {
"type": "object",
"required": [
"name",
"email"
],
"properties": {
"name": {
"type": "string",
"description": "Full name"
},
"role": {
"enum": [
"employee",
"manager"
],
"type": "string"
},
"email": {
"type": "string",
"description": "E-mail"
},
"mobile": {
"type": "string",
"description": "Mobile"
}
},
"additionalProperties": false
},
"maxItems": 25,
"minItems": 1
}
},
"additionalProperties": false
}The event spaces and how many each holds, shown on quotes and the inquiry form. Replaces the list. Needs the owner's sign-in.
| Argument | Type | Description |
|---|---|---|
| notes | string | Anything else about the spaces |
| spaces | array |
{
"type": "object",
"required": [],
"properties": {
"notes": {
"type": "string",
"description": "Anything else about the spaces"
},
"spaces": {
"type": "array",
"items": {
"type": "object",
"required": [
"name"
],
"properties": {
"name": {
"type": "string",
"description": "Space name"
},
"capacity": {
"type": "integer",
"minimum": 0
}
},
"additionalProperties": false
},
"maxItems": 50
}
},
"additionalProperties": false
}Every fact this company needs, each Done, Missing, Needs us or Optional, with the tool that fills each missing one. Needs the owner's sign-in.
No arguments.
{
"type": "object",
"required": [],
"properties": {},
"additionalProperties": false
}Creates the company in Guest Logic (a hotel in free test mode) and e-mails the owner one approval link. Use only when the owner has no Guest Logic account. The reply names everything still missing and the tool that fills each. No sign-in needed.
| Argument | Type | Description |
|---|---|---|
| kind* | string | What the business is |
| email* | string | Owner e-mail (becomes the sign-in) |
| tools* | array | The tools wanted; pms only with kind hotel |
| mobile | string | Owner mobile number, if you have it; a hotel owner is asked at the approval link otherwise |
| website | string | Company website |
| time_zone | string | Time zone, e.g. America/New_York |
| legal_name | string | Legal name of the company |
| owner_name* | string | Owner full name |
| business_name* | string | Company name: letters, digits, spaces and & ' . - only, up to 60 characters |
One stay by its confirmation number. Needs the owner's sign-in.
| Argument | Type | Description |
|---|---|---|
| confirmation* | string | Confirmation number |
{
"type": "object",
"required": [
"confirmation"
],
"properties": {
"confirmation": {
"type": "string",
"description": "Confirmation number"
}
},
"additionalProperties": false
}Stays touching a date range (up to 31 days): confirmation, guest, dates, room, type, status, rate, source. Up to 200 rows a call; use page for more. Needs the owner's sign-in.
| Argument | Type | Description |
|---|---|---|
| to* | string | Last night YYYY-MM-DD |
| from* | string | First night YYYY-MM-DD |
| page | integer | |
| status | string |
{
"type": "object",
"required": [
"from",
"to"
],
"properties": {
"to": {
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$",
"description": "Last night YYYY-MM-DD"
},
"from": {
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$",
"description": "First night YYYY-MM-DD"
},
"page": {
"type": "integer",
"minimum": 1
},
"status": {
"enum": [
"booked",
"inhouse",
"checkedout",
"cancelled",
"noshow"
],
"type": "string"
}
},
"additionalProperties": false
}Rooms and stays you already extracted, as rows. Guest Logic applies them by the same rules as an uploaded report. Needs the owner's sign-in.
| Argument | Type | Description |
|---|---|---|
| rooms | array | |
| stays | array |
{
"type": "object",
"required": [],
"properties": {
"rooms": {
"type": "array",
"items": {
"type": "object",
"required": [
"room_number",
"room_type"
],
"properties": {
"floor": {
"type": "integer"
},
"building": {
"type": "string",
"description": "Building, if any"
},
"room_type": {
"type": "string",
"description": "Room type name or code"
},
"room_number": {
"type": "string",
"description": "Room number"
}
},
"additionalProperties": false
},
"maxItems": 2000
},
"stays": {
"type": "array",
"items": {
"type": "object",
"required": [
"confirmation",
"check_in",
"check_out",
"room_type"
],
"properties": {
"room": {
"type": "string",
"description": "Room number, if assigned"
},
"guest": {
"type": "string",
"description": "Guest name"
},
"total": {
"type": "number"
},
"adults": {
"type": "integer"
},
"source": {
"type": "string",
"description": "Booking source, e.g. Direct, Expedia"
},
"status": {
"type": "string",
"description": "Booked, cancelled, no-show…"
},
"check_in": {
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$",
"description": "Arrival YYYY-MM-DD"
},
"check_out": {
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$",
"description": "Departure YYYY-MM-DD"
},
"room_type": {
"type": "string",
"description": "Room type"
},
"confirmation": {
"type": "string",
"description": "Their confirmation number"
},
"nightly_rate": {
"type": "number"
}
},
"additionalProperties": false
},
"maxItems": 5000
}
},
"additionalProperties": false
}Open tasks on the signed-in person's Home board. Needs the owner's sign-in.
No arguments.
{
"type": "object",
"required": [],
"properties": {},
"additionalProperties": false
}For a PDF, picture or spreadsheet (up to 25 MB). Call with filename, content_type and size: you get an address to PUT the file to. After the PUT, call again with document_id: Guest Logic reads it and returns what was found. Types: PDF, PNG, JPEG, WebP, XLSX, XLS, CSV, TXT. Needs the owner's sign-in.
| Argument | Type | Description |
|---|---|---|
| size | integer | Bytes |
| filename | string | File name |
| document_id | string | From the first call, after the PUT |
| content_type | string | e.g. application/pdf |
{
"type": "object",
"required": [],
"properties": {
"size": {
"type": "integer",
"minimum": 1,
"description": "Bytes"
},
"filename": {
"type": "string",
"description": "File name"
},
"document_id": {
"type": "string",
"description": "From the first call, after the PUT"
},
"content_type": {
"type": "string",
"description": "e.g. application/pdf"
}
},
"additionalProperties": false
}Sends one report's content as text (CSV, tab-separated or plain text, up to 4 MB) — read a PDF or spreadsheet first and send its rows. Guest Logic reads it and sets up what it can (rooms, room types, rates, taxes, stays). Returns what was found. Needs the owner's sign-in.
| Argument | Type | Description |
|---|---|---|
| content* | string | The report as text |
| filename* | string | Name for the report, e.g. bookings.csv |
{
"type": "object",
"required": [
"filename",
"content"
],
"properties": {
"content": {
"type": "string",
"description": "The report as text"
},
"filename": {
"type": "string",
"description": "Name for the report, e.g. bookings.csv"
}
},
"additionalProperties": false
}We read every tool's name, description and inputs the way the model will, looking for instructions hidden from you. A clean result means no warning signs, not a guarantee. Scanned Nov 7, 2026.
{
"type": "object",
"required": [
"owner_name",
"email",
"business_name",
"kind",
"tools"
],
"properties": {
"kind": {
"enum": [
"hotel",
"venue",
"bar",
"hr_only",
"other"
],
"type": "string",
"description": "What the business is"
},
"email": {
"type": "string",
"description": "Owner e-mail (becomes the sign-in)"
},
"tools": {
"type": "array",
"items": {
"enum": [
"pms",
"sales",
"hr"
],
"type": "string"
},
"minItems": 1,
"description": "The tools wanted; pms only with kind hotel"
},
"mobile": {
"type": "string",
"description": "Owner mobile number, if you have it; a hotel owner is asked at the approval link otherwise"
},
"website": {
"type": "string",
"description": "Company website"
},
"time_zone": {
"type": "string",
"description": "Time zone, e.g. America/New_York"
},
"legal_name": {
"type": "string",
"description": "Legal name of the company"
},
"owner_name": {
"type": "string",
"description": "Owner full name"
},
"business_name": {
"type": "string",
"description": "Company name: letters, digits, spaces and & ' . - only, up to 60 characters"
}
},
"additionalProperties": false
}