MCP stands for Model Context Protocol, an open standard that lets an AI assistant use real tools. Our MCP is a small connector that runs on your computer, signs in to the BetterSTR User API with credentials you create, and gives Claude a set of tools it can call on your behalf. Claude does the work in your account instead of only describing how you might do it.
Set up in three steps
You need a BetterSTR account, Node.js 18 or newer on your machine, and either Claude Desktop or Claude Code. The whole thing takes about five minutes.
bsc_ and the secret begins with bss_. The secret is only displayed once, so save it before you close the dialog. You can revoke a pair from the same page at any time.
~/Library/Application Support/Claude/claude_desktop_config.json, on Windows at %APPDATA%\Claude\claude_desktop_config.json. Paste this in, replacing the two placeholder values with your credentials, then restart Claude Desktop.
{
"mcpServers": {
"betterstr": {
"command": "npx",
"args": ["-y", "@betterstr/claude-mcp"],
"env": {
"BETTERSTR_CLIENT_ID": "bsc_your_client_id",
"BETTERSTR_CLIENT_SECRET": "bss_your_client_secret"
}
}
}
}npx command downloads the connector the first time Claude starts it and caches it after that. Nothing else needs installing.
claude mcp add betterstr -- npx -y @betterstr/claude-mcp \
--env BETTERSTR_CLIENT_ID=bsc_your_client_id \
--env BETTERSTR_CLIENT_SECRET=bss_your_client_secretChecking it works
In either app, type "List my BetterSTR properties". Claude should call the list_properties tool and come back with your active properties. If you see a credentials error, re-copy the secret from your profile. If the tools do not appear at all, confirm Node.js is installed by running node -v in a terminal.
Let Claude do the install
You do not have to touch a config file yourself. Once you have the two credentials from step 1, open Claude and ask it to set the connector up. Claude Desktop and Claude Code both know how to edit their own configuration and restart.
Paste this into Claude
Keeping the secret safe: the credentials only go into the config file on your own machine. If you would rather not paste a secret into a chat window, create a separate credential pair just for this, and revoke it later from your profile if you want.
What Claude can do
The connector currently exposes 51 tools. Below is each area with the kind of request that works well. You do not need to name the tool; describe what you want and Claude picks the right one.
Reservations
Read-only. Claude can search by date window, property, status, confirmation code or guest name.
Payment links Stripe Connect
If your account has Stripe connected, Claude can produce a link a guest opens to pay an extra amount. Creating the link never charges anyone.
Guidebook entries
Your guidebook is a tree: a top-level menu, sub-menus under it, and content cards at the third level. Claude knows the structure and creates each level in order, showing you the plan first.
Guidebook look and settings
Colours, fonts, palettes, host details, map and weather settings, for one property or as the default for every property. Claude shows you which properties already override a setting before changing the default.
Tags
Tags group properties so a pin, a screensaver or a TV banner can apply to all of them at once. Claude can now create tags and add or remove properties.
Map locations
Pins can belong to one property, a tag, or every property. Claude looks the place up on Google first and confirms the details with you before saving.
SMS to guests Charged per message
Claude can text guests who hold a reservation on your account. It cannot text arbitrary numbers. Every send is quoted first, with the recipient list, segment count and total cost, and only goes out after you confirm.
{guide_link} in your message and the server swaps in each guest's short link.Messages must use plain GSM characters, so no emoji. Anything sent to a reservation that has already checked out triggers an extra confirmation, even if you told Claude earlier not to ask.
WiFi status and control WiFi plan required
With a BetterSTR-managed WiFi plan (hosted UniFi, hosted Omada, or your own UniFi controller), Claude can read live network state and act on individual devices.
Fill your guide gaps New
Added October 2026. Every time a guest asks your guide's Ask AI a question the guide can't answer, we note the topic. That list, the same one as the Guide gaps card under Tools → Ask AI queries, is now available to Claude.
Claude can list your open gaps by property and topic, read the exact questions guests asked, ask you for the real answer, add it to the guide in the right place, and mark the gap done. It never makes up house facts like door codes, appliance models or rules; it asks you.
If a property shows your default guide because it has no entries of its own, Claude tells you before adding anything there, because one new entry would replace the whole default guide on that property.
Android TV New
Added October 2026. Claude can now see and run your BetterSTR TVs: settings, power, in-room messages, emergency banners, screensavers and the smart home devices a TV controls.
Everything a TV does is queued for its next check-in, usually within a minute, so Claude tells you a command is queued rather than done and can check back. Pairing a new TV, removing one and changing plans stay in the dashboard.
Fleet health and settings
Emergency banners and messages
An emergency banner shows over whatever the TV is playing, at one property, every property in a tag, or everywhere. It can expire by itself. A message is a one-off note on chosen TVs, like a welcome or a checkout reminder.
Smart home Premium TV
If a TV controls Home Assistant or Shelly devices on the property's network, Claude can read their state and switch them through the TV.
Screensavers
WiFi guest marketing list
Added September 2026. Everything your captive portal has collected, the same list you see under WiFi → Marketing in the members area, is now available to Claude through the list_wifi_guests tool and to any other software through the API.
This one does not need an active WiFi plan. The sign-ins were collected while your portal was running and they remain yours.
Each guest record carries the property, name, email, phone, whether they ticked the marketing opt-in, whether their email was verified, first and last sign-in (in your account timezone) and how many times they have connected. You can narrow the pull by property, by a date window on either the first or the latest sign-in, by opt-in status, or by a search term, and page through as many as you have.
Marketing consent
For anything you plan to email, Claude defaults to guests who ticked the marketing opt-in and tells you it did so. Ask explicitly if you want the full list for another reason, such as a lost-property notice.
Pulling the same data without Claude
The MCP is a thin layer over the BetterSTR User API, so anything Claude can read, your own scripts and automation tools can read too, with the same credentials. The guest list endpoint is the one most hosts ask about, because it feeds a CRM or email platform on a schedule.
curl -u "bsc_your_client_id:bss_your_client_secret" \
"https://api.betterstr.com/user-api/v1/wifi/guests?marketing_opt_in=true&first_seen_from=2026-08-01&format=csv" \
-o new_guests.csv- Zapier, Make, n8n: use an HTTP module with Basic auth on a daily schedule. Filter with
first_seen_fromset to your last run so each pull only brings new sign-ups. - ChatGPT: there is no ChatGPT connector, but a Custom GPT with an Action pointed at the same endpoint and Basic auth works, as does asking ChatGPT to write the Zapier step for you.
- Spreadsheets: drop
format=csvon the URL and import the file. The columns match the CSV export on the members page, with a property id column added at the end. - Anything else: JSON is the default, and the response includes
has_moreplus totals so you can page cleanly.
Machine-readable spec for AI tools and API importers
The whole API is described in an OpenAPI 3.1 document at api.betterstr.com/user-api/openapi.json. Point a ChatGPT Custom GPT Action, Zapier's API import, Postman, or any coding assistant at that URL and it gets every endpoint, parameter, response shape and error code without guessing. For ChatGPT: create a GPT, open Actions, choose Import from URL, paste the link, and set authentication to Basic with your client id as the username and secret as the password.
Prose documentation with worked examples is in the API README; the guest list endpoint is under WiFi.
Guard rails
Because the connector edits live guidebooks and sends real messages, it is deliberately cautious.
- It asks which one you meant. Say "Snowmass" when you own five Snowmass units and Claude lists them and waits, rather than guessing.
- It shows the plan before writing. Creates, edits and deletes are summarised first: the target, the change, and how many properties it touches. Say "go ahead without asking" per request, or "stop confirming for this session", to skip the check.
- Deletes and multi-row changes always re-confirm. Even after blanket consent.
- Anything a guest could see is checked first. TV power, messages, banners and smart home actions are always summarised before they go out, with which TVs or devices they reach. Heating, locks and turning a TV off at an occupied property need your OK for that action, even after "stop confirming".
- SMS is quoted, never fired blind. Recipients, cost and segments come back first. Guests can reply STOP and are excluded from future sends automatically.
- Guest data is treated as personal information. Claude uses it for the task you gave it and does not volunteer it elsewhere.
- Rate limits apply per credential. Reservation and Google Places lookups have their own smaller buckets. Premium accounts get higher limits that scale with property count.
Which parts need a paid plan
Most tools work on a free account. Google Places search and place details need Premium, because each lookup costs us a Google request; you can still add pins by giving coordinates. WiFi status and device control need a BetterSTR WiFi plan. Payment links need Stripe connected. SMS is pay per message from your account balance. On Android TV, smart home control, Plex, HDMI switching and custom live TV need a Premium TV; everything else works on the free TV plan.
Tool reference
For the curious, or for writing your own prompts. Names are what Claude sees; you can mention them directly if you want to force a particular tool.
| Tool | What it does |
|---|---|
| Properties and tags | |
list_properties | Active properties with uuid, name, address, timezone and entry count. Filters: name or address text, city, country. |
list_tags / get_tag | Your property tags, and one tag with the properties it covers. |
create_tag New | Make a new tag. |
attach_tag_properties / detach_tag_property New | Add properties to a tag, or take one out. |
| Guidebook entries | |
list_entries | Top-level menu or the children of one entry. |
get_entry | One entry with its direct children. |
create_entry | Add a menu, sub-menu or content card. |
update_entry | Change title, content, icon, parent, order or visibility. |
delete_entry | Remove an entry and everything under it. |
bulk_create_entries New | Up to 50 entries in one call, for building a whole section. |
| Guide gaps and settings | |
list_guide_gaps New | Topics guests asked Ask AI about that the guide didn't answer, per property. |
get_guide_gap_questions New | The actual questions behind one gap. |
resolve_guide_gap New | Mark a gap as done. |
get_guide_settings / update_guide_settings New | One property's colours, fonts, host details, map and other settings. |
get_guide_defaults / update_guide_defaults New | The same settings as the default for every property. |
list_palettes New | Named colour palettes you can apply. |
| Reservations | |
list_reservations | Filter by check-in, check-out or booking date, status, property or guest name. |
get_reservation | One reservation by id or confirmation code. |
generate_payment_link | A pay-now URL for an extra charge on a reservation. |
send_sms | Quote, then send, a text to guests of chosen reservations. |
| Map locations | |
list_locations | Pins, filterable by scope, property or tag. |
search_places / get_place | Google Places lookup and details. Premium. |
add_location | Create a pin for a property, a tag or all properties. |
update_location | Edit a pin, including moving it between scopes. |
delete_location | Remove a pin. |
| WiFi | |
list_wifi_guests | Your captive-portal guest list with name, email, phone, opt-in, verification and sign-in dates. Filter by property, date window, opt-in or search. No WiFi plan needed. |
list_wifi_controllers | Your controllers and the property each serves. |
get_wifi_status | Access points, client counts by SSID and unauthorised devices for one property. |
list_wifi_clients | Every connected client with filters for AP, SSID, wired and unauthorised. |
authorize_wifi_client | Let a captive-portal device through for a set time. |
kick_wifi_client | Disconnect a client. Always confirmed first. |
| Android TV | |
list_tvs / get_tv New | Your TVs with live power state, last check-in, version and settings. |
update_tv New | Change a TV's settings: title, message, apps, Plex, screensaver and more. |
get_tv_power / set_tv_power New | See whether a TV is on, and turn it on or off. |
send_tv_message New | A one-off message or star-rating request on chosen TVs. |
list_emergency_broadcasts New | Your emergency banners and whether each is live. |
create_ / update_ / delete_emergency_broadcast New | A banner over everything on a property's, a tag's or all your TVs, with optional expiry. |
get_tv_smart_home / control_tv_smart_home New | Read and switch the Home Assistant and Shelly devices a TV controls. Premium TV. |
get_screensaver_defaults / set_ / delete_screensaver_default New | One screensaver for all your TVs, or all TVs in a tag. |
Source code and issue tracker: gitlab.com/icepicknz/betterstr-claude-mcp. The npm package is @betterstr/claude-mcp. The original announcement is on our blog, and the October update with the TV and guide gap tools is here.
Troubleshooting and FAQ
Claude says the BetterSTR tools are not available
Restart Claude Desktop fully after editing the config file, and check the JSON has no trailing commas. In Claude Code, run claude mcp list to confirm the entry exists. Both apps need Node.js 18 or newer on the path.
I get "invalid_credentials" or "credentials_revoked"
The secret is shown once when you create the pair. If you lost it, create a new pair in your profile, update the config, and revoke the old one.
I hit a rate limit
The error tells you how many seconds to wait. Reservation and Google Places lookups have separate, smaller buckets. Premium raises every limit and scales it with your property count.
Can I use this with ChatGPT or another assistant?
The connector speaks MCP over standard input and output, so any MCP-capable host can run it. ChatGPT does not run local MCP servers, but a Custom GPT Action can call the User API directly by importing openapi.json. See pulling the same data without Claude.
Can Claude add or remove a TV, or change its plan?
No. Pairing uses the code on the TV screen, and removing a TV or changing its plan stays in Members → Android TV so nothing billable happens from a chat. Claude can change everything else about a TV you already have.
Claude says a TV command is "queued". Did it work?
TVs check in about once a minute and run queued commands then. Ask Claude to check the TV's power or smart home state a minute later to confirm. A TV that is fully switched off at the wall can't receive a turn-on command.
Is my data sent anywhere other than BetterSTR?
The connector only talks to api.betterstr.com. It has no analytics and stores nothing on disk. What Claude sees during a conversation is governed by your Anthropic plan and settings.
Can I limit what a credential is allowed to do?
Not yet. Each credential pair has full access to your account through the API, so treat the secret like a password. Create one pair per tool or teammate so you can revoke them individually.
Want Claude to do something it cannot yet?
Every new tool so far came from a host asking for it. Tell us the workflow and we will look at adding it.
Suggest a tool Create API credentials