medusa-mcp
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| HOST | No | Listen host | 0.0.0.0 |
| PORT | No | Listen port | 3000 |
| DATA_DIR | No | Where OAuth clients and token hashes are stored | ./data |
| PUBLIC_URL | No | Public HTTPS origin of this server (without /mcp) | |
| TRUST_PROXY | No | Express trust proxy – number of proxies in front | 1 |
| MEDUSA_API_KEY | No | Secret API key (sk_…) | |
| OWNER_PASSWORD | No | Password required on the consent page | |
| REPORT_TIMEZONE | No | IANA timezone for date filters and report buckets | UTC |
| ACCESS_TOKEN_TTL | No | Access token lifetime in seconds | 3600 |
| MCP_STATIC_TOKEN | No | Optional static bearer token | |
| MEDUSA_READ_ONLY | No | Register read and report tools only | false |
| MEDUSA_TIMEOUT_MS | No | Timeout for Medusa requests | 20000 |
| REFRESH_TOKEN_TTL | No | Refresh token lifetime in seconds | 2592000 |
| MEDUSA_BACKEND_URL | No | Medusa backend URL | |
| ALLOWED_REDIRECT_HOSTS | No | Hosts OAuth clients may use as redirect targets | claude.ai,claude.com,localhost,127.0.0.1 |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": true
} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| get_store_infoA | Returns regions (currencies), sales channels and stock locations. A good first call to learn location IDs and currencies. |
| list_ordersA | Lists orders, newest first. Filters: full-text, date range (YYYY-MM-DD in the reporting timezone), customer, order/payment/fulfillment status. |
| get_orderA | Full order detail – line items, addresses, payments, fulfillments and tracking numbers. Accepts an order ID (order_…) or the order number. |
| list_customersC | Searches customers by name, email or company. |
| get_customerA | Customer detail with addresses, groups and order history (count, total spent, recent orders). |
| list_productsA | Lists products with their variants (SKUs). Filter by full-text, status, collection or category. |
| get_productB | Product detail – variants, prices in all currencies, linked inventory items, categories, collection, tags. |
| list_inventoryB | Inventory items with stock per location (stocked, reserved, available). With low_stock_threshold returns only items at or below the threshold. |
| sales_reportA | Computes sales for a period: order count, revenue, average order value, units sold, unique customers, a time series (day/week/month) and top products. Amounts are per currency. Canceled and draft orders are excluded. |
| create_fulfillmentA | Creates a fulfillment for an order. Without 'items' it fulfills all remaining unfulfilled quantities. Without 'location_id' it uses the only stock location, if there is exactly one. |
| create_shipmentB | Marks a fulfillment as shipped and attaches a tracking number. Without 'fulfillment_id' it uses the only unshipped fulfillment. |
| complete_orderC | Marks the order as completed. |
| cancel_orderA | CANCELS the order. Irreversible – get explicit confirmation from the user before calling. The order must not have active fulfillments. |
| update_productB | Updates basic product fields (title, description, status, handle, metadata). Send only the fields that should change. |
| delete_productA | DELETES the product with all its variants. Irreversible – get explicit confirmation from the user before calling. 'confirm_title' must match the product title exactly. By default the inventory items of its variants are deleted too (only those with nothing reserved). |
| set_variant_priceA | Sets the base price (no price rules) of a variant in one currency. All other prices of the variant are preserved. The amount is in major currency units (e.g. 49.99 = 49.99 EUR). |
| set_stock_levelA | Sets the stocked quantity of an item at a location. Provide either an absolute 'stocked_quantity' or a relative 'adjust_by' (+/-). Identify the item by inventory_item_id or SKU. Without location_id the item's only location is used. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
TDQS
Scored across 17 tools
Each tool targets a distinct resource and action: list/get pairs for orders, customers, products and inventory; mutating tools like set_stock_level, complete_order, cancel_order, create_fulfillment and create_shipment are clearly separated. There is no meaningful overlap that would cause an agent to misselect between tools.
The set uses a consistent snake_case verb_noun pattern for the vast majority of tools (list_orders, get_order, set_stock_level, complete_order, create_fulfillment, cancel_order, update_product, delete_product, set_variant_price). The only notable deviation is sales_report, which is a noun phrase rather than a verb_noun, but overall the convention is predictable.
17 tools is slightly on the heavy side but appropriate for an e-commerce admin surface spanning orders, customers, products, inventory, fulfillments and reporting. Each tool appears to earn its place, though the set could be tightened marginally.
The surface covers reads and several lifecycle actions well but has notable gaps: there is no create_product despite update/delete, no create_customer or update/delete_customer, and no order creation. These are common admin operations that an agent may reasonably expect, causing dead ends in otherwise well-covered domains.