{
  "name": "hu.naptarai/naptarai",
  "description": "Run a small accommodation business: read the calendar, availability, nightly prices and restrictions, bookings, guests, OTA channel health and the direct-booking website; and, where the connection has been granted write access, set and adjust rates, set stay restrictions, block and unblock nights, create and cancel direct bookings, and prepare guest messages. Changes reach Booking.com, Airbnb and Szállás.hu through the connected channel manager. Hungarian-first, usable in any language.",
  "version": "1.0.0",
  "websiteUrl": "https://naptarai.hu",
  "repository": null,
  "remotes": [
    {
      "type": "streamable-http",
      "url": "https://naptarai.hu/api/mcp-oauth",
      "authentication": {
        "type": "oauth2",
        "protectedResourceMetadata": "https://naptarai.hu/api/.well-known/oauth-protected-resource/mcp-oauth",
        "authorizationServerMetadata": "https://naptarai.hu/api/.well-known/oauth-authorization-server",
        "scopesSupported": [
          "pms:read",
          "pms:write"
        ]
      }
    }
  ],
  "tools": [
    {
      "name": "get_workspace_context",
      "description": "The current UTC time, the user's own timezone and the workspace name. Called first in any conversation that mentions a time.",
      "readOnly": true,
      "scopes": [
        "pms:read"
      ]
    },
    {
      "name": "properties_list",
      "description": "The accommodations in the workspace: id, name, status, city, timezone, currency and unit count. The entry point — every other tool needs a property id.",
      "readOnly": true,
      "scopes": [
        "pms:read"
      ]
    },
    {
      "name": "properties_get",
      "description": "One property in full: address, check-in and check-out times, contact details, cancellationPolicy, house information, and its units with their rate plans.",
      "readOnly": true,
      "scopes": [
        "pms:read"
      ]
    },
    {
      "name": "units_list",
      "description": "The bookable units of a property, how many interchangeable rooms each stands for, and the rate plans prices are written against.",
      "readOnly": true,
      "scopes": [
        "pms:read"
      ]
    },
    {
      "name": "calendar_get",
      "description": "Nights by unit over a date range: rooms still sellable, the bookings on each night, and the blocks the host has set.",
      "readOnly": true,
      "scopes": [
        "pms:read"
      ]
    },
    {
      "name": "availability_get",
      "description": "Which nights are still sellable, and the unbroken free stretches, filterable by minimum length and by weekday — \"the empty weekends in September\".",
      "readOnly": true,
      "scopes": [
        "pms:read"
      ]
    },
    {
      "name": "rates_get",
      "description": "Nightly prices and stay restrictions per rate plan over a date range, with amounts in minor units and formatted for a person.",
      "readOnly": true,
      "scopes": [
        "pms:read"
      ]
    },
    {
      "name": "reservations_list",
      "description": "Bookings filtered by property, unit, overlapping date range, status, source or guest name. Cursor-paged.",
      "readOnly": true,
      "scopes": [
        "pms:read"
      ]
    },
    {
      "name": "reservations_get",
      "description": "One booking in full: dates, unit, guest, party size, amounts, payment state and source.",
      "readOnly": true,
      "scopes": [
        "pms:read"
      ]
    },
    {
      "name": "guests_get",
      "description": "One guest by id, or a search by name or e-mail address. Personal data — the minimum needed to answer.",
      "readOnly": true,
      "scopes": [
        "pms:read"
      ]
    },
    {
      "name": "channels_status",
      "description": "The OTA connections and each one's health, last sync and last error. Read it before promising a change will reach a channel.",
      "readOnly": true,
      "scopes": [
        "pms:read"
      ]
    },
    {
      "name": "analytics_summary",
      "description": "Today's arrivals, departures and in-house guests, plus the current month's occupancy, revenue, average nightly rate, direct-versus-OTA split and estimated commission avoided.",
      "readOnly": true,
      "scopes": [
        "pms:read"
      ]
    },
    {
      "name": "website_get",
      "description": "The host's direct-booking website: status, address and content. Naming a single property creates an empty draft site if it has none.",
      "readOnly": false,
      "scopes": [
        "pms:write"
      ]
    },
    {
      "name": "calendar_block",
      "description": "Take nights off the market for one unit, as an owner stay or for maintenance. Closes them on every connected channel.",
      "readOnly": false,
      "scopes": [
        "pms:write"
      ]
    },
    {
      "name": "calendar_unblock",
      "description": "Remove a block and put its nights back on sale. An owner-stay block requires the user's explicit confirmation of that block.",
      "readOnly": false,
      "scopes": [
        "pms:write"
      ]
    },
    {
      "name": "rates_set",
      "description": "Set one nightly price across a date range for a rate plan, optionally only on chosen weekdays. Reports the previous prices and the new one.",
      "readOnly": false,
      "scopes": [
        "pms:write"
      ]
    },
    {
      "name": "rates_adjust",
      "description": "Move existing prices by a percentage or a fixed amount across a range, with optional floor and ceiling. No night may move more than 50%.",
      "readOnly": false,
      "scopes": [
        "pms:write"
      ]
    },
    {
      "name": "restrictions_set",
      "description": "Set minimum and maximum stay, closed-to-arrival, closed-to-departure and stop-sell across a date range.",
      "readOnly": false,
      "scopes": [
        "pms:write"
      ]
    },
    {
      "name": "reservation_create",
      "description": "Create a direct or manually taken booking. Bookings that came from an OTA arrive on their own and are never typed in.",
      "readOnly": false,
      "scopes": [
        "pms:write"
      ]
    },
    {
      "name": "reservation_cancel",
      "description": "Cancel a booking and release its nights. A confirmed booking requires the user's explicit confirmation of that booking.",
      "readOnly": false,
      "scopes": [
        "pms:write"
      ]
    },
    {
      "name": "message_draft",
      "description": "Prepare a message to a guest and open the conversation it belongs to. Sends nothing and stores nothing — the host sends it.",
      "readOnly": false,
      "scopes": [
        "pms:write"
      ]
    },
    {
      "name": "properties_set_cancellation_policy",
      "description": "Set the one cancellation policy for a property (FLEXIBLE, MODERATE, FIRM, STRICT, NON_REFUNDABLE). Pushed to Airbnb; Booking.com is manual; Szállás.hu and iCal are unsupported.",
      "readOnly": false,
      "scopes": [
        "pms:write"
      ]
    },
    {
      "name": "properties_set_booking_settings",
      "description": "Set instant book and the check-in / check-out clocks for a property. Pushed to Airbnb; Booking.com and Szállás.hu are manual.",
      "readOnly": false,
      "scopes": [
        "pms:write"
      ]
    },
    {
      "name": "units_set_listing_settings",
      "description": "Set weekend price, extra-guest fee, cleaning fee, weekly/monthly discounts, lead time, max notice, turnover and allowed check-in/out weekdays for one unit. Pushed to Airbnb; Booking.com and Szállás.hu are manual.",
      "readOnly": false,
      "scopes": [
        "pms:write"
      ]
    }
  ],
  "authorizationNote": "The initialize handshake and tools/list answer without a credential so a client can discover this server. Tool calls require an OAuth 2.1 access token; an unauthenticated tools/call answers 401 with a WWW-Authenticate header naming the RFC 9728 metadata below. Read tools need only a valid connection (scope pms:read). Every tool marked readOnly: false additionally requires pms:write on the credential, which is NOT granted by default — a workspace owner turns it on deliberately, and without it a write is refused with nothing changed.",
  "documentation": "https://naptarai.hu/fejlesztok",
  "related": {
    "openapi": "https://naptarai.hu/openapi.json",
    "restApi": "https://naptarai.hu/api/public/v1",
    "status": "https://naptarai.hu/api/public/v1/status",
    "llms": "https://naptarai.hu/llms.txt"
  }
}