{
  "schemaVersion": "1.0",
  "item": {
    "slug": "aihotel",
    "name": "AI Go Hotel",
    "source": "tencent",
    "type": "skill",
    "category": "开发工具",
    "sourceUrl": "https://clawhub.ai/qiao101660/aihotel",
    "canonicalUrl": "https://clawhub.ai/qiao101660/aihotel",
    "targetPlatform": "OpenClaw"
  },
  "install": {
    "downloadMode": "redirect",
    "downloadUrl": "/downloads/aihotel",
    "sourceDownloadUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=aihotel",
    "sourcePlatform": "tencent",
    "targetPlatform": "OpenClaw",
    "installMethod": "Manual import",
    "extraction": "Extract archive",
    "prerequisites": [
      "OpenClaw"
    ],
    "packageFormat": "ZIP package",
    "includedAssets": [
      "mcp.json",
      "README_EN.md",
      "SKILL.md"
    ],
    "primaryDoc": "SKILL.md",
    "quickSetup": [
      "Download the package from Yavira.",
      "Extract the archive and review SKILL.md first.",
      "Import or place the package into your OpenClaw setup."
    ],
    "agentAssist": {
      "summary": "Hand the extracted package to your coding agent with a concrete install brief instead of figuring it out manually.",
      "steps": [
        "Download the package from Yavira.",
        "Extract it into a folder your agent can access.",
        "Paste one of the prompts below and point your agent at the extracted folder."
      ],
      "prompts": [
        {
          "label": "New install",
          "body": "I downloaded a skill package from Yavira. Read SKILL.md from the extracted folder and install it by following the included instructions. Tell me what you changed and call out any manual steps you could not complete."
        },
        {
          "label": "Upgrade existing",
          "body": "I downloaded an updated skill package from Yavira. Read SKILL.md from the extracted folder, compare it with my current installation, and upgrade it while preserving any custom configuration unless the package docs explicitly say otherwise. Summarize what changed and any follow-up checks I should run."
        }
      ]
    },
    "sourceHealth": {
      "source": "tencent",
      "slug": "aihotel",
      "status": "healthy",
      "reason": "direct_download_ok",
      "recommendedAction": "download",
      "checkedAt": "2026-04-29T03:28:45.595Z",
      "expiresAt": "2026-05-06T03:28:45.595Z",
      "httpStatus": 200,
      "finalUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=aihotel",
      "contentType": "application/zip",
      "probeMethod": "head",
      "details": {
        "probeUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=aihotel",
        "contentDisposition": "attachment; filename=\"aihotel-1.0.1.zip\"",
        "redirectLocation": null,
        "bodySnippet": null,
        "slug": "aihotel"
      },
      "scope": "item",
      "summary": "Item download looks usable.",
      "detail": "Yavira can redirect you to the upstream package for this item.",
      "primaryActionLabel": "Download for OpenClaw",
      "primaryActionHref": "/downloads/aihotel"
    },
    "validation": {
      "installChecklist": [
        "Use the Yavira download entry.",
        "Review SKILL.md after the package is downloaded.",
        "Confirm the extracted package contains the expected setup assets."
      ],
      "postInstallChecks": [
        "Confirm the extracted package includes the expected docs or setup files.",
        "Validate the skill or prompts are available in your target agent workspace.",
        "Capture any manual follow-up steps the agent could not complete."
      ]
    },
    "downloadPageUrl": "https://openagent3.xyz/downloads/aihotel",
    "agentPageUrl": "https://openagent3.xyz/skills/aihotel/agent",
    "manifestUrl": "https://openagent3.xyz/skills/aihotel/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/aihotel/agent.md"
  },
  "agentAssist": {
    "summary": "Hand the extracted package to your coding agent with a concrete install brief instead of figuring it out manually.",
    "steps": [
      "Download the package from Yavira.",
      "Extract it into a folder your agent can access.",
      "Paste one of the prompts below and point your agent at the extracted folder."
    ],
    "prompts": [
      {
        "label": "New install",
        "body": "I downloaded a skill package from Yavira. Read SKILL.md from the extracted folder and install it by following the included instructions. Tell me what you changed and call out any manual steps you could not complete."
      },
      {
        "label": "Upgrade existing",
        "body": "I downloaded an updated skill package from Yavira. Read SKILL.md from the extracted folder, compare it with my current installation, and upgrade it while preserving any custom configuration unless the package docs explicitly say otherwise. Summarize what changed and any follow-up checks I should run."
      }
    ]
  },
  "documentation": {
    "source": "clawhub",
    "primaryDoc": "SKILL.md",
    "sections": [
      {
        "title": "AIGoHotel MCP Hotel Search Skill",
        "body": "This Skill describes how the model should use the aigohotel-mcp MCP server to search for hotels, view detailed prices for a specific hotel, and fetch available hotel tag metadata."
      },
      {
        "title": "When to use this Skill",
        "body": "When the user wants to find hotels in a specific place (city, airport, attraction, station, detailed address, or a specific hotel), call searchHotels.\nWhen the user has already chosen a specific hotel and wants to see detailed room types and prices (including cancellation policies, etc.), call getHotelDetail.\nWhen you need to understand or explain available hotel tags (such as “Free WiFi”, “Family-friendly hotel”, “Airport hotel”), or need to map natural-language preferences into structured tags, call getHotelSearchTags."
      },
      {
        "title": "Tool 1: searchHotels",
        "body": "Purpose: Search a list of hotels based on destination, dates, star rating, number of guests, budget, and tag filters.\n\nKey input fields (fill them based on the user’s intent as much as possible):\n\nRequired\n\noriginQuery (string): The user’s original natural-language query.\nplace (string): The place name (city / airport / attraction / train station / subway station / hotel / district / detailed address, etc.).\nplaceType (string): The type corresponding to place. Supported values: 城市 (city), 机场 (airport), 景点 (attraction), 火车站 (train station), 地铁站 (subway station), 酒店 (hotel), 区/县 (district/county), 详细地址 (detailed address).\n\n\n\nDates and length of stay\n\ncheckInDate (string, YYYY-MM-DD): Parse from user utterances when possible; if omitted or earlier than today, the service automatically uses “tomorrow”.\nstayNights (number): Set according to how many nights the user wants to stay; can be omitted if not specified (default is 1).\n\n\n\nGuests and country\n\nadultCount (number): Number of adults per room; use default 2 if not specified.\ncountryCode (string): Two-letter country code, e.g. CN for China, US for the United States.\n\n\n\nPrice and star rating\n\nstarRatings (number[]): Star rating range. For example, if the user says “4 stars and above”, you can use [4.0, 5.0].\nhotelTags.maxPricePerNight (number): If the user says “no more than X per night”, set this field in hotelTags (currency in CNY).\n\n\n\nTags and brands (from user preferences or getHotelSearchTags)\n\nhotelTags.preferredTags (string[]): Tags the user would like to have (e.g. “Free WiFi”, “Premium hotel”, “Family-friendly hotel”).\nhotelTags.requiredTags (string[]): Tags that are must-have conditions.\nhotelTags.excludedTags (string[]): Tags that the user explicitly does not want.\nhotelTags.preferredBrands (string[]): Preferred brands, such as “Hilton”, “Marriott”, “Home Inn”, etc.\nhotelTags.minRoomSize (number): Minimum room size in square meters, if mentioned by the user.\n\n\n\nOthers\n\ndistanceInMeter (number): When place is a POI, you can limit the straight-line distance; a typical value is 5000.\nsize (number): Number of hotels to return. Default is 5; generally should not exceed 10–20.\nwithHotelAmenities (boolean): Set to true when you need to compare hotels by amenities (such as pool, gym, etc.).\nlanguage (string): Locale, e.g. zh_CN for Chinese, en_US for English.\nqueryParsing (boolean): Usually keep the default true to leverage server-side intent parsing.\n\nOutput highlights (how to use the result):\n\nCommon top-level fields: message, hotelInformationList.\nEach hotel in hotelInformationList contains:\n\nhotelId, name, address, destinationId, latitude, longitude, distanceInMeters,\nstarRating, score, tags, hotelAmenities,\nbookingUrl (you can provide this as a booking link to the user),\nprice (an object rather than a single number):\n\nhasPrice: Whether price is available.\ncurrency: Currency code (usually CNY).\nlowestPrice: The lowest available price under the current conditions.\n\n\n\n\nSome fields may be missing or null. Do not fabricate values that are not returned by the MCP tool."
      },
      {
        "title": "Tool 2: getHotelDetail",
        "body": "Purpose: After the user has chosen a specific hotel, get detailed room types, total prices, and cancellation policies for a given stay period.\n\nTypical call scenarios:\n\nThe user says things like “For this hotel, show me the room types and prices / whether breakfast is included / whether it’s refundable”.\nTypically you first call searchHotels to find a suitable hotel and remember its hotelId, then call this tool.\n\nKey input fields:\n\nhotelId (number): Prefer using the hotelId returned from searchHotels.\nname (string): Only use name-based fuzzy matching when you do not have a reliable hotelId.\ncheckInDate / checkOutDate (string, YYYY-MM-DD):\n\nIf empty, invalid, or earlier than today, the service will automatically adjust (e.g. use “tomorrow” and +1 day).\n\n\nadultCount (number, default 2), childCount (number, default 0), childAgeDetails (number[]):\n\nSet according to the actual number and ages of guests.\n\n\nroomCount (number, default 1): Number of rooms.\ncountryCode (string, default CN): Country code.\ncurrency (string, default CNY): Currency code.\n\nOutput highlights:\n\nOn success, the response usually contains:\n\nsuccess, errorMessage, hotelId, name, bookingUrl, checkIn, checkOut,\nroomRatePlans: A list of room types and rate plans.\n\n\nCommon fields in roomRatePlans:\n\nroomTypeId, roomName, roomNameCn, ratePlanId, ratePlanName,\ncurrency, totalPrice (total price for this stay), inventoryCount, isOnRequest,\ncancellationPolicies: Cancellation rules (time periods, amounts, descriptions, etc.).\n\n\nWhen responding to the user:\n\nFocus on summarizing key information: main room types, price range, whether free cancellation is available, whether breakfast is included, etc.\nYou may provide bookingUrl (e.g. “You can complete the booking via this link.”).\n\n\nOn failure, the tool may return an error message directly (e.g. “Failed to get prices, please try again later”). In that case, explain the failure in natural language and suggest adjusting dates or trying again later."
      },
      {
        "title": "Tool 3: getHotelSearchTags",
        "body": "Purpose: Fetch metadata for tags that can be used in searchHotels.hotelTags. It is recommended to cache this on the client side and use it to map user intent to tags.\n\nOutput highlights:\n\ntags: A list of tags, each including:\n\nname: Tag name (for example “Free WiFi”).\ncategory: Category (for example “Core Facilities”, “Hotel Type”, etc.).\ndescription: Human-readable explanation.\n\n\nusageGuide:\n\ntagUsage: How to use tag names in hotelTags.preferredTags / requiredTags / excludedTags.\nexampleRequest: Example request JSON.\n\nTypical categories (non-exhaustive):\n\nBrand & Rating\nSelling Points\nCore Facilities\nFamily & Kids\nService Details\nDining & Service\nTransport & Payment\nView & Room Type\nHotel Type\nPrice Related\n\nWhen you need complex filtering with tags and are not sure about the exact tag names, you can first call getHotelSearchTags, then choose appropriate tags from tags.name to fill into hotelTags."
      },
      {
        "title": "General dialogue and safety constraints",
        "body": "In multi-turn conversations, remember the user’s already-provided destination, dates, number of guests, star rating, and budget as much as possible, and only ask again when information is missing or ambiguous.\nNever fabricate fields or values that are not returned by the MCP tools, especially for sensitive information such as prices and cancellation policies.\nMake it clear that prices and availability are real-time results and may change over time.\nAnswer in the same language as the user (use Chinese for Chinese users, English for English users). Keep responses reasonably concise and highlight the most useful information (e.g. 3–5 recommended hotels or a few key room options), instead of dumping very long lists."
      },
      {
        "title": "Local MCP configuration example (optional)",
        "body": "In development tools that support local MCP configuration (such as Cursor), you can add the following to mcp.json to mount AIGoHotel MCP as an available server (the name aigohotel-mcp-server is just an example and can be adjusted as needed):\n\n{\n\"mcpServers\": {\n\"aigohotel-mcp-server\": {\n\"url\": \"https://mcp.aigohotel.com/mcp\",\n\"headers\": {\n\"Authorization\": \"Bearer <YOUR_AIGOHOTEL_MCP_TOKEN>\",\n\"Content-Type\": \"application/json\"\n}\n}\n}\n}"
      }
    ],
    "body": "AIGoHotel MCP Hotel Search Skill\n\nThis Skill describes how the model should use the aigohotel-mcp MCP server to search for hotels, view detailed prices for a specific hotel, and fetch available hotel tag metadata.\n\nWhen to use this Skill\nWhen the user wants to find hotels in a specific place (city, airport, attraction, station, detailed address, or a specific hotel), call searchHotels.\nWhen the user has already chosen a specific hotel and wants to see detailed room types and prices (including cancellation policies, etc.), call getHotelDetail.\nWhen you need to understand or explain available hotel tags (such as “Free WiFi”, “Family-friendly hotel”, “Airport hotel”), or need to map natural-language preferences into structured tags, call getHotelSearchTags.\nTool 1: searchHotels\n\nPurpose: Search a list of hotels based on destination, dates, star rating, number of guests, budget, and tag filters.\n\nKey input fields (fill them based on the user’s intent as much as possible):\n\nRequired\n\noriginQuery (string): The user’s original natural-language query.\nplace (string): The place name (city / airport / attraction / train station / subway station / hotel / district / detailed address, etc.).\nplaceType (string): The type corresponding to place. Supported values: 城市 (city), 机场 (airport), 景点 (attraction), 火车站 (train station), 地铁站 (subway station), 酒店 (hotel), 区/县 (district/county), 详细地址 (detailed address).\n\nDates and length of stay\n\ncheckInDate (string, YYYY-MM-DD): Parse from user utterances when possible; if omitted or earlier than today, the service automatically uses “tomorrow”.\nstayNights (number): Set according to how many nights the user wants to stay; can be omitted if not specified (default is 1).\n\nGuests and country\n\nadultCount (number): Number of adults per room; use default 2 if not specified.\ncountryCode (string): Two-letter country code, e.g. CN for China, US for the United States.\n\nPrice and star rating\n\nstarRatings (number[]): Star rating range. For example, if the user says “4 stars and above”, you can use [4.0, 5.0].\nhotelTags.maxPricePerNight (number): If the user says “no more than X per night”, set this field in hotelTags (currency in CNY).\n\nTags and brands (from user preferences or getHotelSearchTags)\n\nhotelTags.preferredTags (string[]): Tags the user would like to have (e.g. “Free WiFi”, “Premium hotel”, “Family-friendly hotel”).\nhotelTags.requiredTags (string[]): Tags that are must-have conditions.\nhotelTags.excludedTags (string[]): Tags that the user explicitly does not want.\nhotelTags.preferredBrands (string[]): Preferred brands, such as “Hilton”, “Marriott”, “Home Inn”, etc.\nhotelTags.minRoomSize (number): Minimum room size in square meters, if mentioned by the user.\n\nOthers\n\ndistanceInMeter (number): When place is a POI, you can limit the straight-line distance; a typical value is 5000.\nsize (number): Number of hotels to return. Default is 5; generally should not exceed 10–20.\nwithHotelAmenities (boolean): Set to true when you need to compare hotels by amenities (such as pool, gym, etc.).\nlanguage (string): Locale, e.g. zh_CN for Chinese, en_US for English.\nqueryParsing (boolean): Usually keep the default true to leverage server-side intent parsing.\n\nOutput highlights (how to use the result):\n\nCommon top-level fields: message, hotelInformationList.\nEach hotel in hotelInformationList contains:\nhotelId, name, address, destinationId, latitude, longitude, distanceInMeters,\nstarRating, score, tags, hotelAmenities,\nbookingUrl (you can provide this as a booking link to the user),\nprice (an object rather than a single number):\nhasPrice: Whether price is available.\ncurrency: Currency code (usually CNY).\nlowestPrice: The lowest available price under the current conditions.\nSome fields may be missing or null. Do not fabricate values that are not returned by the MCP tool.\nTool 2: getHotelDetail\n\nPurpose: After the user has chosen a specific hotel, get detailed room types, total prices, and cancellation policies for a given stay period.\n\nTypical call scenarios:\n\nThe user says things like “For this hotel, show me the room types and prices / whether breakfast is included / whether it’s refundable”.\nTypically you first call searchHotels to find a suitable hotel and remember its hotelId, then call this tool.\n\nKey input fields:\n\nhotelId (number): Prefer using the hotelId returned from searchHotels.\nname (string): Only use name-based fuzzy matching when you do not have a reliable hotelId.\ncheckInDate / checkOutDate (string, YYYY-MM-DD):\nIf empty, invalid, or earlier than today, the service will automatically adjust (e.g. use “tomorrow” and +1 day).\nadultCount (number, default 2), childCount (number, default 0), childAgeDetails (number[]):\nSet according to the actual number and ages of guests.\nroomCount (number, default 1): Number of rooms.\ncountryCode (string, default CN): Country code.\ncurrency (string, default CNY): Currency code.\n\nOutput highlights:\n\nOn success, the response usually contains:\nsuccess, errorMessage, hotelId, name, bookingUrl, checkIn, checkOut,\nroomRatePlans: A list of room types and rate plans.\nCommon fields in roomRatePlans:\nroomTypeId, roomName, roomNameCn, ratePlanId, ratePlanName,\ncurrency, totalPrice (total price for this stay), inventoryCount, isOnRequest,\ncancellationPolicies: Cancellation rules (time periods, amounts, descriptions, etc.).\nWhen responding to the user:\nFocus on summarizing key information: main room types, price range, whether free cancellation is available, whether breakfast is included, etc.\nYou may provide bookingUrl (e.g. “You can complete the booking via this link.”).\nOn failure, the tool may return an error message directly (e.g. “Failed to get prices, please try again later”). In that case, explain the failure in natural language and suggest adjusting dates or trying again later.\nTool 3: getHotelSearchTags\n\nPurpose: Fetch metadata for tags that can be used in searchHotels.hotelTags. It is recommended to cache this on the client side and use it to map user intent to tags.\n\nOutput highlights:\n\ntags: A list of tags, each including:\nname: Tag name (for example “Free WiFi”).\ncategory: Category (for example “Core Facilities”, “Hotel Type”, etc.).\ndescription: Human-readable explanation.\nusageGuide:\ntagUsage: How to use tag names in hotelTags.preferredTags / requiredTags / excludedTags.\nexampleRequest: Example request JSON.\n\nTypical categories (non-exhaustive):\n\nBrand & Rating\nSelling Points\nCore Facilities\nFamily & Kids\nService Details\nDining & Service\nTransport & Payment\nView & Room Type\nHotel Type\nPrice Related\n\nWhen you need complex filtering with tags and are not sure about the exact tag names, you can first call getHotelSearchTags, then choose appropriate tags from tags.name to fill into hotelTags.\n\nGeneral dialogue and safety constraints\nIn multi-turn conversations, remember the user’s already-provided destination, dates, number of guests, star rating, and budget as much as possible, and only ask again when information is missing or ambiguous.\nNever fabricate fields or values that are not returned by the MCP tools, especially for sensitive information such as prices and cancellation policies.\nMake it clear that prices and availability are real-time results and may change over time.\nAnswer in the same language as the user (use Chinese for Chinese users, English for English users). Keep responses reasonably concise and highlight the most useful information (e.g. 3–5 recommended hotels or a few key room options), instead of dumping very long lists.\nLocal MCP configuration example (optional)\n\nIn development tools that support local MCP configuration (such as Cursor), you can add the following to mcp.json to mount AIGoHotel MCP as an available server (the name aigohotel-mcp-server is just an example and can be adjusted as needed):\n\n{ \"mcpServers\": { \"aigohotel-mcp-server\": { \"url\": \"https://mcp.aigohotel.com/mcp\", \"headers\": { \"Authorization\": \"Bearer <YOUR_AIGOHOTEL_MCP_TOKEN>\", \"Content-Type\": \"application/json\" } } } }"
  },
  "trust": {
    "sourceLabel": "tencent",
    "provenanceUrl": "https://clawhub.ai/qiao101660/aihotel",
    "publisherUrl": "https://clawhub.ai/qiao101660/aihotel",
    "owner": "qiao101660",
    "version": "1.0.1",
    "license": null,
    "verificationStatus": "Indexed source record"
  },
  "links": {
    "detailUrl": "https://openagent3.xyz/skills/aihotel",
    "downloadUrl": "https://openagent3.xyz/downloads/aihotel",
    "agentUrl": "https://openagent3.xyz/skills/aihotel/agent",
    "manifestUrl": "https://openagent3.xyz/skills/aihotel/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/aihotel/agent.md"
  }
}