Read EasyStore orders, products and customers; manage stock, fulfillments and customer records. For store operators who manage orders, stock and customers in EasyStore. Hosted by usefulapi — connect from Claude, ChatGPT, Cursor, or any MCP client.
Team and Enterprise: an Owner adds the connector for the organization first.
Run this command, then run /mcp in Claude Code to log in:
Add to Cursor or add this to ~/.cursor/mcp.json:
{
"mcpServers": {
"easystore": {
"url": "https://easystore.usefulapi.io/mcp"
}
}
}Add to VS Code or add this to .vscode/mcp.json:
{
"servers": {
"easystore": {
"type": "http",
"url": "https://easystore.usefulapi.io/mcp"
}
}
}No Add custom MCP server option? It depends on your account or workspace settings: see OpenAI's guide.
Run these commands. The second one opens the login page:
Other MCP clients (Windsurf, Cline, Zed and more): add the URL as a remote MCP server (Streamable HTTP). The client then opens the login page in your browser. Do not add an Authorization header: see Before you connect.
Find paid, unfulfilled orders and inspect their items and shipment history before planning the next dispatch.
easystore_list_orders easystore_get_order easystore_list_order_fulfillments
Find a product and its variants, then compare available, committed, incoming and reserved stock at each location.
easystore_list_products easystore_list_product_variants easystore_list_inventory_levels
Review a variant’s stock at the selected location and set its quantity to the confirmed physical count when requested.
Changes data · easystore_list_inventory_levels easystore_set_inventory_level
Look up a customer by email or phone, then review their orders and shipment details to prepare a support reply.
easystore_search_customers easystore_list_orders easystore_list_order_fulfillments
You sign in with your EasyStore account and approve the access (OAuth). You do not need an API key.
Reads orders, products, variants, inventory, fulfillments, customers, locations and content pages, blogs and articles. When requested, it can adjust stock, update variants/customers, create customers/fulfillments and cancel orders. It does not charge payments or issue refunds. Customer information passes to your chosen AI client and its LLM provider. Reconnecting a store replaces older AI connections because EasyStore rotates the store token. Uninstall UsefulAPI in EasyStore to revoke access and delete its stored grants. A rejected store token closes the connection even if the uninstall notification is missed; disabling the app may require reconnecting. Connections without a successful store API call for 30 days are removed; reconnect to restore access. Billing is per store.
Add only the URL. Do not add an Authorization header or an API key to the client config. The server signs you in with OAuth: you sign in with your EasyStore account. If the config has such a header, remove it: some clients then send that header instead of the login token, and every call fails with 401.
Turn on the EasyStore connector, then ask in plain words. The AI picks the tools.
| Tool | Type | What it does |
|---|---|---|
easystore_get_store | read | Get store The store behind this access token: name, contact emails, easystore domain, plan, locale, country, time zone, currencies and locations. Needs no API access scope. GET /api/3.0/store.json. |
easystore_list_locations | read | List locations The store's stock and pickup locations (warehouses, outlets) with address, phone, is_primary and pickup settings. Use the ids for inventory levels. Needs read_locations. GET /api/3.0/locations.json. |
easystore_list_products | read | List products List products with variants, prices, SKUs, stock, images and collections. Filter by collection, SKU, published status or dates. Needs read_products. GET /api/3.0/products.json. |
easystore_get_product | read | Get product One product by id with its variants, options, images and collections. Needs read_products. GET /api/3.0/products/{id}.json. |
easystore_list_product_variants | read | List product variants The variants of one product (price, SKU, barcode, stock, weight, enabled flag). Needs read_products. GET /api/3.0/products/{id}/variants.json. |
easystore_list_collections | read | List collections List product collections. Needs read_products. GET /api/3.0/collections.json. |
easystore_get_collection | read | Get collection One collection by id. Needs read_products. GET /api/3.0/collections/{id}.json. |
easystore_list_inventory_levels | read | List inventory levels Stock per variant per location: available (inventory_quantity), committed, incoming and reserved. Pass variant_ids or location_ids (at least one is required). Needs read_products. GET /api/4.0/inventory_levels.json. |
easystore_list_orders | read | List orders List orders from every sales channel with customer, items, totals, payment and fulfillment status. Filter by payment or fulfillment status, customer, or dates (store time zone). Needs read_orders. GET /api/3.0/orders.json. |
easystore_get_order | read | Get order One order by id. Ask for extra sections with fields: items, addresses, transactions, fulfillments, refunds, taxes, customer, shipping_fees, discounts, points, cancellation, note_attributes. Needs read_orders. GET /api/3.0/orders/{id}.json. |
easystore_list_order_fulfillments | read | List order fulfillments The fulfillments (shipments with tracking details and status) of one order. Needs read_fulfillments. GET /api/3.0/orders/{id}/fulfillments.json. |
easystore_list_order_transactions | read | List order transactions The payment transactions of one order (gateway, amount, status). Needs read_orders. GET /api/3.0/orders/{id}/transactions.json. |
easystore_list_checkouts | read | List checkouts List checkouts (carts in progress or abandoned). Cart tokens are not returned. Needs read_orders. GET /api/3.0/checkouts.json. |
easystore_list_customers | read | List customers List customers with contact details, order count, total spent, groups and store credit. Search by name or email with query. Needs read_customers. GET /api/3.0/customers.json. |
easystore_search_customers | read | Search customers Find customers by exact email, phone number or customer code. Pass at least one. Needs read_customers. GET /api/3.0/customers/search.json. |
easystore_get_customer | read | Get customer One customer by id. Add fields=points,membership for loyalty data. Needs read_customers. GET /api/3.0/customers/{id}.json. |
easystore_list_customer_addresses | read | List customer addresses The saved addresses of one customer. Needs read_customers. GET /api/3.0/customers/{id}/addresses.json. |
easystore_get_customer_points | read | Get customer points The loyalty points balance of one customer. Needs read_customers. GET /api/3.0/customers/{id}/points.json. |
easystore_list_customer_groups | read | List customer groups List customer groups (for example VIP). Needs read_customers. GET /api/3.0/groups.json. |
easystore_list_pages | read | List pages List the store's content pages. Needs read_content. GET /api/3.0/pages.json. |
easystore_list_blogs | read | List blogs List the store's blogs. Needs read_content. GET /api/3.0/blogs.json. |
easystore_list_articles | read | List blog articles List blog articles. Needs read_content. GET /api/3.0/articles.json. |
easystore_set_inventory_level | write | Set inventory level WRITE. Set the stock of one variant at one location to an exact number (quantity 0 or more). Omit location_id for the primary location. Overwrites the current quantity; use easystore_adjust_inventory_level for a relative change. Needs write_products. PUT /api/4.0/inventory_levels/set.json. |
easystore_adjust_inventory_level | write | Adjust inventory level WRITE. Add to or remove from the stock of one variant at one location by a relative amount (positive adds, negative removes; 0 is rejected). Not idempotent: repeating it changes the stock again. Omit location_id for the primary location. Needs write_products. PUT /api/4.0/inventory_levels/adjust.json. |
easystore_update_variant | write | Update variant WRITE. Change one variant's price, compare-at price, cost price, SKU, barcode or enabled flag. Only the fields you pass change. To change stock use the inventory tools. Needs write_products. PUT /api/3.0/products/{product_id}/variants.json. |
easystore_cancel_order | write | Cancel order WRITE, hard to undo. Cancel an order, with an optional reason. Confirm the order id and number with the user first. Needs write_orders. POST /api/3.0/orders/{id}/cancel.json. |
easystore_create_fulfillment | write | Create fulfillment WRITE. Mark an order (or some of its line items) as shipped, with tracking details. Not idempotent: calling it twice creates two fulfillments. With notify_customer true the customer is emailed. Needs write_fulfillments. POST /api/3.0/orders/{id}/fulfillments.json. |
easystore_create_customer | write | Create customer WRITE. Create a customer. Pass at least one of first_name, last_name, email or phone. Not idempotent. Needs write_customers. POST /api/3.0/customers.json. |
easystore_update_customer | write | Update customer WRITE. Change fields of an existing customer; only the fields you pass change. Needs write_customers. PUT /api/3.0/customers/{id}.json. |
easystore_usage_status | Usage status (free-tier meter) Report the caller's current usage: the plan, calls used this month, the limit of the plan (the free monthly cap or the Pro fair use limit), remaining, and whether the limit is reached. Read-only; does not count against the meter. | |
easystore_request_feature | Request a missing feature Tell usefulapi that the user needs something the EasyStore tools cannot do yet (a missing tool, field or filter). Call it only when the user asks for something none of the tools can do, and tell the user that you send the request. Do not call it for errors or for normal requests. Do not include personal data, credentials or customer records. Stored with the product name and the client type (for example Claude or Cursor), without the user's account. At most 5 requests per day. Does not count against the meter. | |
easystore_upgrade | Upgrade to Pro (unlimited*) Get Pro: unlimited tool calls (fair use limit: 10,000 a month) on EasyStore (the free tier caps monthly usage). Plans: "monthly" — $9/month; "yearly" — $90/year (2 months free). Cancel any time: Pro then runs to the end of the paid period, so it also suits a one-time job. *A fair use limit applies. For heavy use (near Pro's limit): "plus" or "plus_yearly" — Pro+, $39/month or $390/year, unlimited tool calls (fair use limit: 100,000 a month); an existing Pro subscription changes to Pro+ in place (needs confirm: true; the price difference for the rest of the period is charged at once). Otherwise returns a short link to open in your browser (it opens Stripe Checkout); after payment the account upgrades automatically. Does not count against the meter. | |
easystore_cancel_subscription | Cancel the Pro subscription Cancel the caller's EasyStore Pro subscription at the end of the paid period (no refund for the current period; Pro continues until then, then the free tier applies). Requires confirm: true. Run easystore_upgrade later to undo the cancel before the period ends. Does not count against the meter. |
| Plan | Price | Limit |
|---|---|---|
| Free | $0 | 50 tool calls / month |
| Proper store | $9/mo · $90/yr | Unlimited* |
*Pro fair use limit: 10,000 tool calls a month on this server. For more, write to [email protected].
Pro covers this EasyStore server only. Subscribe with easystore_upgrade (it returns a Stripe Checkout link). Cancel any time with easystore_cancel_subscription: Pro continues to the end of the paid period, with no refund for the current period, and running easystore_upgrade before then undoes the cancel. Or write to [email protected].
Review paid orders waiting to ship. Check variant stock across locations. Reconcile stock after a physical count. Find a customer and review recent orders. See what you can do for the details.
No. usefulapi is an independent service. It is not affiliated with or endorsed by EasyStore. The server calls the EasyStore API with your own EasyStore access, so it sees only the data that your account can see.
Yes. In Claude, add this server's URL as a custom connector. In ChatGPT, add it as a custom MCP server in Plugins. Then log in once. Cursor, VS Code, Claude Code and Codex work too. See the setup steps.
A EasyStore account. You sign in to EasyStore and approve the access. You do not need an API key.
No. Add only the URL. Do not add an Authorization header or an API key to the client config. The server signs you in with OAuth: you sign in with your EasyStore account. If the config has such a header, remove it: some clients then send that header instead of the login token, and every call fails with 401.
The login stores them encrypted in the authorization grant of your connection. The server uses them to call the EasyStore API for you and to derive a private account id for usage metering. usefulapi does not show them on any page or in any reply. You can revoke the access in EasyStore at any time.
Yes, if you approve it. 7 of the 29 EasyStore tools can create or change data. The other 22 are marked read-only. Most MCP clients ask you to approve a tool call before it runs.
The Free plan gives 50 tool calls / month. Pro costs $9/mo or $90/yr, with unlimited tool calls (fair use limit: 10,000 tool calls a month), for this EasyStore server only. Cancel any time: Pro then runs to the end of the paid period. Run easystore_usage_status to see how many calls you used.
Ask the AI to run easystore_upgrade: it returns a Stripe Checkout link. To cancel, run easystore_cancel_subscription. Pro continues to the end of the paid period.
Tell the AI what you wanted to do. It can send the request with easystore_request_feature. We store the text with the server name, the type of AI client and the tool you tried, not with your account, and read every request when we plan new tools. You can send up to 5 requests per day.
Any client that supports remote MCP servers (Streamable HTTP) with OAuth login: Claude (web and desktop), Claude Code, ChatGPT, Codex, Cursor, VS Code, Windsurf and others.
This is a Model Context Protocol endpoint — meant to be connected from an AI client, not opened in a browser. An invalid_token response at the URL is the auth gate working as designed; clients authenticate automatically.
Need a tool this server does not have, or a connection to another system? We build custom integrations and MCP servers.