Skip to content

Order Desk MCP by usefulapi

by usefulapi.io · remote · no sign-in to list tools · v1.0.1 · published by io.usefulapi

Search Order Desk orders and inventory; read order items and shipments; create or update orders.

Deletes · 8Changes · 2

15 tools: 8 can delete or cancel things, 2 change things and 5 only read.

Scanned Oct 22, 2026

3 checks matched something in the tool definitions. No finding is not a safety guarantee. How the checks work.

claude mcp add --transport http order-desk https://order-desk.usefulapi.io/mcp

Findings

Matches of fixed checks, with the text they matched.

2 warn1 info
  • The server marks "orderdesk_get_store" read-only (readOnlyHint: true), and its own name, description or input give the class "write".

    Matched text

    annotations: {"readOnlyHint":true,"destructiveHint":false,"openWorldHint":true}; The name "orderdesk_get_store" says "get": a word for reading.

    What this check looks for
  • The server marks "orderdesk_list_inventory_items" read-only (readOnlyHint: true), and its own name, description or input give the class "write".

    Matched text

    annotations: {"readOnlyHint":true,"destructiveHint":false,"openWorldHint":true}; The name "orderdesk_list_inventory_items" says "list": a word for reading.

    What this check looks for
  • The description mentions "credentials".

    Matched text

    description: "...shipping methods). The API key and mail credentials are never returned. GET /store."

    What this check looks for

Tools

Open a tool for its reasons and full description. Descriptions are the publisher's own words, shown as they are.

15 tools

