MCP 서버

booqable

io.usefulapi/booqable
비즈니스 및 운영 커머스 및 리테일 공개 · 연결 가능 MCP 2026-07-28

이 MCP로 할 수 있는 일

Manages Booqable rental customers, products, inventory availability, orders, bookings, documents and payment records.

booqable_book_product
Book a product on an order
Add a quantity of a product to an order, allocating inventory (creates a planning and a line). By default adds to an existing planning for the same product if there is one. Booqable: POST /api/4/order_fulfillments with a book_product action.
파괴적 작업
입력 스키마
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['order_id', 'product_id', 'quantity'], 'properties': {'mode': {'enum': ['infer_planning', 'create_new', 'update_existing'], 'type': 'string', 'description': "infer_planning (default): reuse the product's planning if any; create_new: always a new line; update_existing: add to planning_id."}, 'order_id': {'type': 'string', 'minLength': 1, 'description': 'The order id (UUID).'}, 'quantity': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 1, 'description': 'Units to book.'}, 'product_id': {'type': 'string', 'minLength': 1, 'description': 'The product id (UUID).'}, 'planning_id': {'type': 'string', 'description': 'Required when mode is update_existing.'}, 'confirm_shortage': {'type': 'boolean', 'description': 'true to accept a shortage warning when booking on a reserved or started order.'}}}
booqable_check_inventory_availability
Check inventory availability
How many units of one or more products can be booked for an exact period at a location. Returns `available` and `plannable` (plannable can exceed available when shortage is allowed). Get location ids from booqable_list_locations. Booqable: GET /api/4/inventory_availabilities.
읽기 전용
입력 스키마
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['product_ids', 'from', 'till', 'location_id'], 'properties': {'from': {'type': 'string', 'description': "Period start, ISO 8601 at the company's local time written as UTC, e.g. 2026-07-01T10:00:00Z means 10:00 at the shop. Do not convert to real UTC."}, 'till': {'type': 'string', 'description': "Period end, ISO 8601 at the company's local time written as UTC, e.g. 2026-07-01T10:00:00Z means 10:00 at the shop. Do not convert to real UTC."}, 'location_id': {'type': 'string', 'minLength': 1, 'description': 'The pickup location id.'}, 'product_ids': {'type': 'array', 'items': {'type': 'string', 'minLength': 1}, 'maxItems': 50, 'minItems': 1, 'description': 'Product ids to check.'}}}
booqable_create_customer
Create a customer
Create a new customer. Booqable: POST /api/4/customers.
파괴적 작업
입력 스키마
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['name'], 'properties': {'name': {'type': 'string', 'minLength': 1, 'description': 'Person or company name.'}, 'email': {'type': 'string', 'description': 'Email address used for communication.'}, 'tag_list': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Tags (case-insensitive).'}, 'legal_type': {'enum': ['person', 'commercial'], 'type': 'string', 'description': 'person or commercial.'}, 'discount_percentage': {'type': 'number', 'maximum': 100, 'minimum': 0, 'description': "Default discount % applied to this customer's new orders."}, 'email_marketing_consented': {'type': 'boolean', 'description': 'Whether the customer consented to email marketing.'}}}
booqable_create_note
Add a note
Attach an internal note to a customer, order, product or other record. Booqable: POST /api/4/notes.
파괴적 작업
입력 스키마
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['owner_id', 'owner_type', 'body'], 'properties': {'body': {'type': 'string', 'minLength': 1, 'description': 'The note text.'}, 'owner_id': {'type': 'string', 'minLength': 1, 'description': 'The id of the record the note is about.'}, 'owner_type': {'enum': ['customers', 'orders', 'products', 'product_groups', 'stock_items', 'bundles', 'documents', 'users'], 'type': 'string', 'description': "The owner's resource type."}}}
booqable_create_order
Create an order
Create an EMPTY order for a rental period (status new or draft). Then add products with booqable_book_product and reserve it with booqable_transition_order_status. Locations default to the first active location. Booqable: POST /api/4/orders.
파괴적 작업
입력 스키마
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['starts_at', 'stops_at'], 'properties': {'status': {'enum': ['new', 'draft'], 'type': 'string', 'description': 'Initial status. Default new (visible only to its creator); draft is visible but reserves nothing.'}, 'stops_at': {'type': 'string', 'description': "Rental end, ISO 8601 at the company's local time written as UTC, e.g. 2026-07-01T10:00:00Z means 10:00 at the shop. Do not convert to real UTC."}, 'tag_list': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Tags (case-insensitive).'}, 'starts_at': {'type': 'string', 'description': "Rental start, ISO 8601 at the company's local time written as UTC, e.g. 2026-07-01T10:00:00Z means 10:00 at the shop. Do not convert to real UTC."}, 'customer_id': {'type': 'string', 'description': 'The customer this order is for.'}, 'stop_location_id': {'type': 'string', 'description': 'Return location id.'}, 'start_location_id': {'type': 'string', 'description': 'Pickup location id.'}}}
booqable_get_availability_calendar
Get a product's availability calendar
Day-by-day availability for one product over a month: status (available/partial/unavailable) and bookable quantity per day. Booqable: GET /api/4/availabilities with subject_type=item.
읽기 전용
입력 스키마
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['product_id', 'year', 'month'], 'properties': {'year': {'type': 'integer', 'maximum': 2100, 'minimum': 2000, 'description': 'Calendar year, e.g. 2026.'}, 'month': {'type': 'integer', 'maximum': 12, 'minimum': 1, 'description': 'Calendar month, 1-12.'}, 'quantity': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 1, 'description': 'Units needed; sets the threshold for available vs partial.'}, 'product_id': {'type': 'string', 'minLength': 1, 'description': 'The product id (UUID).'}, 'location_id': {'type': 'string', 'description': 'Location id to check at.'}}}
booqable_get_company
Get the company
Fetch the Booqable account this token belongs to — name, currency, default timezone, address. A cheap way to confirm the slug and token work. Booqable: GET /api/4/companies/current.
읽기 전용
입력 스키마
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'properties': {}}
booqable_get_customer
Get one customer
Fetch one customer with order count, revenue and balance due, sideloading their properties (addresses, phone, custom fields) by default. Booqable: GET /api/4/customers/{id}.
읽기 전용
입력 스키마
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['customer_id'], 'properties': {'include': {'type': 'string', 'description': 'Comma-separated relationships to sideload, e.g. properties,tax_region.'}, 'customer_id': {'type': 'string', 'minLength': 1, 'description': 'The customer id (UUID).'}}}
booqable_get_order
Get one order
Fetch one order with its totals, deposit and payment state, sideloading the customer and order lines by default (override with include, e.g. customer,lines,payments,documents,notes). Booqable: GET /api/4/orders/{id}.
읽기 전용
입력 스키마
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['order_id'], 'properties': {'include': {'type': 'string', 'description': 'Comma-separated relationships to sideload, e.g. customer,lines,payments,documents,notes,start_location.'}, 'order_id': {'type': 'string', 'minLength': 1, 'description': 'The order id (UUID).'}}}
booqable_list_customers
List customers
List customers, optionally searched by name/email or filtered by email, tag or archived state. Booqable: GET /api/4/customers.
읽기 전용
입력 스키마
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'properties': {'q': {'type': 'string', 'description': 'Free-text search over customers.'}, 'tag': {'type': 'string', 'description': 'Only customers carrying this tag.'}, 'page': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 1, 'description': 'Page number (1-based). Default 1.'}, 'sort': {'type': 'string', 'description': 'Sort, comma-separated attributes; prefix with - for descending, e.g. -created_at.'}, 'email': {'type': 'string', 'description': 'Only the customer with exactly this email.'}, 'include': {'type': 'string', 'description': 'Comma-separated relationships to sideload, e.g. properties.'}, 'archived': {'type': 'boolean', 'description': 'true = only archived, false = only active.'}, 'page_size': {'type': 'integer', 'maximum': 100, 'minimum': 1, 'description': 'Results per page, 1-100 (Booqable default 25).'}}}
booqable_list_documents
List documents
List invoices, quotes and contracts, with totals and payment status. Filter by type, order, customer or status. Booqable: GET /api/4/documents.
읽기 전용
입력 스키마
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'properties': {'q': {'type': 'string', 'description': 'Free-text search.'}, 'page': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 1, 'description': 'Page number (1-based). Default 1.'}, 'sort': {'type': 'string', 'description': 'Sort, comma-separated attributes; prefix with - for descending, e.g. -created_at.'}, 'status': {'enum': ['confirmed', 'unconfirmed', 'revised', 'partially_paid', 'payment_due', 'paid', 'process_deposit', 'overpaid'], 'type': 'string', 'description': 'Only documents in this status (values depend on document type).'}, 'include': {'type': 'string', 'description': 'Comma-separated relationships to sideload, e.g. customer,order.'}, 'order_id': {'type': 'string', 'description': 'Only documents for this order.'}, 'page_size': {'type': 'integer', 'maximum': 100, 'minimum': 1, 'description': 'Results per page, 1-100 (Booqable default 25).'}, 'customer_id': {'type': 'string', 'description': 'Only documents for this customer.'}, 'document_type': {'enum': ['invoice', 'quote', 'contract'], 'type': 'string', 'description': 'Only this document type.'}}}
booqable_list_locations
List locations
List pickup/return locations (warehouses, stores) with address and pickup/delivery capability. Location ids are needed for availability checks and orders. Booqable: GET /api/4/locations.
읽기 전용
입력 스키마
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'properties': {'page': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 1, 'description': 'Page number (1-based). Default 1.'}, 'archived': {'type': 'boolean', 'description': 'true = only archived, false = only active.'}, 'page_size': {'type': 'integer', 'maximum': 100, 'minimum': 1, 'description': 'Results per page, 1-100 (Booqable default 25).'}}}
booqable_list_notes
List notes
List internal notes attached to a customer, order, product or other record. Booqable: GET /api/4/notes.
읽기 전용
입력 스키마
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['owner_id'], 'properties': {'page': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 1, 'description': 'Page number (1-based). Default 1.'}, 'owner_id': {'type': 'string', 'minLength': 1, 'description': 'The id of the record the notes are about.'}, 'page_size': {'type': 'integer', 'maximum': 100, 'minimum': 1, 'description': 'Results per page, 1-100 (Booqable default 25).'}, 'owner_type': {'enum': ['customers', 'orders', 'products', 'product_groups', 'stock_items', 'bundles', 'documents', 'users'], 'type': 'string', 'description': "The owner's resource type."}}}
booqable_list_orders
List orders
List rental orders. Filter by free-text search (order number, customer name/email/address, tags, custom fields), status, payment status, customer, or rental-period range. Booqable: GET /api/4/orders.
읽기 전용
입력 스키마
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'properties': {'q': {'type': 'string', 'description': 'Search: order number (exact), customer name, e-mail, address, tags, custom field values.'}, 'tag': {'type': 'string', 'description': 'Only orders carrying this tag.'}, 'page': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 1, 'description': 'Page number (1-based). Default 1.'}, 'sort': {'type': 'string', 'description': 'Sort, comma-separated attributes; prefix with - for descending, e.g. -created_at.'}, 'status': {'enum': ['new', 'draft', 'reserved', 'started', 'stopped', 'archived', 'canceled'], 'type': 'string', 'description': 'Only orders with this simplified status.'}, 'include': {'type': 'string', 'description': 'Comma-separated relationships to sideload, e.g. customer,start_location,stop_location.'}, 'page_size': {'type': 'integer', 'maximum': 100, 'minimum': 1, 'description': 'Results per page, 1-100 (Booqable default 25).'}, 'customer_id': {'type': 'string', 'description': 'Only orders for this customer id.'}, 'stops_at_gte': {'type': 'string', 'description': 'Rental ends at or after this datetime (ISO 8601).'}, 'stops_at_lte': {'type': 'string', 'description': 'Rental ends at or before this datetime (ISO 8601).'}, 'starts_at_gte': {'type': 'string', 'description': 'Rental starts at or after this datetime (ISO 8601).'}, 'starts_at_lte': {'type': 'string', 'description': 'Rental starts at or before this datetime (ISO 8601).'}, 'payment_status': {'enum': ['paid', 'partially_paid', 'overpaid', 'payment_due', 'process_deposit'], 'type': 'string', 'description': 'Only orders with this payment status.'}}}
booqable_list_payments
List payments
List payments (charges, authorizations and refunds) with amount, deposit, currency, provider and status. Filter by order, customer or payment type. Read only — this server never moves money. Booqable: GET /api/4/payments.
읽기 전용
입력 스키마
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'properties': {'page': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 1, 'description': 'Page number (1-based). Default 1.'}, 'sort': {'type': 'string', 'description': 'Sort, comma-separated attributes; prefix with - for descending, e.g. -created_at.'}, 'type': {'enum': ['payment_charges', 'payment_authorizations', 'payment_refunds'], 'type': 'string', 'description': 'Only this payment type.'}, 'include': {'type': 'string', 'description': 'Comma-separated relationships to sideload, e.g. order,payment_method.'}, 'order_id': {'type': 'string', 'description': 'Only payments for this order.'}, 'page_size': {'type': 'integer', 'maximum': 100, 'minimum': 1, 'description': 'Results per page, 1-100 (Booqable default 25).'}, 'customer_id': {'type': 'string', 'description': 'Only payments for this customer.'}}}
booqable_list_plannings
List plannings
List plannings — which product is booked on which order, how many, when, and how many are started (out) or stopped (returned). Filter by order, product, or reservation window. Booqable: GET /api/4/plannings.
읽기 전용
입력 스키마
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'properties': {'page': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 1, 'description': 'Page number (1-based). Default 1.'}, 'sort': {'type': 'string', 'description': 'Sort, comma-separated attributes; prefix with - for descending, e.g. -created_at.'}, 'include': {'type': 'string', 'description': 'Comma-separated relationships to sideload, e.g. item,order,order.customer.'}, 'order_id': {'type': 'string', 'description': 'Only plannings on this order.'}, 'page_size': {'type': 'integer', 'maximum': 100, 'minimum': 1, 'description': 'Results per page, 1-100 (Booqable default 25).'}, 'product_id': {'type': 'string', 'description': 'Only plannings for this product or bundle (item_id).'}, 'stops_at_gte': {'type': 'string', 'description': 'Planned end at or after this datetime (ISO 8601).'}, 'stops_at_lte': {'type': 'string', 'description': 'Planned end at or before this datetime (ISO 8601).'}, 'starts_at_gte': {'type': 'string', 'description': 'Planned start at or after this datetime (ISO 8601).'}, 'starts_at_lte': {'type': 'string', 'description': 'Planned start at or before this datetime (ISO 8601).'}}}
booqable_list_product_groups
List product groups
List product groups — the catalogue entries (name, SKU, product type, tracking type, pricing). A group holds one or more bookable products (variations). Booqable: GET /api/4/product_groups.
읽기 전용
입력 스키마
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'properties': {'q': {'type': 'string', 'description': 'Free-text search over name/SKU.'}, 'tag': {'type': 'string', 'description': 'Only groups carrying this tag.'}, 'page': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 1, 'description': 'Page number (1-based). Default 1.'}, 'sort': {'type': 'string', 'description': 'Sort, comma-separated attributes; prefix with - for descending, e.g. -created_at.'}, 'include': {'type': 'string', 'description': 'Comma-separated relationships to sideload, e.g. products,photo.'}, 'archived': {'type': 'boolean', 'description': 'true = only archived, false = only active.'}, 'page_size': {'type': 'integer', 'maximum': 100, 'minimum': 1, 'description': 'Results per page, 1-100 (Booqable default 25).'}, 'product_type': {'enum': ['rental', 'sales_item', 'service'], 'type': 'string', 'description': 'Only this product type.'}}}
booqable_list_products
List products
List bookable products (the variations inside product groups). Use a product id for availability checks and booking. Booqable: GET /api/4/products.
읽기 전용
입력 스키마
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'properties': {'q': {'type': 'string', 'description': 'Free-text search over name/SKU.'}, 'page': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 1, 'description': 'Page number (1-based). Default 1.'}, 'sort': {'type': 'string', 'description': 'Sort, comma-separated attributes; prefix with - for descending, e.g. -created_at.'}, 'include': {'type': 'string', 'description': 'Comma-separated relationships to sideload, e.g. product_group,photo.'}, 'archived': {'type': 'boolean', 'description': 'true = only archived, false = only active.'}, 'page_size': {'type': 'integer', 'maximum': 100, 'minimum': 1, 'description': 'Results per page, 1-100 (Booqable default 25).'}, 'product_type': {'enum': ['rental', 'sales_item', 'service'], 'type': 'string', 'description': 'Only this product type.'}, 'product_group_id': {'type': 'string', 'description': 'Only products in this product group.'}}}
booqable_transition_order_status
Change an order's status
Move an order between statuses: new→draft, draft→reserved (reserves the items and assigns an order number), stopped→archived, or back to an earlier status with revert: true. Canceling is deliberately NOT offered (Booqable cannot un-cancel). started/stopped are reached by picking up/returning items, so they are only valid here with revert: true. Booqable: POST /api/4/order_status_transitions.
파괴적 작업
입력 스키마
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['order_id', 'transition_from', 'transition_to'], 'properties': {'revert': {'type': 'boolean', 'description': 'true when going back to an earlier status (required for started/stopped).'}, 'order_id': {'type': 'string', 'minLength': 1, 'description': 'The order id (UUID).'}, 'transition_to': {'enum': ['draft', 'reserved', 'started', 'stopped', 'archived'], 'type': 'string', 'description': 'The new status.'}, 'transition_from': {'enum': ['new', 'draft', 'reserved', 'started', 'stopped', 'archived'], 'type': 'string', 'description': "The order's CURRENT status (Booqable checks it)."}, 'confirm_shortage': {'type': 'boolean', 'description': 'true to accept a shortage warning when reserving.'}}}
booqable_update_customer
Update a customer
Update a customer's name, email, legal type, tags, default discount or marketing consent. Only the fields you pass change. Booqable: PUT /api/4/customers/{id}.
파괴적 작업
입력 스키마
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['customer_id'], 'properties': {'name': {'type': 'string', 'minLength': 1, 'description': 'Person or company name.'}, 'email': {'type': 'string', 'description': 'Email address used for communication.'}, 'tag_list': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Tags (case-insensitive).'}, 'legal_type': {'enum': ['person', 'commercial'], 'type': 'string', 'description': 'person or commercial.'}, 'customer_id': {'type': 'string', 'minLength': 1, 'description': 'The customer id (UUID).'}, 'discount_percentage': {'type': 'number', 'maximum': 100, 'minimum': 0, 'description': "Default discount % applied to this customer's new orders."}, 'email_marketing_consented': {'type': 'boolean', 'description': 'Whether the customer consented to email marketing.'}}}
booqable_update_order
Update an order
Change an order's rental period, customer, locations or tags. Moving dates can cause a shortage: the call then fails with the shortage details, and a shortage *warning* can be accepted by retrying with confirm_shortage: true. Booqable: PUT /api/4/orders/{id}.
파괴적 작업
입력 스키마
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['order_id'], 'properties': {'order_id': {'type': 'string', 'minLength': 1, 'description': 'The order id (UUID).'}, 'stops_at': {'type': 'string', 'description': "New rental end, ISO 8601 at the company's local time written as UTC, e.g. 2026-07-01T10:00:00Z means 10:00 at the shop. Do not convert to real UTC."}, 'tag_list': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Replace the tag list.'}, 'starts_at': {'type': 'string', 'description': "New rental start, ISO 8601 at the company's local time written as UTC, e.g. 2026-07-01T10:00:00Z means 10:00 at the shop. Do not convert to real UTC."}, 'customer_id': {'type': 'string', 'description': 'Assign this customer (re-applies their discount, deposit and tax region).'}, 'confirm_shortage': {'type': 'boolean', 'description': 'true to proceed despite a shortage warning.'}, 'stop_location_id': {'type': 'string', 'description': 'Return location id.'}, 'start_location_id': {'type': 'string', 'description': 'Pickup location id.'}}}
추가됨
booqable_create_note
2026년 10월 2일 2:40 AM
추가됨
booqable_transition_order_status
2026년 10월 2일 2:40 AM
추가됨
booqable_book_product
2026년 10월 2일 2:40 AM
추가됨
booqable_update_order
2026년 10월 2일 2:40 AM
추가됨
booqable_create_order
2026년 10월 2일 2:40 AM
추가됨
booqable_update_customer
2026년 10월 2일 2:40 AM
추가됨
booqable_create_customer
2026년 10월 2일 2:40 AM
추가됨
booqable_list_notes
2026년 10월 2일 2:40 AM
추가됨
booqable_list_locations
2026년 10월 2일 2:40 AM
추가됨
booqable_list_payments
2026년 10월 2일 2:40 AM
추가됨
booqable_list_documents
2026년 10월 2일 2:40 AM
추가됨
booqable_list_plannings
2026년 10월 2일 2:40 AM
추가됨
booqable_get_availability_calendar
2026년 10월 2일 2:40 AM
추가됨
booqable_check_inventory_availability
2026년 10월 2일 2:40 AM
추가됨
booqable_list_products
2026년 10월 2일 2:40 AM
추가됨
booqable_list_product_groups
2026년 10월 2일 2:40 AM
추가됨
booqable_get_customer
2026년 10월 2일 2:40 AM
추가됨
booqable_list_customers
2026년 10월 2일 2:40 AM
추가됨
booqable_get_order
2026년 10월 2일 2:40 AM
추가됨
booqable_list_orders
2026년 10월 2일 2:40 AM
추가됨
booqable_get_company
2026년 10월 2일 2:40 AM