ArtyChat Developers

Model Context Protocol (MCP)

Connect AI assistants securely to an authenticated ArtyChat business through our production remote MCP server. Read business data and perform supported actions for bookings, customers, conversations, orders, POS, and AI settings.

MCP / STREAMABLE HTTP / OAUTH

Quick start

ArtyChat exposes a remote Streamable HTTP MCP server. AI clients connect to it and authenticate each business through ArtyChat OAuth.

Production MCP endpoint
https://mcp.artychat.com/mcp
  1. Add the ArtyChat MCP server to your compatible AI client.
  2. Start a connection and complete ArtyChat OAuth when prompted.
  3. Grant only the scopes needed for the requested tools.
  4. Call read tools directly. Use write tools only when the user explicitly requests the action.

Connection details

TransportStreamable HTTP
MCP URLhttps://mcp.artychat.com/mcp
Health checkhttps://mcp.artychat.com/health
Protected resource metadatahttps://mcp.artychat.com/.well-known/oauth-protected-resource
OAuth issuerhttps://artychat.com
OAuth metadatahttps://artychat.com/.well-known/oauth-authorization-server

Example MCP configuration

{
  "mcpServers": {
    "artychat": {
      "type": "streamable-http",
      "url": "https://mcp.artychat.com/mcp"
    }
  }
}

OAuth authentication

MCP access uses OAuth 2.1-style authorization with PKCE. The authenticated ArtyChat account determines which business the client can access.

Authorization endpoint
https://artychat.com/oauth/authorize
Token endpoint
https://artychat.com/oauth/token
Dynamic client registration
https://artychat.com/oauth/register
UserInfo
https://artychat.com/oauth/userinfo
  • PKCE uses S256.
  • Authorization code and refresh token grants are supported.
  • Access tokens are bound to the MCP resource and granted scopes.
  • Refresh tokens rotate when used.
  • Manual External API keys are not accepted by the MCP server.

Tools and scopes

Tool access is controlled by OAuth scopes. Read and write capabilities are intentionally separated.

Tool Scope Purpose
get_profilebusiness:readConnected ArtyChat profile
get_businessbusiness:readBusiness profile and account context
list_locationsbusiness:readBusiness locations and branches
list_booking_servicesbookings:readBookable services
list_bookingsbookings:readBookings and summaries
get_bookingbookings:readSingle booking
get_booking_availabilitybookings:readAvailable booking slots
create_bookingbookings:writeCreate a booking
update_bookingbookings:writeReschedule or edit a booking
update_booking_statusbookings:writeChange booking status
list_customerscustomers:readList/search customers
get_customercustomers:readSingle customer
create_customercustomers:writeCreate customer
update_customercustomers:writeUpdate customer
list_conversationschats:readList conversations
get_conversationchats:readConversation details
send_messagechats:writeSend a message in an existing conversation
list_ordersorders:readList store orders
get_orderorders:readSingle order
update_orderorders:writeUpdate an order
get_pos_catalogpos:readPOS catalog
list_pos_productspos:readList POS products
get_pos_productpos:readSingle POS product
create_pos_salepos:writeRecord a POS sale
get_ai_instructionsai:instructions:readRead AI instructions
update_ai_instructionsai:instructions:writeReplace AI instructions
get_auto_reply_settingsauto_replies:readRead channel auto-reply settings
update_auto_reply_settingsauto_replies:writeUpdate channel auto-reply settings
list_expensesexpenses:readList expenses with filtered totals. Filters: from, to, search, category_id, page, per_page.
export_expensesexpenses:readExport filtered expenses as PDF or CSV.
analyze_expense_receiptexpenses:writeAnalyze a receipt without creating an expense. Accepts a file upload.
list_expense_categoriesexpenses:readList expense categories.
create_expense_categoryexpenses:writecreate expense category.
update_expense_categoryexpenses:writeupdate expense category.
delete_expense_categoryexpenses:writedelete expense category.
list_expense_providersexpenses:readlist expense providers.
create_expense_providerexpenses:writecreate expense provider.
update_expense_providerexpenses:writeupdate expense provider.
delete_expense_providerexpenses:writedelete expense provider.
get_expense_settingsexpenses:readRead receipt auto-detection settings.
update_expense_settingsexpenses:writeUpdate receipt auto-detection settings.
create_expenseexpenses:writeCreate an expense. Fields: title, vendor, expense_date, amount, tax_amount, currency, payment_method, expense_category_id, category_name, notes.
get_expenseexpenses:readRead an expense and its category.
update_expenseexpenses:writeUpdate expense fields or its receipt.
delete_expenseexpenses:writeDelete an expense and its receipt.
list_deliveriesdeliveries:readList active deliveries with their POS orders.
list_delivery_ready_ordersdeliveries:readList ready POS orders without a delivery.
list_delivery_historydeliveries:readList up to 100 finished deliveries.
get_delivery_live_trackingdeliveries:readRead live delivery and driver coordinates.
get_delivery_tracking_linkdeliveries:readGet a signed customer tracking URL valid for 48 hours.
get_delivery_proofdeliveries:readRead private signature or photo proof.
get_deliverydeliveries:readRead one delivery and its events.
configure_order_deliverydeliveries:writeConfigure delivery coordinates before the POS order is ready.
create_deliverydeliveries:writeCreate delivery from a ready POS order. Optional fleet_id, driver_id, postal_code.
assign_deliverydeliveries:writeAssign a pending delivery to a business driver.
accept_deliverydeliveries:writeAccept a pending delivery that has an assigned driver.
pickup_deliverydeliveries:writeMark an accepted delivery as picked up.
complete_deliverydeliveries:writeComplete a picked-up delivery. Requires actual completion coordinates and a PNG signature data URI; optional JPEG proof_photo and cash_received covering cash_due.
list_delivery_fleetsdeliveries:readList business fleets.
create_delivery_fleetdeliveries:writeCreate a business delivery fleet.
list_delivery_vehiclesdeliveries:readList business vehicles.
create_delivery_vehicledeliveries:writeCreate a business delivery vehicle.
list_delivery_driversdeliveries:readList business drivers.
create_delivery_driverdeliveries:writeCreate a business delivery driver.
list_delivery_zonesdeliveries:readList business zones.
create_delivery_zonedeliveries:writeCreate a business delivery zone.
list_dispatch_ordersdeliveries:readlist dispatch orders.
list_dispatch_historydeliveries:readlist dispatch history.
get_dispatch_orderdeliveries:readget dispatch order.
accept_dispatch_orderdeliveries:writeaccept dispatch order.
mark_dispatch_order_readydeliveries:writemark dispatch order ready.
get_dispatch_settingsdeliveries:readget dispatch settings.
update_dispatch_settingsdeliveries:writeupdate dispatch settings.

