# io.usefulapi/booqable (remote · booqable.usefulapi.io)

Browse rental orders, customers, products and availability, and create bookings in Booqable.

- Trust score: 76/100 (medium)
- Registry status: active
- Liveness: live
- Owner verified: no
- Last scored: 2026-10-03

## Components

- remote · `booqable.usefulapi.io`: 76/100 (this document), [markdown](https://verifymcp.io/servers/io-usefulapi-booqable/booqable.md), [page](https://verifymcp.io/servers/io-usefulapi-booqable/booqable)

## Channel facts

- Endpoint: `https://booqable.usefulapi.io/mcp`
- Transports: `streamable-http`
- Auth: `none`
- Version: `1.0.0`

## Trust breakdown

How this component scores in each security and reliability category. Every signal is checked automatically against the live server, and we only credit what we can confirm. Scores are 0–100 per category. Scoring method: https://verifymcp.io/docs/scoring (what has changed: https://verifymcp.io/docs/scoring/changelog)

Scored 2026-10-03.

- **Endpoint Security**: 89/100
  - The endpoint's TLS certificate is valid, in date, and uses a strong key.
  - Authorisation is enforced on tool calls, advertised via RFC 9728 protected-resource metadata. Discovery is public, which costs nothing: no tool can be invoked without a token.
  - HTTPS is enforced; there's no plaintext access path.
  - HSTS check failed: the Strict-Transport-Security header is absent.
  - DNSSEC check failed: this domain isn't protected by DNSSEC.
  - The authorisation server offers only Dynamic Client Registration (RFC 7591), which MCP 2026-07-28 deprecated in favour of Client ID Metadata Documents.
- **Transport & Reachability**: 100/100
  - Verified streamable-http transport via a live MCP handshake.
- **Schema Quality & AI Usability**: 68/100
  - AI-judged instruction clarity (excellent).
  - Context-footprint check failed: tool/resource definitions use about 3563 tokens (~169/item across 21 items; 21 tools + 0 resources), over budget; trim descriptions and params.
  - Usage-examples check failed: none of the tools include examples.
- **Stability & Change Management**: 10/100
  - Stability observed for 3 of 30 days with no destabilising changes; credit accrues until the full window elapses.
- **Tool Coverage**: 100/100
  - 100% of tools have a non-trivial description (not blank, and not just the tool's name).
  - 100% of tool parameters carry a description.
- **Tool Safety**: 100/100
  - No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.
  - We read all 21 captured tool definition(s), and no name or description among them implies an irreversible operation.
  - An AI judge read all 21 captured unit(s) of tool text and found none that tries to manipulate the model reading it.
- **Capabilities**: 60/100
  - Spec-recency check failed: implements MCP spec 2025-06-18; the latest is 2026-07-28.

## Install

### How do I install the io.usefulapi/booqable MCP server?

io.usefulapi/booqable is a hosted endpoint at https://booqable.usefulapi.io/mcp, so there is nothing to install locally. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.

### Claude

```bash
claude mcp add --transport http io-usefulapi-booqable 'https://booqable.usefulapi.io/mcp'
```

### Cursor

```json
{
  "mcpServers": {
    "io-usefulapi-booqable": {
      "url": "https://booqable.usefulapi.io/mcp"
    }
  }
}
```

### VS Code

```json
{
  "servers": {
    "io-usefulapi-booqable": {
      "type": "http",
      "url": "https://booqable.usefulapi.io/mcp"
    }
  }
}
```

### Codex

```toml
[mcp_servers.io-usefulapi-booqable]
url = "https://booqable.usefulapi.io/mcp"
```

### opencode

```json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "io-usefulapi-booqable": {
      "type": "remote",
      "url": "https://booqable.usefulapi.io/mcp",
      "enabled": true
    }
  }
}
```

### OpenClaw

```bash
openclaw mcp add io-usefulapi-booqable --url 'https://booqable.usefulapi.io/mcp' --transport streamable-http
```

### Hermes

```yaml
mcp_servers:
  io-usefulapi-booqable:
    url: "https://booqable.usefulapi.io/mcp"
```

### Netclaw

```json
{
  "McpServers": {
    "io-usefulapi-booqable": {
      "Transport": "http",
      "Url": "https://booqable.usefulapi.io/mcp"
    }
  }
}
```

### Vellum

```bash
assistant mcp add io-usefulapi-booqable -t streamable-http -u 'https://booqable.usefulapi.io/mcp'
```

### Other

```json
{
  "mcpServers": {
    "io-usefulapi-booqable": {
      "type": "http",
      "url": "https://booqable.usefulapi.io/mcp"
    }
  }
}
```

The mcpServers block is a cross-client convention. Remote transports vary, so check your client's docs.

## Changelog

Every change recorded for this component, newest first. Days that predate change tracking, or that we cannot explain, say so: "we were watching and nothing happened" and "we were not watching" are different claims.

### 2026-10-03 (score 76, +1)

No change was recorded against any check on this day. Stability & Change Management went from 7 to 10. That category is still filling its 30-day observation window: 2 days of observed history at the previous scan, 3 at this one. The score rises as the window fills, whether or not the server changes.

### 2026-10-02 (score 75, 0)

- [functional] Server version: 1.3.0 → 1.5.1

### 2026-10-01 (score 75, +5)

- [security improvement] HTTPS: unverified → pass
- [functional improvement] Stability: unverified → 0.03
- [functional] Server version: 1.0.0 → 1.3.0

### 2026-09-30 (score 70, +42)

- [security improvement] Authorization: unverified → pass
- [security improvement] Injection markers: unverified → pass
- [security] First check of Judged manipulation: pass
- [security] First check of Authorization: partial
- [functional regression] MCP protocol: unverified → fail
- [functional improvement] Tool coverage: unverified → 100
- [functional] First check of Schema quality: fail
- [functional] First check of Schema quality: excellent
- [functional] First check of Destructive annotations: pass
- [functional] First check of Schema quality: fail
- [functional] First check of Tool coverage: 100

### 2026-09-29 (score 28)

First indexed and scored.

## MCP tools (21)

### `booqable_get_company` (~55 tokens)

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.

### `booqable_list_orders` (~313 tokens)

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.

Input parameters:

- `customer_id` (string): Only orders for this customer id.
- `include` (string): Comma-separated relationships to sideload, e.g. customer,start_location,stop_location.
- `page` (integer): Page number (1-based). Default 1.
- `page_size` (integer): Results per page, 1-100 (Booqable default 25).
- `payment_status` (string): Only orders with this payment status.
- `q` (string): Search: order number (exact), customer name, e-mail, address, tags, custom field values.
- `sort` (string): Sort, comma-separated attributes; prefix with - for descending, e.g. -created_at.
- `starts_at_gte` (string): Rental starts at or after this datetime (ISO 8601).
- `starts_at_lte` (string): Rental starts at or before this datetime (ISO 8601).
- `status` (string): Only orders with this simplified status.
- `stops_at_gte` (string): Rental ends at or after this datetime (ISO 8601).
- `stops_at_lte` (string): Rental ends at or before this datetime (ISO 8601).
- `tag` (string): Only orders carrying this tag.

### `booqable_get_order` (~108 tokens)

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}.

Input parameters:

- `include` (string): Comma-separated relationships to sideload, e.g. customer,lines,payments,documents,notes,start_location.
- `order_id` (string, required): The order id (UUID).

### `booqable_list_customers` (~179 tokens)

List customers

List customers, optionally searched by name/email or filtered by email, tag or archived state. Booqable: GET /api/4/customers.

Input parameters:

- `archived` (boolean): true = only archived, false = only active.
- `email` (string): Only the customer with exactly this email.
- `include` (string): Comma-separated relationships to sideload, e.g. properties.
- `page` (integer): Page number (1-based). Default 1.
- `page_size` (integer): Results per page, 1-100 (Booqable default 25).
- `q` (string): Free-text search over customers.
- `sort` (string): Sort, comma-separated attributes; prefix with - for descending, e.g. -created_at.
- `tag` (string): Only customers carrying this tag.

### `booqable_get_customer` (~88 tokens)

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}.

