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 24 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.
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.
WiFi guest marketing list New
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.
- 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 Guidebook 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.
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. |
| 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. |
| 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 New | 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. |
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.
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. Guidebook 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.
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