Tool examples

Check availability

{
  "date": "2026-10-09",
  "service_ids": [120],
  "primary_service_id": 120,
  "branch_id": 1
}

Create a booking

{
  "client_name": "OpenAI Review Test",
  "client_email": "[email protected]",
  "client_phone": "55555555",
  "service_id": 120,
  "booking_date": "2026-10-09",
  "booking_time": "14:00",
  "branch_id": 1
}

Always call get_booking_availability first and use an exact slot returned by the tool. Services can require a branch, assignee, required extra service, or quantity.

List today's bookings

{
  "date": "2026-10-05",
  "per_page": 50
}

Test with MCP Inspector

MCP Inspector is useful for verifying OAuth, scopes, schemas, and live tool results before integrating another client.

Start Inspector
npx @modelcontextprotocol/inspector@latest
  1. Open the localhost URL printed in the terminal.
  2. Select Streamable HTTP.
  3. Enter https://mcp.artychat.com/mcp.
  4. Connect and complete ArtyChat OAuth.
  5. Run tools/list, then invoke a read tool such as get_business.

Errors and authentication challenges

401 Missing or invalid authorization.

403 Missing OAuth scope or unauthorized action.

422 Tool input or business validation failed.

429 Rate limit reached.

Unauthenticated MCP requests return a WWW-Authenticate challenge that points the client to ArtyChat's protected-resource metadata. Tool-level auth failures also include MCP authentication metadata so compatible clients can reconnect.

Expanded business tools

The MCP server now exposes the broader ArtyChat platform, not only bookings and chats.

Business intelligence
get_business_snapshot
Services
list_services, get_service, create_service, update_service, delete_service
Orders & POS
create_order, POS list/get/update/status/checkout tools
Invoices & payments
invoice/quote CRUD, sending, quote conversion and payment-link tools
CRM
lead list/get/create/update/convert tools
Forms
form list/get/create/update tools with submissions returned by form detail
Tasks & workspace
task management plus workspace reading and internal messaging
Marketing
WhatsApp templates and campaign create/start/pause/resume
Business administration
location and team-member management
Integrations
get_integrations returns connection state without secrets

Expense tools support receipt/logo attachments as a file object containing filename, mime_type, and base64. Exports and proof tools return file metadata and base64 content. Reconnect and authorize the new expense/delivery scopes before using them. Delivery completion must use actual customer signature and coordinates.

Write tools continue to use separate OAuth scopes and consequential-action annotations. Tools that communicate externally, create transactions, or send campaigns are marked as open-world operations.

Security and tenant isolation

  • Every MCP request is authenticated to an ArtyChat user and business.
  • Tools reuse ArtyChat's existing account-scoped API controllers and ownership checks.
  • OAuth scopes are enforced per tool.
  • Write tools change business data only when the authenticated user has the required scope.
  • ArtyChat does not expose another business's bookings, customers, chats, orders, or POS data.
  • Manual External API keys cannot be used as MCP access tokens.
  • Clients should treat write actions such as sending messages, creating bookings, recording sales, and updating records as consequential actions and obtain clear user intent.
Need direct REST access instead of MCP? See the ArtyChat External API documentation.