Input parameters:

- `customer_id` (string, required): The customer id (UUID).
- `include` (string): Comma-separated relationships to sideload, e.g. properties,tax_region.

### `booqable_list_product_groups` (~196 tokens)

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.

Input parameters:

- `archived` (boolean): true = only archived, false = only active.
- `include` (string): Comma-separated relationships to sideload, e.g. products,photo.
- `page` (integer): Page number (1-based). Default 1.
- `page_size` (integer): Results per page, 1-100 (Booqable default 25).
- `product_type` (string): Only this product type.
- `q` (string): Free-text search over name/SKU.
- `sort` (string): Sort, comma-separated attributes; prefix with - for descending, e.g. -created_at.
- `tag` (string): Only groups carrying this tag.

### `booqable_list_products` (~186 tokens)

List products

List bookable products (the variations inside product groups). Use a product id for availability checks and booking. Booqable: GET /api/4/products.

Input parameters:

- `archived` (boolean): true = only archived, false = only active.
- `include` (string): Comma-separated relationships to sideload, e.g. product_group,photo.
- `page` (integer): Page number (1-based). Default 1.
- `page_size` (integer): Results per page, 1-100 (Booqable default 25).
- `product_group_id` (string): Only products in this product group.
- `product_type` (string): Only this product type.
- `q` (string): Free-text search over name/SKU.
- `sort` (string): Sort, comma-separated attributes; prefix with - for descending, e.g. -created_at.

