Skip to main content
Glama

hostaway-kit

Read-only MCP server plus Cursor / Claude Code / Codex skills for operators who already run Hostaway as their PMS.

Ask an assistant about listings, calendar, inbox, and simple reports. Hostaway stays the system of record. This kit never writes — no messages, no calendar blocks, no reservations.

Shipped by STYLABS, an AI-native venture studio that builds custom Hostaway booking sites and operator dashboards. STYLABS is not an official Hostaway partner.

What you get

  1. Read-only MCP (stdio)list_listings, get_listing, get_calendar, list_reservations, list_conversations, list_messages, plus inbox triage, draft reply, and reports.

  2. Denylist on every listing / reservation / message payload: wifiPassword, wifiUsername, doorSecurityCode, doorCode, doorCodeVendor, doorCodeInstruction, and all invoicing* contact fields.

  3. Inbox intelligence Hostaway does not compute — unanswered / SLA triage and a suggested reply grounded in that listing's fields, house rules, and calendar. Rates come from the calendar or are reported as unknown. Nothing is sent.

  4. Reports Hostaway does not ship as owner statements — occupancy and blocked holes from the calendar, unanswered thread counts, listing completeness (photos / house rules / amenities). No financials.

  5. Skills in this repo (not on npm) that tell the model to use the MCP tools and never invent numbers.

Mapped to the Hostaway Public API:

Kit behaviour

Hostaway

Active listings

GET /v1/listings?specialStatus[]=active

One listing

GET /v1/listings/{id}?includeResources=1

Calendar

GET /v1/listings/{id}/calendar?includeResources=1

Stay search on the list

availabilityDateStart, availabilityDateEnd, availabilityGuestNumber

Check-in / check-out

integers 0–23 (checkInTimeStart, checkInTimeEnd, checkOutTime)

Amenities

amenityId integers, not free-text names (GET /v1/amenities resolves names)

Inbox

GET /v1/conversations, GET /v1/conversations/{id}/messages

Create reservation / send message

out

If HOSTAWAY_ACCOUNT_ID or HOSTAWAY_CLIENT_SECRET is unset, the server serves bundled fixtures so npx still demos.

Related MCP server: Lodgify MCP Server

Install / run

npx -y hostaway-kit

Or from this repo:

npm install
npm run build
node dist/index.js

stdio only. Logs go to stderr. Credentials are optional.

Environment

Variable

Required

Purpose

HOSTAWAY_ACCOUNT_ID

for live reads

Hostaway account id (client_id on POST /v1/accessTokens)

HOSTAWAY_CLIENT_SECRET

for live reads

Client secret from the Hostaway dashboard

HOSTAWAY_KIT_NOW

no

ISO timestamp that pins "now" for SLA math (used by tests)

Get an API client secret from the Hostaway dashboard. This kit does not ship or use a Hostaway account.

Cursor

Add to ~/.cursor/mcp.json (or project .cursor/mcp.json):

{
  "mcpServers": {
    "hostaway": {
      "command": "npx",
      "args": ["-y", "hostaway-kit"],
      "env": {
        "HOSTAWAY_ACCOUNT_ID": "your-account-id",
        "HOSTAWAY_CLIENT_SECRET": "your-client-secret"
      }
    }
  }
}

Leave both env values empty, or omit env, to run the fixture demo.

Copy the skills from this repo into Cursor:

