
Cuddlynest Mcp
io.github.mafedelahozPublished by GitHub account mafedelahozv0.2.1Updated Oct 24, 2026
Search CuddlyNest hotels and read rooms, prices, availability and cancellation policies
Overview
Searches CuddlyNest hotels and reads room options, prices, availability and cancellation policies from public listing pages, read-only.
- What you can do
- Search a destination for places and top hotels, with optional broader city hotel list
- Read one hotel's static details: name, address, coordinates, star rating, amenities, images
- Read room offers for given dates: unit price, remaining rooms, price breakdown, cancellation policy
- Echo back guest counts, dates and currency for downstream use
- When to use it
- Useful when you want an assistant to compare CuddlyNest hotel options and room prices for a trip without opening a browser yourself. It is read-only, so it suits research and price comparison rather than booking.
- Requirements
- Runs locally over stdio via npx; needs Node.js 18+ and a Chromium build for Playwright (installed by npm install, or run npx playwright install chromium manually). Optional CUDDLYNEST_SCRAPE_TIMEOUT_MS sets the render wait (default 35000 ms). Network access to CuddlyNest public pages and APIs is required.
Installation
In SourceWeft
- Open Cuddlynest Mcp in the dashboard and add it to a workspace.
- Enable the server for the chats that should use its tools.
Desktop only via STDIO. STDIO servers start a local process, so they need the SourceWeft desktop host.
Other MCP clients
Follow the launch instructions in the repository.
README
CuddlyNest Search & Listings — MCP Server
A Model Context Protocol (MCP) server for searching CuddlyNest hotels and retrieving listing details, including room options, prices, availability and cancellation policies.
Read-only by design: search and listing details only. No booking, no payment.
How it gets the data
This server reads that data the same way a visitor does: it opens the real, public listing page in a headless browser (Playwright/Chromium), lets the page's own JavaScript load the rooms, waits for them to render, and reads the result out of the DOM.
The DOM extraction, and how it breaks
extractRoomsFromDom() walks every price-shaped text node (COL$742,637), then
walks up its React fiber tree to the nearest ancestor component whose props
carry both unit_price and roomGroups. Those props are the room offer the
page already rendered.
This is coupled to CuddlyNest's current frontend internals (a React prop shape,
not a stable contract). If they ship a frontend change it can start returning
zero rooms even though the public page still shows prices. The single place to
update is the detector condition 'unit_price' in p && 'roomGroups' in p in
scrape-listing.ts. npm run e2e:sansiraka is meant to
catch that early (non-zero exit, not a silent empty result).
The fromPriceText ("From COL$…") field uses a looser heuristic and can come
back null even on a healthy scrape; rooms.fromPrice (cheapest extracted
unit) is the reliable figure.
Requirements
- Node.js 18+
- A Chromium build for Playwright.
npm installrunsplaywright install chromiumautomatically (postinstall); if that is blocked in your environment, runnpx playwright install chromiumonce by hand.
Installation
Published as cuddlynest-mcp on
npm and listed in the official MCP registry
as io.github.mafedelahoz/cuddlynest-mcp.
Add "--ignore-robots-txt" to args to bypass robots.txt for the
listing-page fetches. CUDDLYNEST_SCRAPE_TIMEOUT_MS (default 35000) caps how
long the browser waits for prices to render.
An MCPB bundle (.mcpb) for Claude Desktop is attached to each
GitHub release — note it
does not bundle Chromium, so run npx playwright install chromium once after
installing it that way.
Remote / Streamable HTTP
Default transport is stdio. For a hosted deployment, run it over Streamable HTTP:
Tools
Both tools are annotated readOnlyHint: true — they never write, book, or pay.
cuddlynest_search
Search a destination and the top hotels there, from public CuddlyNest APIs
(autosuggestion-2-0 for the fuzzy match, discovery-pages geo pages for the
broader city list). Prices are not here — pass a hotel's productId to
cuddlynest_listing_details.
Returns: { query, guests, places[], city, hotelSource, hotelCount, hotels[], note }.
Each hotels[] entry: productId, name, url, slug, propertyType,
starRating, guestRating (/10) + guestRatingText, reviewCount, and — from
the geo page — images[], distanceFromCenterKm, featuredAmenities[].
hotelSource is "autosuggest" or "autosuggest+geopage". The list is
top-matches scale, not full inventory — CuddlyNest's real results page
(/sr/…) is bot-blocked and Disallowed in robots.txt.
cuddlynest_listing_details
Static basics and rooms/pricing for one hotel.
Returns: { productId, hotelUrl, guests, staticListing, staticError, rooms, roomsError, notes }.
rooms.units[] is the extracted room offers, each with title, partnerName,
unitPrice, currency, remainingRooms, guests, cancellationPolicyType,
cancellationPolicyText, priceBreakdown, roomFilters. rooms also carries
fromPrice, partnersSeen, listingUrl, scrapedAt.
Development
Architecture
index.ts— MCP server, tool schemas, stdio and Streamable HTTP transports,robots.txthandlingcuddlynest.ts— hotel-URL parsing, static-listingld+jsonparse, destination autosuggestion, result shapingscrape-listing.ts—resolveListingPath,buildListingUrl,scrapeListing(headless browser),extractRoomsFromDom(React-fiber walk)util.ts— generic object/JSON helpers
License
MIT — see LICENSE.
Source: README.md at commit 2e96075
Tools
0Version history
1- v0.2.1LatestSep 16, 2026
Score
50% of the applicable checks met
How complete this listing is, computed from the registry entry, the endpoint and public sources. Not a rating of the server and not a statement that it is safe or working today: reachability is a dated check, and no installs or reviews go into the score.
- Reached in the last 30 days25 pts
Keep the endpoint answering the MCP handshake; SourceWeft probes it every 30 days.
- Auth declared10 pts
Declare the credential headers in the registry entry, or keep the endpoint answering the probe so its auth can be classified.
- Tools listed15 pts
Answer tools/list without a credential, or ship a package that starts in a sandbox without one.
- DescriptionRequired15 pts
- Logo10 pts
- Documentation15 pts
- License10 pts