### `booqable_check_inventory_availability` (~213 tokens)

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.

Input parameters:

- `from` (string, required): 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.
- `location_id` (string, required): The pickup location id.
- `product_ids` (array, required): Product ids to check.
- `till` (string, required): 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.

### `booqable_get_availability_calendar` (~129 tokens)

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.

Input parameters:

- `location_id` (string): Location id to check at.
- `month` (integer, required): Calendar month, 1-12.
- `product_id` (string, required): The product id (UUID).
- `quantity` (integer): Units needed; sets the threshold for available vs partial.
- `year` (integer, required): Calendar year, e.g. 2026.

### `booqable_list_plannings` (~278 tokens)

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.

Input parameters:

- `include` (string): Comma-separated relationships to sideload, e.g. item,order,order.customer.
- `order_id` (string): Only plannings on this order.
- `page` (integer): Page number (1-based). Default 1.
- `page_size` (integer): Results per page, 1-100 (Booqable default 25).
- `product_id` (string): Only plannings for this product or bundle (item_id).
- `sort` (string): Sort, comma-separated attributes; prefix with - for descending, e.g. -created_at.
- `starts_at_gte` (string): Planned start at or after this datetime (ISO 8601).
- `starts_at_lte` (string): Planned start at or before this datetime (ISO 8601).
- `stops_at_gte` (string): Planned end at or after this datetime (ISO 8601).
- `stops_at_lte` (string): Planned end at or before this datetime (ISO 8601).

### `booqable_list_documents` (~197 tokens)

List documents

List invoices, quotes and contracts, with totals and payment status. Filter by type, order, customer or status. Booqable: GET /api/4/documents.

Input parameters:

- `customer_id` (string): Only documents for this customer.
- `document_type` (string): Only this document type.
- `include` (string): Comma-separated relationships to sideload, e.g. customer,order.
- `order_id` (string): Only documents for this order.
- `page` (integer): Page number (1-based). Default 1.
- `page_size` (integer): Results per page, 1-100 (Booqable default 25).
- `q` (string): Free-text search.
- `sort` (string): Sort, comma-separated attributes; prefix with - for descending, e.g. -created_at.
- `status` (string): Only documents in this status (values depend on document type).

### `booqable_list_payments` (~186 tokens)

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.

Input parameters:

- `customer_id` (string): Only payments for this customer.
- `include` (string): Comma-separated relationships to sideload, e.g. order,payment_method.
- `order_id` (string): Only payments for this order.
- `page` (integer): Page number (1-based). Default 1.
- `page_size` (integer): Results per page, 1-100 (Booqable default 25).
- `sort` (string): Sort, comma-separated attributes; prefix with - for descending, e.g. -created_at.
- `type` (string): Only this payment type.

### `booqable_list_locations` (~107 tokens)

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.

Input parameters:

- `archived` (boolean): true = only archived, false = only active.
- `page` (integer): Page number (1-based). Default 1.
- `page_size` (integer): Results per page, 1-100 (Booqable default 25).

### `booqable_list_notes` (~106 tokens)

List notes

List internal notes attached to a customer, order, product or other record. Booqable: GET /api/4/notes.

Input parameters:

- `owner_id` (string, required): The id of the record the notes are about.
- `owner_type` (string): The owner's resource type.
- `page` (integer): Page number (1-based). Default 1.
- `page_size` (integer): Results per page, 1-100 (Booqable default 25).

### `booqable_create_customer` (~111 tokens)

Create a customer

Create a new customer. Booqable: POST /api/4/customers.

Input parameters:

- `discount_percentage` (number): Default discount % applied to this customer's new orders.
- `email` (string): Email address used for communication.
- `email_marketing_consented` (boolean): Whether the customer consented to email marketing.
- `legal_type` (string): person or commercial.
- `name` (string, required): Person or company name.
- `tag_list` (array): Tags (case-insensitive).

