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.
Quick start
ArtyChat exposes a remote Streamable HTTP MCP server. AI clients connect to it and authenticate each business through ArtyChat OAuth.
https://mcp.artychat.com/mcp
- Add the ArtyChat MCP server to your compatible AI client.
- Start a connection and complete ArtyChat OAuth when prompted.
- Grant only the scopes needed for the requested tools.
- Call read tools directly. Use write tools only when the user explicitly requests the action.
Connection details
| Transport | Streamable HTTP |
| MCP URL | https://mcp.artychat.com/mcp |
| Health check | https://mcp.artychat.com/health |
| Protected resource metadata | https://mcp.artychat.com/.well-known/oauth-protected-resource |
| OAuth issuer | https://artychat.com |
| OAuth metadata | https://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.
https://artychat.com/oauth/authorize
https://artychat.com/oauth/token
https://artychat.com/oauth/register
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_profile | business:read | Connected ArtyChat profile |
| get_business | business:read | Business profile and account context |
| list_locations | business:read | Business locations and branches |
| list_booking_services | bookings:read | Bookable services |
| list_bookings | bookings:read | Bookings and summaries |
| get_booking | bookings:read | Single booking |
| get_booking_availability | bookings:read | Available booking slots |
| create_booking | bookings:write | Create a booking |
| update_booking | bookings:write | Reschedule or edit a booking |
| update_booking_status | bookings:write | Change booking status |
| list_customers | customers:read | List/search customers |
| get_customer | customers:read | Single customer |
| create_customer | customers:write | Create customer |
| update_customer | customers:write | Update customer |
| list_conversations | chats:read | List conversations |
| get_conversation | chats:read | Conversation details |
| send_message | chats:write | Send a message in an existing conversation |
| list_orders | orders:read | List store orders |
| get_order | orders:read | Single order |
| update_order | orders:write | Update an order |
| get_pos_catalog | pos:read | POS catalog |
| list_pos_products | pos:read | List POS products |
| get_pos_product | pos:read | Single POS product |
| create_pos_sale | pos:write | Record a POS sale |
| get_ai_instructions | ai:instructions:read | Read AI instructions |
| update_ai_instructions | ai:instructions:write | Replace AI instructions |
| get_auto_reply_settings | auto_replies:read | Read channel auto-reply settings |
| update_auto_reply_settings | auto_replies:write | Update channel auto-reply settings |
| list_expenses | expenses:read | List expenses with filtered totals. Filters: from, to, search, category_id, page, per_page. |
| export_expenses | expenses:read | Export filtered expenses as PDF or CSV. |
| analyze_expense_receipt | expenses:write | Analyze a receipt without creating an expense. Accepts a file upload. |
| list_expense_categories | expenses:read | List expense categories. |
| create_expense_category | expenses:write | create expense category. |
| update_expense_category | expenses:write | update expense category. |
| delete_expense_category | expenses:write | delete expense category. |
| list_expense_providers | expenses:read | list expense providers. |
| create_expense_provider | expenses:write | create expense provider. |
| update_expense_provider | expenses:write | update expense provider. |
| delete_expense_provider | expenses:write | delete expense provider. |
| get_expense_settings | expenses:read | Read receipt auto-detection settings. |
| update_expense_settings | expenses:write | Update receipt auto-detection settings. |
| create_expense | expenses:write | Create an expense. Fields: title, vendor, expense_date, amount, tax_amount, currency, payment_method, expense_category_id, category_name, notes. |
| get_expense | expenses:read | Read an expense and its category. |
| update_expense | expenses:write | Update expense fields or its receipt. |
| delete_expense | expenses:write | Delete an expense and its receipt. |
| list_deliveries | deliveries:read | List active deliveries with their POS orders. |
| list_delivery_ready_orders | deliveries:read | List ready POS orders without a delivery. |
| list_delivery_history | deliveries:read | List up to 100 finished deliveries. |
| get_delivery_live_tracking | deliveries:read | Read live delivery and driver coordinates. |
| get_delivery_tracking_link | deliveries:read | Get a signed customer tracking URL valid for 48 hours. |
| get_delivery_proof | deliveries:read | Read private signature or photo proof. |
| get_delivery | deliveries:read | Read one delivery and its events. |
| configure_order_delivery | deliveries:write | Configure delivery coordinates before the POS order is ready. |
| create_delivery | deliveries:write | Create delivery from a ready POS order. Optional fleet_id, driver_id, postal_code. |
| assign_delivery | deliveries:write | Assign a pending delivery to a business driver. |
| accept_delivery | deliveries:write | Accept a pending delivery that has an assigned driver. |
| pickup_delivery | deliveries:write | Mark an accepted delivery as picked up. |
| complete_delivery | deliveries:write | Complete 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_fleets | deliveries:read | List business fleets. |
| create_delivery_fleet | deliveries:write | Create a business delivery fleet. |
| list_delivery_vehicles | deliveries:read | List business vehicles. |
| create_delivery_vehicle | deliveries:write | Create a business delivery vehicle. |
| list_delivery_drivers | deliveries:read | List business drivers. |
| create_delivery_driver | deliveries:write | Create a business delivery driver. |
| list_delivery_zones | deliveries:read | List business zones. |
| create_delivery_zone | deliveries:write | Create a business delivery zone. |
| list_dispatch_orders | deliveries:read | list dispatch orders. |
| list_dispatch_history | deliveries:read | list dispatch history. |
| get_dispatch_order | deliveries:read | get dispatch order. |
| accept_dispatch_order | deliveries:write | accept dispatch order. |
| mark_dispatch_order_ready | deliveries:write | mark dispatch order ready. |
| get_dispatch_settings | deliveries:read | get dispatch settings. |
| update_dispatch_settings | deliveries:write | update 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.
npx @modelcontextprotocol/inspector@latest
- Open the localhost URL printed in the terminal.
- Select Streamable HTTP.
- Enter
https://mcp.artychat.com/mcp. - Connect and complete ArtyChat OAuth.
- Run
tools/list, then invoke a read tool such asget_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.
get_business_snapshotlist_services, get_service, create_service, update_service, delete_servicecreate_order, POS list/get/update/status/checkout toolsinvoice/quote CRUD, sending, quote conversion and payment-link tools
lead list/get/create/update/convert tools
form list/get/create/update tools with submissions returned by form detail
task management plus workspace reading and internal messaging
WhatsApp templates and campaign create/start/pause/resume
location and team-member management
get_integrations returns connection state without secretsExpense 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.