Deletes or cancels 8Claude Code: deny
  • orderdesk_add_order_itemWRITE: add one line item to an existing order; Order Desk recalculates the totals.Reads text others writeNo findings

    Why it is in this group

    • The name "orderdesk_add_order_item" says "add": a word for a change.
    • The server marks it destructive (destructiveHint: true).

    What it can reach

    • untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.
    Description, as the server wrote it
    WRITE: add one line item to an existing order; Order Desk recalculates the totals. POST /orders/{order_id}/order-items.

    Annotations the server declares

    • title: Add order item
    • readOnlyHint: false
    • destructiveHint: true
    • idempotentHint: false
    • openWorldHint: true
  • orderdesk_add_order_noteWRITE: append an entry to an order's history.Reads text others writeNo findings

    Why it is in this group

    • The name "orderdesk_add_order_note" says "add": a word for a change.
    • The server marks it destructive (destructiveHint: true).

    What it can reach

    • untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.
    Description, as the server wrote it
    WRITE: append an entry to an order's history. History is append-only (entries cannot be edited or removed) and an order holds at most 250 entries, so do not use it for routine polling. POST /orders/{order_id}/order-history.

    Annotations the server declares

    • title: Add order history note
    • readOnlyHint: false
    • destructiveHint: true
    • idempotentHint: false
    • openWorldHint: true
  • orderdesk_add_shipmentWRITE: record a shipment (carrier and tracking number) against an order.Reads text others writeNo findings

    Why it is in this group

    • The name "orderdesk_add_shipment" says "add": a word for a change.
    • The server marks it destructive (destructiveHint: true).

    What it can reach

    • untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.
    Description, as the server wrote it
    WRITE: record a shipment (carrier and tracking number) against an order. One shipment per parcel; several shipments represent a partial fulfillment. Use "n/a" when there is no tracking number. If tracking_url is omitted Order Desk derives it. POST /orders/{order_id}/shipments.

    Annotations the server declares

    • title: Add shipment
    • readOnlyHint: false
    • destructiveHint: true
    • idempotentHint: false
    • openWorldHint: true
  • orderdesk_create_inventory_itemWRITE: add an inventory item.Reads text others writeNo findings

    Why it is in this group

    • The name "orderdesk_create_inventory_item" says "create": a word for a change.
    • The input takes a statement or command to run (input.code), which can change anything it can reach.
    • The server marks it destructive (destructiveHint: true).

    What it can reach

    • untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.
    Description, as the server wrote it
    WRITE: add an inventory item. The code (SKU) must match the code your orders arrive with. POST /inventory-items.

    Annotations the server declares

    • title: Create inventory item
    • readOnlyHint: false
    • destructiveHint: true
    • idempotentHint: false
    • openWorldHint: true
  • orderdesk_create_orderWRITE: add a new order to the store.Reads text others writeNo findings

    Why it is in this group

    • The name "orderdesk_create_order" says "create": a word for a change.
    • The server marks it destructive (destructiveHint: true).

    What it can reach

    • untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.
    Description, as the server wrote it
    WRITE: add a new order to the store. Needs at least one item, and a name or company in the shipping or customer address (if only one address is given the other is copied from it). Omit folder_id to land in the first folder. Order Desk rejects an order it recognizes as a duplicate and names the existing order id. POST /orders.

    Annotations the server declares

    • title: Create order
    • readOnlyHint: false
    • destructiveHint: true
    • idempotentHint: false
    • openWorldHint: true
  • orderdesk_move_ordersWRITE: move one or more orders to another folder.Reads text others writeNo findings

    Why it is in this group

    • The name "orderdesk_move_orders" says "move": a word for a change.
    • The server marks it destructive (destructiveHint: true).

    What it can reach

    • untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.
    Description, as the server wrote it
    WRITE: move one or more orders to another folder. Moving runs the rules attached to the destination folder (which can send e-mail, call fulfillment services, etc.) and writes a history entry. Pass exactly one of destination_folder_id or destination_folder_name (see orderdesk_get_store). Returns each order's previous folder. POST /move-orders.

    Annotations the server declares

    • title: Move orders to a folder
    • readOnlyHint: false
    • destructiveHint: true
    • idempotentHint: false
    • openWorldHint: true
  • orderdesk_update_inventory_itemWRITE: change fields of an inventory item, for example its stock count.Reads text others writeNo findings

    Why it is in this group

    • The name "orderdesk_update_inventory_item" says "update": a word for a change.
    • The input takes a statement or command to run (input.code), which can change anything it can reach.
    • The server marks it destructive (destructiveHint: true).

    What it can reach

    • untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.
    Description, as the server wrote it
    WRITE: change fields of an inventory item, for example its stock count. Order Desk's PUT replaces the whole record, so this reads the item, applies only the fields you pass (metadata and variation keys are merged) and sends the complete record back. PUT /inventory-items/{inventory_item_id}.

    Annotations the server declares

    • title: Update inventory item
    • readOnlyHint: false
    • destructiveHint: true
    • idempotentHint: true
    • openWorldHint: true
  • orderdesk_update_orderWRITE: change fields of an existing order.Reads text others writeNo findings

    Why it is in this group

    • The name "orderdesk_update_order" says "update": a word for a change.
    • The server marks it destructive (destructiveHint: true).

    What it can reach

    • untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.
    Description, as the server wrote it
    WRITE: change fields of an existing order. Order Desk's PUT replaces the whole record, so this reads the order, applies only the fields you pass (shipping/customer address fields and checkout_data/order_metadata keys are merged into what is there, other values replaced) and sends the complete record back, items included. The order keeps its folder; use orderdesk_move_orders to move it. PUT /orders/{order_id}.

    Annotations the server declares

    • title: Update order
    • readOnlyHint: false
    • destructiveHint: true
    • idempotentHint: false
    • openWorldHint: true