### `booqable_update_customer` (~146 tokens)

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}.

Input parameters:

- `customer_id` (string, required): The customer id (UUID).
- `discount_percentage` (number): Default discount % applied to this customer's new orders.
- `email` (string): Email address used for communication.
- `email_marketing_consented` (boolean): Whether the customer consented to email marketing.
- `legal_type` (string): person or commercial.
- `name` (string): Person or company name.
- `tag_list` (array): Tags (case-insensitive).

### `booqable_create_order` (~252 tokens)

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.

Input parameters:

- `customer_id` (string): The customer this order is for.
- `start_location_id` (string): Pickup location id.
- `starts_at` (string, required): 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.
- `status` (string): Initial status. Default new (visible only to its creator); draft is visible but reserves nothing.
- `stop_location_id` (string): Return location id.
- `stops_at` (string, required): 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` (array): Tags (case-insensitive).

### `booqable_update_order` (~273 tokens)

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}.

Input parameters:

- `confirm_shortage` (boolean): true to proceed despite a shortage warning.
- `customer_id` (string): Assign this customer (re-applies their discount, deposit and tax region).
- `order_id` (string, required): The order id (UUID).
- `start_location_id` (string): Pickup location id.
- `starts_at` (string): 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.
- `stop_location_id` (string): Return location id.
- `stops_at` (string): 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` (array): Replace the tag list.

### `booqable_book_product` (~176 tokens)

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.

Input parameters:

- `confirm_shortage` (boolean): true to accept a shortage warning when booking on a reserved or started order.
- `mode` (string): infer_planning (default): reuse the product's planning if any; create_new: always a new line; update_existing: add to planning_id.
- `order_id` (string, required): The order id (UUID).
- `planning_id` (string): Required when mode is update_existing.
- `product_id` (string, required): The product id (UUID).
- `quantity` (integer, required): Units to book.

### `booqable_transition_order_status` (~187 tokens)

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.

Input parameters:

- `confirm_shortage` (boolean): true to accept a shortage warning when reserving.
- `order_id` (string, required): The order id (UUID).
- `revert` (boolean): true when going back to an earlier status (required for started/stopped).
- `transition_from` (string, required): The order's CURRENT status (Booqable checks it).
- `transition_to` (string, required): The new status.

### `booqable_create_note` (~77 tokens)

Add a note

Attach an internal note to a customer, order, product or other record. Booqable: POST /api/4/notes.

Input parameters:

- `body` (string, required): The note text.
- `owner_id` (string, required): The id of the record the note is about.
- `owner_type` (string, required): The owner's resource type.

## Diagnostics

Captured diagnostic sections: TLS, DNSSEC, Authorisation, Transports. The full working is on the page: https://verifymcp.io/servers/io-usefulapi-booqable/booqable#diagnostics

## Score history

- 2026-10-03: 76
- 2026-10-02: 75
- 2026-10-01: 75
- 2026-09-30: 70
- 2026-09-29: 28

## Common questions

### What is the io.usefulapi/booqable MCP server?

io.usefulapi/booqable is an MCP server listed in the public MCP registry as io.usefulapi/booqable. Browse rental orders, customers, products and availability, and create bookings in Booqable. This page covers its hosted endpoint (https://booqable.usefulapi.io/mcp).

### Is the io.usefulapi/booqable MCP server safe to use?

io.usefulapi/booqable scores 76 out of 100 on VerifyMCP. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.

### What tools does the io.usefulapi/booqable MCP server expose?

io.usefulapi/booqable exposes 21 tools: booqable_get_company, booqable_list_orders, booqable_get_order, booqable_list_customers, booqable_get_customer, and 16 more. Their descriptions and schemas cost roughly 3,563 tokens of context every time the server is loaded.

### Does the io.usefulapi/booqable MCP server require authentication?

Yes. io.usefulapi/booqable asked us for credentials when we connected, so you will need to authorise it in your MCP client before it can do anything.

### Is the io.usefulapi/booqable MCP server still maintained?

io.usefulapi/booqable is still listed as active in the MCP registry. We last reached this channel on 3 October 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.

## Links

- Remote endpoint: https://booqable.usefulapi.io/mcp
- Repository: https://github.com/m190/usefulapi-mcp
- Changelog RSS feed: https://verifymcp.io/servers/io-usefulapi-booqable/booqable.xml
- Changelog JSON feed: https://verifymcp.io/servers/io-usefulapi-booqable/booqable.json
- HTML version of this page: https://verifymcp.io/servers/io-usefulapi-booqable/booqable
