Agent Skills / maison-channels

Install this skill alone, or read it below. Raw file: SKILL.md · references/tools.md

bash
npx skills add https://docs.maison-labs.com --skill maison-channels

Maison — Messaging channels

Operate a hotel's messaging channels: list connected Instagram, Messenger, WhatsApp and email channels with their auto-reply state, change auto-reply or draft-only settings, disconnect a channel, manage per-channel reply instructions, get the browser link that starts a channel connection, and opt a hotel into the ChatGPT guest app. Use when a hotel wants the concierge on a social or email channel, or when replies on a channel misbehave.

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

  • See which channels a hotel has connected — list_channels.
  • Pause automatic replies on a channel — update_channel_settings with autoReplyEnabled: false or draftOnly: true.
  • Give channel-specific tone or rules — add_channel_instruction.

Before you start

  1. Send x-api-key: <key> on every call; the key only reaches /api/v1.
  2. GET /api/v1/tools (or MCP tools/list) returns the tools THIS key may run — if a tool below is missing there, you lack a grant; do not retry it.
  3. Client-scoped tools take clientId (a hotel id). whoami lists the ids you can act on.

Tools

ToolWhat it doesRESTNeeds
add_channel_instructionAppends one titled operator instruction to a channel's ordered list.POST /api/v1/client/{clientId}/channel/{channelType}/instructionupdate-client WRITE (client); plan: update-client
connect_chatgpt_channelOpts the hotel into the ChatGPT guest-app integration — records the connection in client_channels.POST /api/v1/client/{clientId}/channel/chatgpt/connectupdate-client WRITE (client)
delete_channel_instructionRemoves one instruction from a channel's list by its id.DELETE /api/v1/client/{clientId}/channel/{channelType}/instruction/{instructionId}update-client WRITE (client); plan: update-client; destructive
disconnect_channelPermanently disconnects and deletes a channel connection.DELETE /api/v1/client/{clientId}/channel/{channelId}update-client WRITE (client); plan: update-client; destructive
get_channel_connect_linkReturns the URL the operator must open in a signed-in browser to start an OAuth channel connection (Instagram, Messenger, Gmail, Outlook) — the connection is the third party's consent screen, so it cannot complete over the API.GET /api/v1/client/{clientId}/channel/{channel}/connectlinkupdate-client WRITE (client); plan: update-client; read-only
list_channel_instructionsReturns all operator-authored style instructions for every channel type (WEB, GMAIL, OUTLOOK, INSTAGRAM, MESSENGER, WHATSAPP, SMS, CHATGPT).GET /api/v1/client/{clientId}/channels/instructionsupdate-client READ (client); plan: update-client; read-only
list_channelsReturns every messaging channel connected to a hotel (Instagram, Messenger, Gmail, Outlook, WhatsApp, ChatGPT guest app, …), with the reply-mode settings of each.GET /api/v1/client/{clientId}/channelsupdate-client READ (client); plan: update-client; read-only
update_channel_instructionReplaces the title and text of one instruction by its id.PUT /api/v1/client/{clientId}/channel/{channelType}/instruction/{instructionId}update-client WRITE (client); plan: update-client
update_channel_settingsChanges the reply mode of a connected channel: autoReplyEnabled turns automatic responses on/off; draftOnly puts replies in draft mode instead of sending.PATCH /api/v1/client/{clientId}/channel/{channelId}update-client WRITE (client); plan: update-client

Full input fields for every tool: references/tools.md.

Recommended workflows

Connect a channel

  1. get_channel_connect_link for the channel; it returns a URL that a signed-in operator must open in a browser (OAuth cannot be completed through the API).
  2. After the operator finishes, list_channels shows the connection; set update_channel_settings as wanted.

Tips

  • list_channels reports entitled (channels in the plan), guestappEntitled and guestMcpAvailable — connect_chatgpt_channel works only when the last two are both true.
  • connect_chatgpt_channel answers 503 where the guest app does not exist (checked first) and 403 not_entitled without the guestapp plan feature.
  • Pass returnTo (a console, QA editor or admin /clients/ URL) to get_channel_connect_link to land the operator back where they started; other URLs are refused with 400.

Pitfalls

  • Disconnecting a channel deletes its tokens; reconnecting requires the browser flow again.
  • Every channel write is recorded in the hotel's activity feed as channel_updated.

Calling conventions

Same tool, three transports — pick whichever your runtime already speaks. Always send x-api-key.

bash
# REST
curl -X POST "https://maison-labs.com/api/v1/client/<clientId>/channel/<channelType>/instruction" -H "x-api-key: $MAISON_API_KEY" -H "content-type: application/json" -d '{ "title": …, "text": … }'
json
// MCP (https://maison-labs.com/mcp, Streamable HTTP): tools/call
{ "jsonrpc": "2.0", "id": 1, "method": "tools/call", "params": { "name": "add_channel_instruction", "arguments": { "title": …, "text": … } } }
json
// 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": "add_channel_instruction", "input": { "title": …, "text": … } } }] } } }

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.