MCP Server
Connect AI assistants to WedStay's wedding venue and vendor data via the Model Context Protocol. No API key required for search and pricing.
MCP Server
WedStay provides a remote MCP (Model Context Protocol) server that gives AI assistants direct access to wedding venue search, real pricing, vendor discovery, and booking — all without requiring an API key for read operations.
MCP Endpoint:
Connect your AI assistant
Claude Desktop
Add WedStay to your Claude Desktop configuration:
macOS: ~/Library/Application Support/Claude/claude_desktop_config.json
Windows: %APPDATA%\Claude\claude_desktop_config.json
Restart Claude Desktop after saving. You should see WedStay tools in the tools list.
Claude Code
Add to your project's .mcp.json:
Cursor
Add to your Cursor MCP settings (.cursor/mcp.json in your project or global settings):
Streamable HTTP (modern clients)
If your MCP client supports Streamable HTTP natively (no mcp-remote bridge needed):
Available tools
The MCP server exposes 16 tools (plus 3 guided prompts) to AI assistants.
Every tool carries readOnlyHint, destructiveHint, openWorldHint and idempotentHint, so a client can tell a lookup from a send before it calls anything. The 14 read tools are marked read-only. The two write tools are marked not read-only, not destructive, not idempotent and open-world: each call creates a real lead that reaches people outside the conversation, and it deletes or changes nothing. Their descriptions start with "Creates a real lead; requires the user's explicit go-ahead."
Every tool also declares an outputSchema. A result that is not an error carries structuredContent that matches it, next to a text block. The text block of every tool is what it was before, so a client that reads only text sees no change.
A search that matches nothing returns an empty list in structuredContent, not an error. A lookup by a slug that does not exist (get_venue, get_vendor, get_blog_post) is an error result that says so in its own sentence.
Read tools (no authentication required)
| Tool | Description |
|---|---|
search_venues | Search wedding venues by state, city, capacity, venue type, amenities, and budget. Returns up to 50 results per call with coordinates, pricing (the venue page's own figures), a hero photo, and booking links. |
get_venue | Get full details for a venue by slug: description, coordinates, capacity, pricing, up to 5 photos, testimonials, and a direct booking link. |
calculate_pricing | With a venue slug, that venue's own total from its venue page calculator, in its listed currency. Without one, a regional estimate by region, guest count, venue type, and season, with an itemized breakdown plus comparison_vs_traditional so agents can render comparison tables. |
search_vendors | Search vendors across 11 service categories by location, price, and keyword (up to 50/call), each with its primary photo. |
get_vendor | Get vendor profile including bio, pricing with unit (e.g. "per person"), up to 5 portfolio photos, policies, social links, and contact or affiliate link. |
list_vendor_categories | Get all vendor categories with active vendor counts. |
search_inspiration | Search WedStay wedding inspiration photos by style, setting, color palette, mood, or season. Returns photo URLs with source venue/vendor links for booking. |
search_blog_posts | Search WedStay wedding blog posts by tag, keyword, or featured status. Covers wedding planning, trends, venue features, DIY tips. |
get_blog_post | Get full plaintext content of a blog post by slug. Token-efficient body with link back to the live article. |
list_blog_tags | Get all blog tag slugs with active post counts. Use to discover filters for search_blog_posts. |
get_cost_benchmarks | Median and typical-range base prices for exclusive use of a whole estate by US state, venue type, or country, computed from live listings (min 3 per figure). Each figure covers the whole minimum stay, not one night, before fees, in USD. Backs the Wedding Venue Cost Index. |
get_regional_cost_ranges | The whole wedding budget range for a US state, city, or destination country, all in, with that region's average guest count, its peak/shoulder/off-season multipliers, its Friday/Saturday/Sunday multipliers, and which months fall in each season. Pass season and guests to scale the range for them. Not a venue price: get_cost_benchmarks gives base venue prices for the minimum stay. |
compare_venues | Compare 2 to 4 venues side by side (capacity, sleeping capacity, bedrooms, price range, location, type) by slug. |
search_wedstay_knowledge | WedStay's own planning notes and policies, searched by meaning: how booking works, tours and the tour deposit, cancellations and refunds, property rules, insurance and the vendor COI, the Collective, WedStay One. Returns the closest sections verbatim with their note titles. Not a venue price and not availability. |
Guided prompts
Clients that support MCP prompts (Claude Desktop, Claude Code, Cursor) can offer these as one-click workflows:
| Prompt | Arguments (all optional) | Description |
|---|---|---|
find_perfect_venue | location, guest_count, vibe, budget | Guided venue search by location, guest count, vibe, and budget. |
compare_wedding_venues | venues (2 to 4 names or slugs) | Compare specific WedStay venues side by side. |
plan_wedding_budget | location, guest_count, season (peak, shoulder, or off) | Estimate a wedding weekend budget from guest count, location, and season. |
Write tools (require valid guest contact info)
| Tool | Description |
|---|---|
submit_venue_inquiry | Submit a real booking request. A WedStay concierge replies within 24 hours. |
submit_vendor_inquiry | Send a contact request to a vendor. Screened by WedStay, then sent to the vendor, who replies within 3 business days. |
Write tools create real leads in WedStay's pipeline. The AI assistant must collect valid guest name, email, and event details, and get the user's explicit go-ahead, before submitting.
Both write tools require sms_consent. Ask the couple: "OK if WedStay texts you about this request?" Send true only if they said yes. With false, WedStay replies by email. The answer is stored with the inquiry, with the time and the source.
Each guest email can submit up to 20 inquiries per hour across both tools. Sending the identical request again within 24 hours reports the first result again, creates no second inquiry, and does not count toward that limit.
Both tools answer in one shape, with a status that says what happened. See Inquiry results.
Example conversations
Once connected, you can ask your AI assistant things like:
- "Find wedding venues in California for 120 guests"
- "How much would a 3-night wedding at an estate in Texas cost for 80 guests?"
- "Show me photographers in the Los Angeles area"
- "What's the starting price for Sidpix Studios?"
- "Submit a booking request for Texas Wedding Village for October 2026"
The AI will use WedStay tools automatically to answer with real, up-to-date data.
Tool reference
search_venues
| Parameter | Type | Required | Description |
|---|---|---|---|
state | string | No | State name (e.g. "Texas", "California") |
city | string | No | City name (e.g. "Austin", "Palm Springs") |
venue_type | string | No | Case-insensitive match within the property type, e.g. estate, villa, ranch, mansion, cabin, castle, chalet, lodge, cottage, barn, barndominium, hacienda, farmhouse, chateau |
capacity_min | number | No | Minimum event (guest) capacity |
capacity_max | number | No | Maximum event (guest) capacity |
amenities | string | No | Comma-separated: pool, hot-tub, ocean-view, mountain-view, outdoor-ceremony, pet-friendly |
budget_max | number | No | Keep venues whose pricing.starting_total.amount (the venue page's "starts at" for the minimum stay) is at or below this. Compared in each venue's listed currency: euro venues compare in euros, Australian venues in Australian dollars. Venues with no listed price are left out |
limit | number | No | Max venues to return (1-50, default 20) |
amenities and budget_max are applied before limit. Any other argument is an error result (isError: true) that names it and lists the valid arguments, for example "Unknown argument 'price_max'. Did you mean budget_max?". This tool is the only one that refuses an argument it does not declare; the other tools ignore one.
Each result includes: slug, name, city, state, country, latitude, longitude, property_type, venue_type, capacity_min (how many the venue sleeps), capacity_max (event capacity), bedrooms, beds, bathrooms, price_range (the base price for the whole minimum stay, not per night, in the venue's listed currency, for example "$5,000 to $6,000 for the 2-night minimum (base, before fees)"), pricing (the same price as structured data: currency, min_nights, weekday_base, weekend_base, extra_night, and starting_total, which is exactly the venue page's "Your WedStay starts at" figure), hero_image (an absolute CDN URL), description, amenities, and a bookable url. gathering_spaces is always null and kept only so the response shape stays stable.
get_venue
| Parameter | Type | Required | Description |
|---|---|---|---|
slug | string | Yes | The venue's full slug from search results |
Returns the venue with description, seo_description, categories, capacity and room counts, price_range, pricing, amenities, hero_image, photos (up to 5 in gallery order, each { url, category, is_featured }), total_photos, testimonials (guest_name, rating, review, event_date), and the booking url. Photo URLs are absolute CDN URLs, medium-size WebP; the full gallery is on the venue page.
calculate_pricing
| Parameter | Type | Required | Description |
|---|---|---|---|
slug | string | No | A venue's full slug from search_venues. Prices that venue with its own pricing, exactly as its venue page calculator does; region, venue_type and season are then ignored |
region | string | No | Regional estimate only. Default california. A region id, name or common short form (case insensitive), for example texas, TX, tuscany or Italy - Tuscany. The ids are listed under Pricing. Any other value is an error that lists the ids; it is never priced on a generic default |
event_type | string | No | weekday or weekend. Default weekend for a regional estimate; weekday (the venue page default) with a slug |
event_guests | number | No | Regional estimate: 1 to 500, default 100. With a slug: 0 to the venue's event capacity, as on the venue page, default the venue page's own |
overnight_guests | number | No | Regional estimate: 1 to 350, default 20. With a slug: 0 to what the venue sleeps, as on the venue page, default the venue page's own |
nights | number | No | 2 to 7. Default 2 for a regional estimate; with a slug, the venue's minimum stay, which is also the fewest nights it takes |
venue_type | string | No | Regional estimate only: barn, estate, resort, winery, garden, historic, ranch, villa (default: estate) |
season | string | No | Regional estimate only: peak, shoulder, off (default: peak) |
Returns typed structuredContent agents can render as comparison tables. Every result has source (venue_engine or regional_model), currency, total, nights, breakdown, summary, calculator_url and attribution.
With a slug (source: venue_engine):
totalis the venue page calculator's total for those inputs, in the venue's listed currency (euro venues in euros, never converted; Australian venues in Australian dollars, rounded up to the nearest 100 as on the page). Called with only aslug, it equals the venue page's "starts at" figurebreakdown={ base, additional_nights, extra_guest_charges, cleaning_fee, service_fee, tax, security_deposit }(the deposit is refundable and not part of the total)venue={ slug, name, min_nights, url }, plus theevent_type,event_guests,overnight_guestsused andrate_datefor converted prices- A venue with no itemized pricing, or inputs past its capacity or minimum stay, returns an error that says so
Without a slug (source: regional_model, always USD):
estimated_total(same astotal),per_night_average(the total divided by nights: an average for comparison, not a nightly rate any venue charges;per_nightis a deprecated alias with the same value until 2027-01-06)price_range={ low, high, label }breakdown={ base_venue, cleaning_fee, event_guest_charge, overnight_guest_charge, additional_nights, season_adjustment, service_fee, tax }comparison_vs_traditional={ traditional_estimate, savings_dollars, savings_percent, note }, ornullfor regions without a traditional-cost baseline (most international and some newer US markets)parameters(echoed inputs, includesregion_idandvenue_type_label)
search_vendors
| Parameter | Type | Required | Description |
|---|---|---|---|
category | string | No | Exact service category: "Photography & Videography", "Wedding Planning", "Floral Design", "Food & Bev" (catering and bar), "DJ & Music", "Hair & Makeup", "Transportation", "Cake & Desserts", "Rentals", "Jewelry", or "Other" |
state | string | No | State name |
city | string | No | City name |
search | string | No | Free-text search |
price_max | number | No | Maximum starting price (USD) |
limit | number | No | Max vendors to return (1-50, default 20) |
Each result includes: slug, business_name, tagline, service_category, service_subcategories, primary_city/state, bio, starting_price, price_unit (per_person · per_event · per_hour · per_item), years_in_business, weddings_completed, specialties, featured_image_url (the vendor's primary photo), logo_url (reserved, currently null), is_affiliate_only, affiliate_link, and a profile url. get_vendor adds pricing_structure, service_areas, website, instagram, facebook, tiktok, photos (up to 5, primary first, each { url, category, alt_text }), total_photos, portfolio_description, vendor_policies (booking, payment, cancellation, timeline, insurance), average_rating, and review_count.
Vendor photo URLs are absolute CDN URLs: the medium-size WebP when one has been generated, otherwise the original image. The full portfolio is on the vendor's profile page.
Affiliate-only vendors: when
is_affiliate_onlyis true, the vendor takes no inquiries through WedStay, andsubmit_vendor_inquirycreates no lead for it.structuredContentsaysstatus: "affiliate_only"and carries the vendor'saffiliate_link. The text block, which older clients read, still carries theaffiliate_only_vendorcode aserror. Direct the user toaffiliate_linkinstead. When it isnull,messagepoints to the vendor's WedStay page.
get_vendor
| Parameter | Type | Required | Description |
|---|---|---|---|
slug | string | Yes | Vendor URL slug from search results |
list_vendor_categories
No parameters. Returns categories[], each { name, slug, vendor_count } for the active vendors in it. Use name as the exact category value for search_vendors.
search_inspiration
| Parameter | Type | Required | Description |
|---|---|---|---|
style | string | No | rustic, modern, bohemian, coastal, luxury, romantic, classic, minimalist |
setting | string | No | outdoor, indoor, garden, mountain, beach, lakefront, forest, desert, vineyard, ballroom, tent, poolside |
color | string | No | neutral_white, warm, cool, earth_tones, pastel, jewel_tones, moody_dark, vibrant, monochrome |
mood | string | No | elegant, romantic, serene, intimate, grand, celebratory, joyful, dramatic |
season | string | No | spring, summer, fall, winter |
limit | number | No | Max photos to return (1-50, default 20) |
offset | number | No | Pagination offset (default 0) |
Returns photos[] (each with image_url, alt, the venue or vendor it was shot at as source_type, source_name, source_slug, city, state and source_url, plus its styles, settings, colors, moods and season tags), total, and next_offset (null on the last page).
submit_venue_inquiry
| Parameter | Type | Required | Description |
|---|---|---|---|
property_slug | string | Yes | Venue slug |
start_date | string | Yes | Check-in date (YYYY-MM-DD) |
end_date | string | Yes | Check-out date (YYYY-MM-DD) |
event_guests | number | Yes | Number of event guests |
overnight_guests | number | No | Overnight guests |
guest_name | string | Yes | Guest full name |
guest_email | string | Yes | Guest email |
guest_phone | string | No | Phone number |
message | string | No | Additional details |
sms_consent | boolean | Yes | Ask the couple: 'OK if WedStay texts you about this request?' Send true only if they said yes. |
submit_vendor_inquiry
| Parameter | Type | Required | Description |
|---|---|---|---|
vendor_slug | string | Yes | Vendor slug |
guest_name | string | Yes | Guest full name |
guest_email | string | Yes | Guest email |
guest_phone | string | No | Phone number |
event_date | string | No | Event date (YYYY-MM-DD) |
event_location | string | No | Event location |
event_guests | number | No | Guest count |
budget_range | string | No | Budget range |
service_needed | string | No | Specific service |
message | string | No | Message for the vendor |
sms_consent | boolean | Yes | Ask the couple: 'OK if WedStay texts you about this request?' Send true only if they said yes. |
Inquiry results
Both inquiry tools answer in one shape. structuredContent always has these four fields:
| Field | Type | Description |
|---|---|---|
status | string | One of the six values below |
inquiry_id | string or null | The id of the inquiry. Set only when status is submitted, and null there too when a venue request came back without an id |
message | string | A plain sentence that describes the outcome |
affiliate_link | string or null | Set only when status is affiliate_only, and null there too when the vendor has no link on file |
| Status | Meaning |
|---|---|
submitted | WedStay has the inquiry. Sending the identical request again within 24 hours returns this same confirmation and creates no second inquiry |
in_progress | The same request is being submitted right now, or was just answered unconfirmed. Nothing new was sent |
rate_limited | The guest email has used its 20 inquiries for the hour. Nothing was sent |
not_found | No listed venue or vendor has that slug. Nothing was sent |
affiliate_only | submit_vendor_inquiry only. The vendor takes no inquiries through WedStay. Nothing was sent |
unconfirmed | WedStay could not confirm the request. It may already have been received, so do not send it again automatically |
No result carries the guest's name, email or phone.
Two outcomes are error results (isError: true) with their own sentence and no structuredContent, not statuses:
submit_vendor_inquirywhen WedStay's database refuses to store the inquiry: "Failed to submit vendor inquiry. Please try again." Nothing was stored, so trying again is a fresh attempt.- A request that conflicts with a different one already recorded under the same request key: "A different booking request is already recorded for this guest and venue. Change the details or wait before retrying." or "A different inquiry is already recorded for this guest and vendor. Change the details or wait before retrying."
The text block beside
structuredContentis what it was before this release, for older clients that read only text. Forsubmittedit is JSON withinquiry_id,statusandmessage. For an affiliate-only vendor it is JSON witherror: "affiliate_only_vendor",messageandaffiliate_link. For the other four statuses it is themessagesentence.
search_blog_posts
| Parameter | Type | Required | Description |
|---|---|---|---|
tag | string | No | Ghost tag slug (e.g. wedding-trends-2026, property-feature, wedding-planning) |
search | string | No | Free-text keyword match against title and excerpt |
featured | boolean | No | Only return featured posts |
limit | number | No | Max posts to return (1-25, default 10) |
page | number | No | Page number (1-based, default 1) |
Each result includes: slug, title, excerpt, feature_image, published_at, reading_time, tags[], primary_author, and url.
get_blog_post
| Parameter | Type | Required | Description |
|---|---|---|---|
slug | string | Yes | Blog post slug from search_blog_posts |
Returns plaintext body for token-efficient agent consumption: slug, title, feature_image, excerpt, published_at, reading_time, word_count, tags[], primary_author, content_plaintext, url.
list_blog_tags
No parameters. Returns tags[], each { slug, name, post_count }, sorted by post count descending, plus total. Use to discover valid tag filters for search_blog_posts.
get_cost_benchmarks
Optional state, venue_type (estate, villa, ranch, mansion), and country. Returns benchmarks[] with scope, label, median_base_per_stay, typical_low_base_per_stay, typical_high_base_per_stay, converted_from, and listings, plus currency (always USD), fx ({ eur_to_usd, rate_date }, the rate applied to euro-priced listings), as_of, note and source_url. Called with no arguments, it returns the full national, per-state, per-venue-type, and per-country breakdown. Each figure is the base price for exclusive use of the whole estate covering its minimum stay (usually 2 nights), not per night, before cleaning, service fee, and tax. The median_nightly, typical_low_nightly and typical_high_nightly keys are deprecated aliases with the same values, kept until 2027-01-06; they were never nightly rates. A filter with too few live listings to report (a state or country needs at least 3) returns an empty benchmarks[] and says so in note.
get_regional_cost_ranges
Optional slug (an exact region slug such as california, los-angeles, costa-rica), state (a state name, a USPS code, or a destination country), city, season (spring, summer, fall, autumn, winter, a month name such as June, or a month number 01-12), and guests (1-2000). One of slug, state or city is required.
Returns the region's published whole wedding budget range (range), the guest count that range is built on (average_guest_count), its seasonal_multipliers and day_of_week_multipliers, the months in each season (popular_seasons), the resolved season, and scaled (that range moved by the guest count and season multipliers). coverage says how complete the data is: calculator (the region's own multipliers), parent_state (a city using its state's multipliers) or insights_only (a published range with national fallback multipliers).
basis says how the range was arrived at: modelled or authored. Ranges on different bases are not comparable, so do not rank or average one against the other. range.modelled is true on a modelled range and absent on a hand authored one. basis is absent when covered is false.
season.unclassified is true when none of the season's months appear in that region's own season lists, so the shoulder rate is a fallback rather than a classification. California is the live case: it names no summer month, so June, July and August price at the shoulder rate. Say so rather than implying summer was priced.
A region with no data returns covered: false and covered_regions, the full list of regions that do have data. It never substitutes a neighbouring region or a national average. A call with no region, or a season that is not a season or month, also returns covered: false, with the reason in note.
These figures are a market range for the region and an estimate, never a quote and never the price of a specific venue.
compare_venues
Requires slugs (an array of 2 to 4 venue slugs from search_venues). Returns a venues[] side-by-side of event capacity, sleeping capacity, bedrooms, bathrooms, price range, location, type, hero image, and booking URL, in the order requested, plus found and requested counts. Slugs that do not match a published venue are skipped; if none match, venues is empty and found is 0.
search_wedstay_knowledge
Requires query (3 to 300 characters, the question in the couple's own words). Optional limit (1 to 10, default 5). Returns data[] of the closest sections of WedStay's own authored planning notes, each with title (the note), heading (the section), body (verbatim), kind, slug and a fusion score, plus the echoed query, as_of and note. degraded is text_only when the semantic half of the search was unavailable and only word matching ran.
The notes cover how booking works, tours and the tour deposit, cancellations and refunds, property rules (noise, decor, alcohol, pets, children), insurance and the vendor certificate of insurance, the Collective vendor network and WedStay One. Quote what comes back rather than paraphrasing a policy into a promise. It is never a price for a specific venue (calculate_pricing) and never availability.
How it works
The WedStay MCP server uses the Streamable HTTP transport. One endpoint serves MCP protocol revision 2026-07-28 and the earlier revisions 2025-11-25, 2025-06-18, 2025-03-26 and 2024-11-05.
The server is stateless on every revision. It issues no session id, and each request is a separate HTTP POST that stands on its own. GET and DELETE answer 405 with a JSON-RPC error (-32000, "Method not allowed.") as application/json, because there is no stream to open and no session to close. The server advertises no list change notifications for tools or prompts, because its tool and prompt lists do not change while it runs.
Whichever revision a client speaks, read tools return structured JSON from WedStay's live venue, vendor, and pricing data, and write tools (inquiries) create real leads that flow into WedStay's booking pipeline.
Earlier revisions (2025-11-25 and before)
- The client sends an
initializerequest that names its protocol revision - The server answers with the revision it will speak and its capabilities (tools and prompts)
- The client lists and calls tools as needed
The handshake is not required. A tools/call sent with no initialize before it is answered too.
Replies come back as a server-sent event stream that carries one JSON-RPC message. A client whose Accept header does not list both application/json and text/event-stream gets that message as one plain JSON document instead.
Revision 2026-07-28
There is no handshake. Every request carries a _meta envelope inside params that names the protocol revision and the client's capabilities, and repeats the revision and the method in the MCP-Protocol-Version and Mcp-Method headers. A tools/call also repeats the tool name in an Mcp-Name header. Replies are plain JSON.
server/discover returns supportedVersions (the revisions served without a handshake) and the server's capabilities:
A tool call carries the same envelope, next to the tool's name and arguments:
A request that sends the MCP-Protocol-Version: 2026-07-28 header without the envelope, or whose headers do not match its body, is refused with HTTP 400.
Access and rate limits
No API key and no sign in are required. Rate limits are applied per caller instead:
- Up to 600 requests per minute per IP address. Every request to the endpoint counts, not only tool calls. Over the limit, the server answers HTTP 429 with a JSON-RPC error (
-32000). This is the only request limit on the endpoint, and its responses carry noX-RateLimit-*headers. - Up to 20 inquiries per hour per guest email, across both inquiry tools.
A request may still carry a WedStay API key: a value that starts with ws_, sent as Authorization: Bearer, X-API-Key or X-WedStay-Key. The server checks a key it is given, and refuses an unknown or revoked one with HTTP 401 and JSON-RPC error -32001. A valid key changes neither the tools nor the limits. A bearer token that is not a WedStay key is ignored.
What changed in server version 2.0.0
The server now runs on a newer MCP library. Every tool keeps its name and its place in the list. A client may notice these differences:
- Protocol revision 2026-07-28 is served, next to the earlier revisions listed above.
- Three tools take new arguments:
search_venuestakesbudget_max,calculate_pricingtakes a venueslug, and both inquiry tools now requiresms_consent. search_venuesrefuses an argument it does not declare, with an error result that names it and lists the valid arguments. Before, it ignored one. The other tools still ignore an argument they do not declare.- Tool schemas declare JSON Schema draft 2020-12. They declared draft-07 before.
- Every tool carries
readOnlyHint,destructiveHint,openWorldHintandidempotentHint. - Every tool declares an
outputSchemaand returnsstructuredContentbeside its text block. Eight of the 16 had neither before. The text block of every tool is unchanged, so an older client that reads only text sees what it saw before. - Both inquiry tools return
structuredContentwith four fields:status,inquiry_id,messageandaffiliate_link.statusis one ofsubmitted,in_progress,rate_limited,not_found,affiliate_onlyandunconfirmed. For an affiliate-only vendor the structured field isstatus: "affiliate_only", and the text block still carries theaffiliate_only_vendorcode. - Tools no longer list an
executionkey. - Two inquiry answers that were plain text are now error results (
isError: true), with the same sentences as before: a vendor inquiry that WedStay's database refuses to store, and a request that conflicts with one already recorded. A vendor inquiry whose outcome is unknown, for example because the connection was lost while it was being stored, now answersstatus: "unconfirmed"instead, as the venue tool does when it cannot confirm a request. - The server no longer advertises list change notifications for tools or prompts, because its tool and prompt lists do not change while it runs. This holds on every revision: the
initializeresult of the earlier revisions advertised them before this release, andserver/discoveron 2026-07-28 does not advertise them either. - A call to a tool name that does not exist is answered with a JSON-RPC error (
-32602). It was an error result before. Arguments that a tool rejects are still an error result (isError: true). - JSON that is not a JSON-RPC message is answered with
-32600. It was-32700before. - A request body that is not JSON is answered with HTTP 400 and a parse error (
-32700). Before, it got no answer. GETandDELETEstill answer 405 with the same JSON-RPC error body, now sent asapplication/json.- Responses from the MCP endpoint no longer carry the site's
X-RateLimit-Limit,X-RateLimit-RemainingandX-RateLimit-Resetheaders, and the site's separate limit of 400 requests a minute, with its own 429 that was plain JSON rather than a JSON-RPC error, no longer applies to it. The endpoint's own limit of 600 requests a minute per IP address is the only one; its 429 is described under Access and rate limits. - A tool that fails returns one fixed line as an error result (
isError: true), the same for every tool:Something went wrong on our side. Please try again in a moment.The raw error text is no longer sent. Results a tool returns on purpose are not replaced: not found, rate limited and invalid arguments read as they did. - The legacy paths
/api/ai/sseand/api/ai/messageare no longer served by the MCP server. The endpoint path/api/ai/mcpis unchanged.
Data attribution
Read tool results include an attribution notice. If you're building a product that surfaces WedStay data, please include visible attribution linking back to thewedstay.com.
Terms of use
By connecting to the WedStay MCP server, you agree to our Terms of Service, including Section 31 (API, MCP Server & Developer Access). Key restrictions:
- Real-time queries only — Each tool call must correspond to a specific end-user query. Batch processing and bulk extraction are prohibited.
- No AI training — Do not use WedStay data to train, fine-tune, or develop machine learning models or LLMs.
- No competing products — Do not use WedStay data to build competing venue search or booking services.
- No data harvesting — Do not scrape, store, or build databases from WedStay data.
- Attribution required — Display "Data by WedStay" when surfacing venue or vendor data to end users.