Agent Skills / maison-clients
Install this skill alone, or read it below. Raw file: SKILL.md · references/tools.md
npx skills add https://docs.maison-labs.com --skill maison-clientsMaison — Clients (hotels)
Create and manage hotels on Maison: provision a new client in one call (website, default configuration, first scrape, preview site), read or update a client record, disable or re-enable it, rescrape its website, deploy its demo preview site, read its workspace overview, metrics and activity timeline, and inspect or stop running background jobs. Use for onboarding a hotel, changing its settings, or operating it day to day.
Part of the Maison public API. Read the maison-public-api skill first for authentication, discovery and transport details (https://docs.maison-labs.com/skills/maison-public-api/SKILL.md).
When to use
- Onboard a new hotel —
create_clientdoes the whole provisioning in one call, plan included. - Look a hotel up by name or list a portfolio —
list_clients,get_client. - Find live hotels without conversations (or any live/activity mix) in one call —
list_clientswithliveStatusandactivity(conversations in the lastactivityDaysdays, default 30), sorted by last activity date (orderBy); read the total, never page the whole portfolio. - See a hotel at a glance (setup, jobs, knowledge, people, group, latest activity) —
get_client_overview, the workspace Overview in one read. - Change name, description, demo flag, website, scrape language, manual-knowledge or multi-property flag, or report schedules —
update_client. - Diagnose what happened to a hotel —
get_client_activity,list_client_jobs. - Tell whether a hotel is live (the chat widget loads on its own website) — the live_status field on
get_client/list_clients; count live hotels for a month, optionally under one group —get_live_clients_report.
Before you start
- Send
x-api-key: <key>on every call; the key only reaches/api/v1. GET /api/v1/tools(or MCPtools/list) returns the tools THIS key may run — if a tool below is missing there, you lack a grant; do not retry it.- Client-scoped tools take
clientId(a hotel id).whoamilists the ids you can act on.
Tools
| Tool | What it does | REST | Needs |
|---|---|---|---|
create_client | Provision a hotel in one call: creates the client on its feature plan, links its website as the main knowledge source, seeds the default hotel configuration and chatbot tone, queues the first website scrape (or property discovery for a multi-property group), and deploys the demo preview site. | POST /api/v1/client | clients WRITE (global) |
deploy_preview_site | Create or recreate the hosted demo page that embeds the client's chat widget, and return its URL. | POST /api/v1/client/{clientId}/previewsite | clients EXECUTE (client); plan: update-client |
disable_client | Switch a hotel off as if its account were deleted; nothing is deleted. | POST /api/v1/client/{clientId}/disable | clients WRITE (global); destructive |
enable_client | Switch a disabled hotel back on: its chat widget, chats, channels, agents, jobs, webhooks and public API access resume, and it appears in active listings again. | POST /api/v1/client/{clientId}/enable | clients WRITE (global) |
get_client | The full client record (settings, website, scrape state, schedules, IANA timezone, computed flags) and its automatic live status: live_status (LIVE = the chat widget loaded on the hotel's own website in the last 7 days; CHURN_RISK = no load for 14 days; NOT_LIVE; MANUAL_NOT_LIVE = the override in Settings), live_since, live_last_seen_at, live_last_seen_host, live_manual_not_live. | GET /api/v1/client/{clientId} | clients READ (client); read-only |
get_client_activity | The audit/activity timeline for a hotel (knowledge, configuration, brand, connections, access, reports, account, health, notes), newest first, with cursor paging (direction: newer pages towards the present) and filters: one category or all but one (excludeCategory), failed only, a date range, one knowledge source (source), or one event by its MX-… support reference. | GET /api/v1/client/{clientId}/activity | client-activity READ (client); plan: client-activity; read-only |
get_client_metrics | Headline numbers for one hotel: conversations, knowledge size, last scrape, channel counts. | GET /api/v1/client/{clientId}/metrics | clients READ (client); read-only |
get_client_overview | The client workspace Overview in one read: identity (name, website, demo site), setup progress, scheduled and recent jobs, knowledge, people, group (parent/children), latest activity, latest note and a timeline. | GET /api/v1/client/{clientId}/overview | clients READ (client); read-only |
get_clients_summary | Counts of active, disabled, demo and recently created clients across the caller's portfolio. | GET /api/v1/clients/summary | clients READ (any); read-only |
get_live_clients_report | For one month (YYYY-MM, UTC), the clients that were LIVE at any point in it and how many were still LIVE at month end, optionally limited to the clients under one hierarchy node (nodeId: every descendant in client_hierarchy, the node itself excluded). | GET /api/v1/clients/livereport | clients READ (global); read-only |
list_client_jobs | Pipeline jobs (scrapes, ingests, reports) currently running for a hotel, with task ids usable by stop_client_job. | GET /api/v1/client/{clientId}/jobs | jobs EXECUTE (global); read-only |
list_clients | Page through the hotels the caller can see, with search, status filter and sort. | GET /api/v1/clients | clients READ (any); read-only |
rescrape_client_website | Queue a fresh scrape of the client's main website into its knowledge base. | POST /api/v1/client/{clientId}/rescrape | document-source EXECUTE (client) |
stop_client_job | Stop one running pipeline job for a hotel (a stopped scrape is marked canceled). | DELETE /api/v1/client/{clientId}/job/{taskId} | jobs EXECUTE (global); destructive |
update_client | Partial update of the client record: name, description, demo flag, website, scrape language, manual-knowledge and multi-property flags, report schedules, and the hotel's IANA timezone (400 invalid_timezone for a zone outside the runtime's Intl list). | PUT /api/v1/client/{clientId} | update-client WRITE (client); plan: update-client |
Full input fields for every tool: references/tools.md.
Recommended workflows
Count live member hotels for an invoice
get_live_clients_reportwithmonth(YYYY-MM) and the group'snodeId(the group client id;get_client_hierarchyshows its tree).- Bill on
liveDuringMonthCount(LIVE at any point in the month) orliveAtMonthEndCount, as the contract says;clientslists each hotel with its status at month end.
Onboard a hotel
create_clientwithnameand the publicwebsiteURL (a bare domain is stored as https). Put it on a plan in the same call:planTemplateId(with optionalfeatureOverrides), ornoTemplate: truewith exactlyfeatures. LeavescrapeWebsitetrue unless the knowledge base will be curated by hand.- Set
multiProperty: trueONLY for a group/brand site with several properties; it switches the first run to property discovery (see themaison-hierarchyskill) and the site is never scraped whole. - Poll
list_client_jobs(Maison staff) orget_client_activityuntil the first scrape finishes; thenget_client_metricsto confirm the knowledge base has content. - Share the preview site from
deploy_preview_site(or theclient.previewUrlreturned) and the embed code fromget_widget_embed_code(platform skill).
Refresh a hotel's knowledge from its website
rescrape_client_website(optionallyforce: trueto re-ingest unchanged pages).- Track progress with
get_client_activityfiltered tocategory: "knowledge".
Tips
list_clientsreturns only hotels the key's user may read; a Maison admin sees all.update_clientchanges the client record; hotel configuration (address, hours, policies) lives in themaison-configurationskill (update_hotel_config).disable_clientis a soft disable — nothing is deleted andenable_clientreverses it.get_client_activityfilters bycategory(or all but one withexcludeCategory), knowledgesource, date range and failures;referenceresolves anMX-…support reference to its event.- Every client write (including
update_clientandstop_client_job) is recorded in the hotel's activity feed, exactly as a console change.
Pitfalls
- Do not call
create_clienttwice for the same hotel; it provisions a new client each time.list_clientswithsearchfirst. create_client,disable_clientandenable_clientneed a GLOBALclientsWRITE grant (Maison staff). A hotel user updating their own hotel usesupdate_client.update_clientchanges a report schedule only with the Maison-onlyschedulesWRITE grant (403 otherwise, nothing written).- live_status is recomputed once a day; a widget load shows up the next day. MANUAL_NOT_LIVE is an override set in the console and wins until it is cleared.
get_live_clients_reportneeds a GLOBALclientsREAD grant.
Calling conventions
Same tool, three transports — pick whichever your runtime already speaks. Always send x-api-key.
# REST
curl -X POST "https://maison-labs.com/api/v1/client" -H "x-api-key: $MAISON_API_KEY" -H "content-type: application/json" -d '{ "name": …, "website": … }'// MCP (https://maison-labs.com/mcp, Streamable HTTP): tools/call
{ "jsonrpc": "2.0", "id": 1, "method": "tools/call", "params": { "name": "create_client", "arguments": { "name": …, "website": … } } }// A2A (https://maison-labs.com/a2a): tasks/send with a data part
{ "jsonrpc": "2.0", "id": 1, "method": "tasks/send", "params": { "message": { "role": "user", "parts": [{ "type": "data", "data": { "tool": "create_client", "input": { "name": …, "website": … } } }] } } }Errors are the same everywhere: 401 no/invalid key; 403 forbidden with details.missing (the grants you lack — fall back to the composite's parts or stop); 403 not_entitled (the hotel's plan lacks the feature); 404, 409, 413 too_large, 503. Inputs that fail validation return 400 invalid_input with the Zod issues — fix and retry once.