Changes things 2Claude Code: ask
  • orderdesk_get_storeThe store's name, id, FOLDERS (id -> name; orders live in exactly one folder, and folder ids are needed to filter and move orders) and key settings (timezone, locale, stock behavio…Reads private dataReads text others write2 findings

    Why it is in this group

    • The name "orderdesk_get_store" says "get": a word for reading.
    • The description's first verb is "store": a word for a change.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.

    What it can reach

    • private-dataThe description's first sentence says "folder": it reads files.
    • untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.

    Findings

    • Info

      The description mentions "credentials".

      Matched text

      description: "...shipping methods). The API key and mail credentials are never returned. GET /store."

      What this check looks for
    • Warn

      The server marks "orderdesk_get_store" read-only (readOnlyHint: true), and its own name, description or input give the class "write".

      Matched text

      annotations: {"readOnlyHint":true,"destructiveHint":false,"openWorldHint":true}; The name "orderdesk_get_store" says "get": a word for reading.

      What this check looks for
    Description, as the server wrote it
    The store's name, id, FOLDERS (id -> name; orders live in exactly one folder, and folder ids are needed to filter and move orders) and key settings (timezone, locale, stock behavior, shipping methods). The API key and mail credentials are never returned. GET /store.

    Annotations the server declares

    • title: Get store settings and folders
    • readOnlyHint: true
    • destructiveHint: false
    • openWorldHint: true
  • orderdesk_list_inventory_itemsSearch the store's inventory (SKU, name, price, cost, weight, stock, location).Reads text others write1 finding

    Why it is in this group

    • The name "orderdesk_list_inventory_items" says "list": a word for reading.
    • The input takes a statement or command to run (input.code), which can change anything it can reach.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.

    What it can reach

    • untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.

    Findings

    • Warn

      The server marks "orderdesk_list_inventory_items" read-only (readOnlyHint: true), and its own name, description or input give the class "write".

      Matched text

      annotations: {"readOnlyHint":true,"destructiveHint":false,"openWorldHint":true}; The name "orderdesk_list_inventory_items" says "list": a word for reading.

      What this check looks for
    Description, as the server wrote it
    Search the store's inventory (SKU, name, price, cost, weight, stock, location). Order Desk returns every match with no paging, so narrow with search/code/name; limit and offset slice the result here. GET /inventory-items.

    Annotations the server declares

    • title: List inventory items
    • readOnlyHint: true
    • destructiveHint: false
    • openWorldHint: true
Only reads 5Claude Code: allow
  • orderdesk_get_inventory_itemOne inventory item by Order Desk's internal id.Reads text others writeNo findings

    Why it is in this group

    • The name "orderdesk_get_inventory_item" says "get": a word for reading.

    What it can reach

    • untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.
    Description, as the server wrote it
    One inventory item by Order Desk's internal id. GET /inventory-items/{inventory_item_id}.

    Annotations the server declares

    • title: Get inventory item
    • readOnlyHint: true
    • destructiveHint: false
    • openWorldHint: true
  • orderdesk_get_orderOne order by Order Desk's internal id: addresses, items, totals, payment, notes, discounts, checkout data and shipments.Reads private dataReads text others writeNo findings

    Why it is in this group

    • The name "orderdesk_get_order" says "get": a word for reading.

    What it can reach

    • private-dataThe description's first sentence says "note": it reads notes.
    • untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.
    Description, as the server wrote it
    One order by Order Desk's internal id: addresses, items, totals, payment, notes, discounts, checkout data and shipments. To find an order by your own id, use orderdesk_list_orders with source_id. GET /orders/{order_id}.

    Annotations the server declares

    • title: Get order
    • readOnlyHint: true
    • destructiveHint: false
    • openWorldHint: true
  • orderdesk_list_order_itemsThe line items of one order (name, SKU, price, quantity, weight, delivery type, variations).Reads text others writeNo findings

    Why it is in this group

    • The name "orderdesk_list_order_items" says "list": a word for reading.

    What it can reach

    • untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.
    Description, as the server wrote it
    The line items of one order (name, SKU, price, quantity, weight, delivery type, variations). GET /orders/{order_id}/order-items.

    Annotations the server declares

    • title: List order items
    • readOnlyHint: true
    • destructiveHint: false
    • openWorldHint: true
  • orderdesk_list_order_shipmentsThe shipments recorded against an order: carrier, tracking number and URL, method, weight, cost, dates.Reads text others writeNo findings

    Why it is in this group

    • The name "orderdesk_list_order_shipments" says "list": a word for reading.

    What it can reach

    • untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.
    • untrusted-inputThe description's first sentence says "url": it reads web pages, which anyone can write.
    Description, as the server wrote it
    The shipments recorded against an order: carrier, tracking number and URL, method, weight, cost, dates. GET /orders/{order_id}/shipments.

    Annotations the server declares

    • title: List order shipments
    • readOnlyHint: true
    • destructiveHint: false
    • openWorldHint: true
  • orderdesk_list_ordersSearch orders, newest first, with items, addresses, totals, payment and shipments.Reads private dataReads text others writeNo findings

    Why it is in this group

    • The name "orderdesk_list_orders" says "list": a word for reading.

    What it can reach

    • private-dataThe input names a folder (input.folder_id), and the tool reads: it reads files.
    • untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.
    Description, as the server wrote it
    Search orders, newest first, with items, addresses, totals, payment and shipments. Filters combine with AND. Prefer a date range: Order Desk asks clients to avoid open-ended queries. Page with limit and offset (next_offset). GET /orders.

    Annotations the server declares

    • title: List orders
    • readOnlyHint: true
    • destructiveHint: false
    • openWorldHint: true