cp -R skills/* ~/.cursor/skills/

Claude Code

Add to ~/.claude.json (or project .mcp.json):

{
  "mcpServers": {
    "hostaway": {
      "command": "npx",
      "args": ["-y", "hostaway-kit"],
      "env": {
        "HOSTAWAY_ACCOUNT_ID": "your-account-id",
        "HOSTAWAY_CLIENT_SECRET": "your-client-secret"
      }
    }
  }
}

Skills:

mkdir -p .claude/skills
cp -R skills/* .claude/skills/

Codex

~/.codex/config.toml:

[mcp_servers.hostaway]
command = "npx"
args = ["-y", "hostaway-kit"]

[mcp_servers.hostaway.env]
HOSTAWAY_ACCOUNT_ID = "your-account-id"
HOSTAWAY_CLIENT_SECRET = "your-client-secret"

Skills live in this repository under skills/. Point Codex at that folder or copy the SKILL.md files into your Codex skills path.

Skills (repo only)

Skill

When to use

skills/hostaway-pms

Hostaway stays the PMS. Do not push their website builder.

skills/hostaway-guest-answers

Answer guests from that listing's fields only.

skills/hostaway-availability

Date-range availability from list filters + calendar.

skills/hostaway-inbox

SLA triage and draft. Never send.

skills/hostaway-reporting

Occupancy, holes, unanswered counts, completeness.

The npm package is the MCP server only. Skills stay in git.

Tools

Tool

What it does

list_listings

Active listings; optional city / name / availability filters

get_listing

One listing, resources included, secrets stripped

get_calendar

Day rows with status, isAvailable, price (null = unknown)

list_reservations

Reservations; door codes stripped

list_conversations

Inbox threads

list_messages

Messages in a thread

inbox_triage

Unanswered + SLA (breached / waiting / answered)

draft_reply

Grounded draft. send is always false.

report_occupancy

Reserved / available / blocked + blocked holes

report_inbox

Unanswered thread counts

report_completeness

Missing photos, house rules, amenities

Occupancy rate = reserved nights ÷ (reserved + available). Blocked nights are listed as holes, not folded into occupancy.

Fixtures

Demo inventory (not a real Hostaway account):

  • 101 Harbor View Studio — complete listing. Raw fixture includes wifiPassword / invoicing contacts; the denylist strips them.

  • 102 Riverside Loft — no photos.

  • 103 Pine Cabin — no house rules, no amenities.

  • 199 — archived; omitted unless includeArchived is true.

  • August 2026 calendar on 101 with reserved nights, a two-night blocked hole (6–7 Aug), and 11 Aug with price: null.

  • Unread threads 501 (SLA breach), 502 (within SLA), 504 (pets question on the incomplete listing). 503 is answered.

Tests

npm test

Covers denylist, fixture filters, occupancy math, SLA counts, draft refusal of secrets and invented rates, and the absence of a send path.

Out of scope

Writes of any kind. Guest Payments, Stripe, WordPress plugins, a hosted Claude connector, a Cursor marketplace plugin, Hostaway's website builder, Flagship guest websites, owner statements, or live client data.

License

MIT. See LICENSE.

Hostaway is a trademark of its owner. This project is not affiliated with or endorsed by Hostaway.

Available Tools

11 tools
draft_replyA

Suggested reply grounded in THAT listing's fields, house rules, amenityId values, and calendar prices. Never invent rates (use calendar or say unknown). Never include wifi or door codes. Never POSTs a message — send is always false and there is no send endpoint.

ParametersJSON Schema
NameRequiredDescriptionDefault
questionNoOptional focus question; defaults to the latest incoming message
conversationIdYes

TDQS

A3.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries full behavioral burden and does so excellently. It discloses that the reply is grounded in specific data, must never invent rates, must omit wifi/door codes, and never sends because send is always false and there is no send endpoint. This is strong, non-redundant behavioral disclosure.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is three sentences with zero filler. The core purpose is front-loaded, followed by three critical constraints, each sentence earning its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description covers the tool's behavior and constraints thoroughly, but with no output schema it does not clarify the exact return shape beyond 'suggested reply'. It also assumes the agent understands 'THAT listing's' without explicit context, though this is a minor gap given the tool's simplicity.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is only 50% because conversationId has no description, and the tool description does not compensate by explaining what conversationId identifies or how it relates to 'THAT listing's'. The 'question' parameter is adequately documented, but the required parameter remains semantically unexplained.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly indicates the tool produces a suggested reply grounded in listing fields, house rules, amenityId values, and calendar prices, distinguishing it from the list/report/get sibling tools. The verb 'draft' is implicit via the name and the output type, so purpose is identifiable but slightly indirect.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description does not explicitly state when to use this tool versus alternatives, but the sibling set makes the purpose clear by exclusion. It does provide operational boundaries (never send, never invent rates), which indirectly guide usage, but explicit when-to-use guidance is missing.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_calendarA

Retrieve listing calendar via GET /v1/listings/{id}/calendar?includeResources=1. Each day has status (available/blocked/reserved/pending), isAvailable, and price (null means unknown — do not invent a rate). Nested reservations are denylist-stripped.

ParametersJSON Schema
NameRequiredDescriptionDefault
endDateYesY-m-d
listingIdYes
startDateYesY-m-d

TDQS

A3.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full behavioral disclosure burden. It adds valuable context by explaining that price null means unknown and instructs not to invent a rate, and it discloses that nested reservations are denylist-stripped. This goes beyond basic retrieval semantics, though it stops short of covering auth, errors, or pagination.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact and front-loaded with the endpoint, then provides essential response semantics in three focused sentences. No sentence is redundant; each adds either scope, field meaning, or a critical caveat.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given there is no output schema, the description does a good job of explaining the key return values: per-day status, isAvailable, price, and reservation stripping. It could be more complete by covering response structure, date range inclusivity, or authentication, but the core information an agent needs to interpret results is present.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 67%, so the schema already documents startDate and endDate formats. The description adds path context for listingId via the endpoint template, but it does not meaningfully expand on the meaning or constraints of the date parameters beyond what the schema provides.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('Retrieve listing calendar') and the specific resource, including the endpoint and query parameter. It is distinct from sibling tools like get_listing and list_reservations, though it does not explicitly name or contrast itself with them.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies the tool is used for viewing daily availability and pricing, but it gives no explicit guidance on when to choose this tool over alternatives such as list_reservations or get_listing. There are no prerequisites, exclusions, or use-case conditions stated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_listingA

Retrieve one listing via GET /v1/listings/{id}?includeResources=1. House rules, check-in hours (0–23), amenityId values, and photos are included. wifiPassword, door codes, and invoicing contacts are stripped.

ParametersJSON Schema
NameRequiredDescriptionDefault
listingIdYes

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden. It discloses the HTTP method (GET), that resources are included, and that sensitive fields like wifiPassword, door codes, and invoicing contacts are stripped. It does not mention auth, error behavior, or rate limits, but for a simple read operation it is reasonably transparent.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences with no wasted words. The core action and endpoint are front-loaded, followed by useful inclusion and exclusion details. Every sentence earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

There is no output schema, so the description compensates by listing what is included and what is stripped, giving the agent a practical picture of the response. It does not explicitly describe the full return structure or error handling, but for a single-parameter read endpoint, the coverage is strong.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate. It maps the path parameter {id} to the listingId parameter via the endpoint example, but it does not explicitly define what listingId means beyond its name and path usage. This adds some meaning but leaves the agent to infer the rest from the parameter name.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb ('Retrieve'), a specific resource ('one listing'), and the exact endpoint. It clearly distinguishes this from siblings like list_listings by emphasizing 'one listing' versus a list operation.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies the tool is used when you need a single listing by ID, and the endpoint path makes that clear. However, it does not explicitly state when to prefer this over list_listings or other sibling tools, nor does it provide exclusion criteria.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

inbox_triageB

Unanswered / SLA view Hostaway's inbox does not compute. A thread is unanswered when the latest message is incoming (or hasUnreadMessages with no later host reply). Default SLA is 2 hours. Does not send replies.

ParametersJSON Schema
NameRequiredDescriptionDefault
slaHoursNo
listingIdNo

TDQS

B3.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full transparency burden. It explicitly states 'Does not send replies', which is the key safety-relevant behavioral trait, and it discloses the SLA default and exact filtering logic. It could mention broader side-effect status more clearly, but the main non-mutating behavior is well covered.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact and information-dense; the unanswered-thread definition and the non-sending caveat both earn their place. The phrasing 'Hostaway's inbox does not compute' is slightly awkward, but there is no unnecessary filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The core concept is explained, but with no output schema and no annotations, the description should clarify what the tool returns and how slaHours/listingId affect the result. It also gives no guidance about how this relates to sibling tools, leaving an agent uncertain about calling conventions and expected output.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate. It indirectly explains slaHours via 'Default SLA is 2 hours', but it never names either parameter and gives no explanation of listingId's role. An agent can guess listingId means 'filter by listing', but the description does not actually support that.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly identifies the tool as an unanswered/SLA view of Hostaway's inbox and defines the unanswered condition with concrete criteria (latest message incoming, or hasUnreadMessages with no later host reply). It lacks an explicit verb like 'get' or 'list', but the resource and computation are recognizable, and 'Does not send replies' distinguishes it from reply-sending tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The SLA and unanswered-thread logic imply this tool should be used for triage-style inbox filtering, but the description never says when to prefer it over related sibling tools like list_conversations, list_messages, or report_inbox. There are no explicit exclusions or alternative routing conditions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_conversationsB

List inbox threads via GET /v1/conversations?includeResources=1. Nested Reservation objects are denylist-stripped.

ParametersJSON Schema
NameRequiredDescriptionDefault
listingIdNo
reservationIdNo

TDQS

B3.3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the behavioral transparency burden. It does disclose meaningful behavior: the operation is a GET (read-only) and nested Reservation objects are denylist-stripped. However, it omits pagination, response format, auth expectations, and error behavior, so transparency is partial.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The definition is two short sentences, action first, with no filler. The endpoint and the denylist-stripping caveat are both useful and earn their place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with two undocumented optional parameters, no output schema, and no annotations, this is incomplete. It does not explain what listingId and reservationId do, how results are paginated or ordered, or what the response looks like, and it lacks sibling disambiguation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, and the description never mentions listingId or reservationId or how they affect the result. The schema provides only names and types, so the agent must guess the filter semantics. The only query parameter mentioned, includeResources=1, is part of the endpoint, not one of the input-schema parameters.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names the action ('List') and the resource ('inbox threads'), and pins it to the exact endpoint 'GET /v1/conversations?includeResources=1'. This makes it semantically distinct from siblings such as list_reservations or list_messages, which target different resources.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no guidance on when to choose this tool over list_reservations, list_messages, or inbox_triage. No exclusions, prerequisites, or alternative conditions are stated. 'List inbox threads' gives only an implicit use case.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_listingsA

List Hostaway listings. Defaults to GET /v1/listings?specialStatus[]=active. Optional availabilityDateStart/End + availabilityGuestNumber filter the list the same way Hostaway does. Amenities are amenityId values, not free-text names. Check-in/out hours are 0–23. Denylisted access and invoicing fields are stripped.

ParametersJSON Schema
NameRequiredDescriptionDefault
cityNo
matchNoSearch by listing name
includeArchivedNoIf true, omit specialStatus[]=active
availabilityDateEndNoY-m-d, exclusive departure for fixture stays
availabilityDateStartNoY-m-d, passed to Hostaway listings list
availabilityGuestNumberNo

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden of behavioral disclosure. It does a strong job: it reveals the default specialStatus[]=active filter, explains that availability filters behave exactly as Hostaway does, warns that amenities expect IDs rather than free-text names, constrains check-in/out hours to 0–23, and notes that denylisted fields are stripped from responses. Minor gaps include pagination and return shape, but the description is transparent about the tool's notable behaviors.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is tightly written: four short sentences, each carrying distinct information. It is front-loaded with the main purpose, then covers default behavior, filtering semantics, and caveats without wasted words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only listing tool with no output schema and no annotations, the description covers the main invocation details: default filters, optional parameters, value formats, and stripped fields. It falls slightly short of full completeness because it does not mention pagination or the overall response envelope, but the essential information needed to select and call the tool correctly is present.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 67%, not at the high threshold, so the description meaningfully compensates. It explains that availabilityDateStart, availabilityDateEnd, and availabilityGuestNumber work together as Hostaway-style filters, and it clarifies the default active status relevant to includeArchived. However, the `city` parameter is left undocumented in both schema and description, which prevents a perfect score.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb and resource: 'List Hostaway listings.' It immediately distinguishes this from sibling list tools (list_reservations, list_conversations, list_messages) because the resource is clearly listings, not another entity. Additional context about default active status and stripped fields further clarifies exactly what this tool returns.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description makes the usage context clear: it lists Hostaway listings, defaults to active entries, and supports optional availability-based filtering. It does not explicitly state 'use this instead of get_listing' or 'do not use for reservations,' but the resource target is obvious from the first sentence and sibling tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_messagesA

List messages in a thread via GET /v1/conversations/{id}/messages. Read-only. There is no send tool.

ParametersJSON Schema
NameRequiredDescriptionDefault
conversationIdYes

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations present, the description must carry the safety/behavioral burden. It explicitly discloses that the operation is read-only and uses GET, which rules out side effects. It does not mention pagination, authentication, or response shape, but for a simple list operation this is reasonably transparent.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences deliver the operation, endpoint, side-effect profile, and a tool-ecosystem note with no redundancy. The essential action is front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a low-complexity tool with a single integer parameter and no output schema, the description provides enough context to call it correctly. It could be more complete by mentioning what the response contains or how messages are ordered, but that is not critical.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, so the description needs to clarify the conversationId parameter. The endpoint path /v1/conversations/{id}/messages maps {id} to conversationId and explains that it is the conversation/thread identifier, adding meaning beyond the bare integer schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific action ('List messages in a thread') with an explicit endpoint, making the tool's purpose unambiguous and distinct from sibling listing tools like list_conversations. The read-only note reinforces that it is a retrieval operation.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description clearly establishes when to use the tool: to read the messages of a specific conversation/thread. 'Read-only. There is no send tool' provides context and a limitation, though it does not name alternative sibling tools or explicitly state when to prefer them.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_reservationsA

List reservations via GET /v1/reservations. Read-only. doorCode / doorCodeVendor / doorCodeInstruction are stripped. Create reservation is not implemented.

ParametersJSON Schema
NameRequiredDescriptionDefault
matchNoGuest name search
listingIdNo
arrivalEndDateNo
arrivalStartDateNo

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the behavioral disclosure burden. It explicitly states the tool is read-only, which is a key safety trait, and reveals that doorCode fields are stripped from results. It also notes that create reservation is not implemented. These are meaningful disclosures, though pagination, response shape, and rate limits are not mentioned.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is three short sentences, front-loaded with the primary purpose. Every sentence carries useful information: endpoint, read-only behavior, field stripping, and a limitation. There is no waste or redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description is adequate for a simple read-only listing tool, but it leaves gaps. There is no output schema, and the description does not clarify response contents, date parameter formats, or how the stripped fields affect the result. For correct filtering, an agent would benefit from more detail on arrivalStartDate and arrivalEndDate.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is only 25%: only 'match' has a description. The description adds no parameter-level detail and does not compensate for the undocumented listingId, arrivalEndDate, or arrivalStartDate parameters. Date formats and filter semantics are left entirely to inference.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the specific operation ('List reservations'), the HTTP endpoint (GET /v1/reservations), and the read-only nature. It distinguishes itself from sibling tools like list_conversations and report_occupancy by naming the exact resource.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage: it is the tool for listing reservations and is read-only. It also warns that creation is not implemented, which helps prevent misuse. However, it does not explicitly describe when to prefer this tool over siblings or provide alternative tool routing.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

report_completenessB

Listing completeness from reads: missing photos, missing house rules, missing amenities (empty listingAmenities). Not a financial report.

ParametersJSON Schema
NameRequiredDescriptionDefault
listingIdNo

TDQS

B3.3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the behavioral burden. 'From reads' suggests a read-only operation and the enumeration of missing-fields checks adds transparency, but it does not explicitly state that no data is modified, what the output looks like, or any error behavior. The behavior is partially disclosed but not fully.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two short sentences, front-loaded with the core purpose and followed by a useful exclusion. Every phrase contributes: the missing-fields list clarifies scope, and 'Not a financial report' prevents misuse. There is no redundant or padding content.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple one-parameter report tool, the description conveys the core function and specific checks performed. However, it omits the meaning of the optional listingId, how results are returned, and when to choose this over sibling reporting tools. These gaps make it adequate but not fully complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema has a single listingId parameter with 0% description coverage, and the tool description never mentions listingId or explains how it is used. The parameter is inferable from its name and context, but the description adds no semantic value beyond what the schema property name already implies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific resource and action: reporting listing completeness by identifying missing photos, house rules, and amenities. It differentiates itself from financial reports, which helps distinguish it from report_occupancy and similar siblings, though it does not name a sibling directly.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The 'Not a financial report' sentence provides a negative usage signal, and the content implies it should be used when checking listing completeness. However, it does not explicitly state when to use this tool versus alternatives like get_listing or report_occupancy, leaving usage context largely implied.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

report_inboxB

Unanswered thread counts by listing, computed from conversation reads. Not a Hostaway owner statement.

ParametersJSON Schema
NameRequiredDescriptionDefault
slaHoursNo
listingIdNo

TDQS

B3.1/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the behavioral disclosure burden. It does disclose the computation source ('computed from conversation reads') and positions the output as counts, which adds real context beyond the name. But it does not clarify side effects, the definition of 'unanswered,' or why it is explicitly not a Hostaway owner statement.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is short and front-loads the main functionality in the first sentence. The second sentence is a compact disambiguation, though its meaning is somewhat opaque and slightly hurts clarity.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

There is no output schema and no annotations, so the description must convey enough about inputs and results. It explains the general shape of the report but not the meaning of slaHours, what the output structure looks like, or how this report compares to related inbox/report tools. The odd negative statement about Hostaway adds more confusion than completeness.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate. It indirectly maps to listingId via 'by listing' but entirely omits slaHours, leaving its meaning, units, and effect on the report unclear. For a tool with only two parameters, this is a significant gap.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly identifies the tool's core purpose: reporting unanswered thread counts grouped by listing. It also adds a useful source qualifier ('computed from conversation reads') that distinguishes it from raw conversation/message listing tools. However, it lacks a verb and does not explicitly differentiate it from sibling tools like inbox_triage or report_occupancy.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies the tool is appropriate for aggregate unanswered-thread reporting, and the phrase 'Not a Hostaway owner statement' provides a partial exclusion. However, it does not name any sibling alternatives or give explicit criteria for when to choose this report over list_conversations, inbox_triage, or report_occupancy.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

report_occupancyA

Occupancy and blocked holes computed from calendar reads. Occupancy = reserved nights / (reserved + available). Blocked holes are consecutive blocked/hardBlock days. Not an owner statement. No financials.

ParametersJSON Schema
NameRequiredDescriptionDefault
endDateYes
listingIdNo
startDateYes

TDQS

A3.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the burden of behavioral disclosure. It explains the calculation formula, the data source (calendar reads), and what the report is not. It does not describe side effects, permissions, or edge-case behavior, but the read-only nature is strongly implied by 'computed from calendar reads.'

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Four short sentences, each adding information: what is computed, how occupancy is calculated, how blocked holes are defined, and what is excluded. It is front-loaded with the core purpose and contains no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description thoroughly explains the report's content and exclusions, but it lacks parameter semantics and return-format details. With no output schema and no annotations, an agent still has to infer what the report response looks like and how the optional listingId changes the result.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, and the description does not mention startDate, endDate, or listingId at all. The parameter names are self-explanatory, and the formula implies a date-range-based calculation, but the description does not clarify required vs optional usage, date formats, or how listingId affects results.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific resource and computed metrics: occupancy and blocked holes from calendar reads. The formula for occupancy and the definition of blocked holes make the purpose unambiguous. It also adds negative scope ('Not an owner statement. No financials.') which helps distinguish it from financial or owner-facing reports, though it does not name sibling tools directly.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The context is clear: use this tool when occupancy or blocked-hole metrics are needed. The negative statements ('Not an owner statement. No financials.') provide explicit exclusions. However, no sibling alternative is named, so an agent must infer which other report tool to choose instead.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.

  1. 11 tool updatesv1.0.0
    • First observeddraft_reply
    • First observedget_calendar
    • First observedget_listing
    • First observedinbox_triage
    • First observedlist_conversations
    • First observedlist_listings
    • First observedlist_messages
    • First observedlist_reservations
    • First observedreport_completeness
    • First observedreport_inbox
    • First observedreport_occupancy

TDQS

A3.8/5.0
Disambiguation5/5

Each tool targets a distinct resource or report: reservations, conversations, messages, listings, calendar, and aggregate reports. Even the inbox-related tools operate at clearly different granularities: list_conversations lists threads, inbox_triage identifies unanswered threads, and report_inbox aggregates unanswered-thread counts by listing.

Naming Consistency5/5

All tool names are lowercase snake_case verb_noun: list_* for collections, get_* for single resources, report_* for computed summaries, plus inbox_triage and draft_reply. The naming pattern is consistent and predictable.

Tool Count5/5

11 tools is well within the ideal 3-15 range, and each tool covers a meaningful, non-redundant aspect of Hostaway read-only operations and reporting. There are no filler tools or excessive overlapping endpoints.

Completeness3/5

The read/triage/draft workflow is well covered, but the server is explicitly read-only: create/update/delete operations for reservations and listings are absent, and there is no send-message tool. These are notable gaps, though the descriptions openly acknowledge them and no financial/owner-statement tools are claimed.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

  • -
    license
    Not graded
    quality
    Not graded
    maintenance
    Enables AI assistants to interact with Hostaway's property management platform through standardized MCP tools. Provides access to listings, bookings, guest communication, and availability checking for vacation rental management.
    -
  • A
    license
    B
    quality
    B
    maintenance
    A read-only hospitality-focused MCP server that enables users to retrieve reservation details, listing briefs, and guest conversation contexts from Hostaway. It simplifies hospitality workflows by providing specialized tools for searching threads and viewing reservation data through natural language interfaces.
    6
    51
    MIT
  • A
    license
    A
    quality
    C
    maintenance
    Connects AI assistants to the Hostaway property management API via 10 read-only tools covering listings, reservations, calendars, guest conversations, and owner statements.
    10
    340
    3
    MIT

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/stylabs/hostaway-kit-mcp-skills'

If you have feedback or need assistance with the MCP directory API, please join our Discord server