This is not a safety rating, and no finding is not a safety guarantee. The groups and findings come from fixed checks of the tool definitions the server returned on the date shown, not from its code or what it does when called. How the checks work.

Exfil surface

Which tools read private data, which read text someone else can write, and which can send data out. One of each is a path a prompt injection can use.

No private-data, untrusted-input, outbound path in this server alone: no tool is tagged outbound.

Reads private data3
Reads files, mail, messages, databases, secrets, calendars or repositories.
Can send data out0
Can carry data to people or systems: it sends, posts or publishes, or takes a recipient, channel or URL.

Other servers in the same agent add their own tools to these paths. Audit your whole setup to see them together.

Install

Pinned to version 1.0.1. Values in angle brackets are yours to fill in.

claude mcp add --transport http order-desk https://order-desk.usefulapi.io/mcp

Run in a terminal.

Claude Code permissions

Allow the reads, ask before a change or a way out, deny the deletes. Paste into .claude/settings.json.

.claude/settings.json
{
  "permissions": {
    "allow": [
      "mcp__order-desk__orderdesk_list_orders",
      "mcp__order-desk__orderdesk_get_order",
      "mcp__order-desk__orderdesk_list_order_items",
      "mcp__order-desk__orderdesk_list_order_shipments",
      "mcp__order-desk__orderdesk_get_inventory_item"
    ],
    "ask": [
      "mcp__order-desk__orderdesk_get_store",
      "mcp__order-desk__orderdesk_list_inventory_items"
    ],
    "deny": [
      "mcp__order-desk__orderdesk_create_order",
      "mcp__order-desk__orderdesk_update_order",
      "mcp__order-desk__orderdesk_add_order_item",
      "mcp__order-desk__orderdesk_add_order_note",
      "mcp__order-desk__orderdesk_add_shipment",
      "mcp__order-desk__orderdesk_move_orders",
      "mcp__order-desk__orderdesk_create_inventory_item",
      "mcp__order-desk__orderdesk_update_inventory_item"
    ]
  }
}

Tools that only read are allowed, tools that change things ask first, tools that delete or cancel are denied. A read that can send data out (it takes a URL, say) asks first too. It assumes the server is installed as order-desk. Review it before you use it.

Capability tags behind 15 rules
  • mcp__order-desk__orderdesk_get_store private-data, untrusted-input
  • mcp__order-desk__orderdesk_list_orders private-data, untrusted-input
  • mcp__order-desk__orderdesk_get_order private-data, untrusted-input
  • mcp__order-desk__orderdesk_list_order_items untrusted-input
  • mcp__order-desk__orderdesk_list_order_shipments untrusted-input
  • mcp__order-desk__orderdesk_create_order untrusted-input
  • mcp__order-desk__orderdesk_update_order untrusted-input
  • mcp__order-desk__orderdesk_add_order_item untrusted-input
  • mcp__order-desk__orderdesk_add_order_note untrusted-input
  • mcp__order-desk__orderdesk_add_shipment untrusted-input
  • mcp__order-desk__orderdesk_move_orders untrusted-input
  • mcp__order-desk__orderdesk_list_inventory_items untrusted-input
  • mcp__order-desk__orderdesk_get_inventory_item untrusted-input
  • mcp__order-desk__orderdesk_create_inventory_item untrusted-input
  • mcp__order-desk__orderdesk_update_inventory_item untrusted-input