bermooda MCP
Your shop, ready for agents
@bermooda/mcp gives Cursor, Claude, and any MCP client typed tools for settings, catalog, orders, and reports. Every call goes through the Admin API.
npx -y @bermooda/mcpNode.js ≥ 22.22 · stdio or HTTP · MIT licensed
What it does
The admin, in your agent's hands.
Tools are grouped by intent, not one per route. An agent can set up a shop, keep the catalog current, and answer "how did we do last week" without you opening the admin or writing a line against the Admin REST API.
ping · setup_shopStand up a store
Verify the connection, then set name, currencies, shipping, categories, products, and theme in one planned call.
get_settings · update_settingsTune settings
Read the full settings snapshot or patch one section: general, currencies, locales, tax, shipping, SEO.
upsert_product · import_products_csvRun the catalog
List, create, update, and delete products and categories, or bulk import a CSV after a local dry run.
list_orders · update_order_statusWork the orders
Page through orders, open one, and move it along. Cancelling or refunding asks for confirmation.
activate_theme · update_pluginsShape the storefront
List installed themes and plugins, switch the active theme, and enable, reorder, or configure plugins.
get_overview_kpis · get_top_productsRead the numbers
Revenue, AOV, conversion, top products, customers, low stock, and export health for any date range.
Connect
One config block. Any client.
The server needs two things: where your shop lives and a berm_ key. The CLI writes both for Cursor. Claude Desktop and other clients take the same block.
- 01
Install a shop with bermooda install
- 02
Run bermooda mcp init, or paste the config block
- 03
Restart Cursor or Claude Desktop
- 04
Ask the agent to call ping
{
"mcpServers": {
"bermooda": {
"command": "npx",
"args": ["-y", "@bermooda/mcp"],
"env": {
"BERMOODA_URL": "http://localhost:3000",
"BERMOODA_API_KEY": "berm_…"
}
}
}
}# from your shop directory
$ bermooda mcp init
✔ Wrote MCP config to ~/my-shop/.cursor/mcp.jsonBERMOODA_URLShop origin, e.g. http://localhost:3000
BERMOODA_API_KEYAdmin API key, starts with berm_
PORTHTTP transport listen port (default 8787)
Guardrails
Plan first. Confirm to commit.
Agents are fast and occasionally wrong. Tools that change a lot show their plan, and tools that can't be undone ask twice.
dryRunBulk changessetup_shop returns its plan and import_products_csv checks the CSV first. Nothing is written until the agent comes back with confirm.
confirmDestructive callsDeletes, cancellations, refunds, disabling plugins, and uploads refuse to run without an explicit confirm=true.
scopesAPI keyKeys carry granular scopes like products:write, with admin as a super-scope. Every mutation is audited as api_key.
⏺ setup_shop(dryRun: true)
{
"settingsSections": ["general", "currencies", "shipping"],
"categoriesCount": 2,
"productsCount": 6,
"themeId": "default"
}
⏺ delete_product(id: "prod_8f2k")
! Refusing delete product prod_8f2k: pass confirm=true
⏺ delete_product(id: "prod_8f2k", confirm: true)
✔ Deleted# for cloud agents that can't spawn a local process
$ BERMOODA_URL=https://shop.example.com \
BERMOODA_API_KEY=berm_… npm run start:http
# listening on http://0.0.0.0:8787/mcp
$ curl http://localhost:8787/health
{ "ok": true, "name": "@bermooda/mcp", "version": "0.1.0" }Transports
Local by default. Hosted when you need it.
Run it next to your editor over stdio, or start the Streamable HTTP server for agents that live in the cloud. Same tools either way.
stdioDefaultYour client spawns the server with npx. Credentials live in the client config and never leave your machine.
Streamable HTTPHostedPOST /mcp, stateless, one session per request. The key stays in the server process, not in each request.
Architecture
A thin layer. No side doors.
The server holds no domain logic and never touches the database. It calls the same Admin API as the admin UI, with the same scopes, so what an agent can do is exactly what its key allows.
- 01
Cursor · Claudenative tools
- 02
@bermooda/mcpHTTP Bearer berm_ key
- 03
/api/admin/v1app/core
Reference
Every tool.
pingVerify URL and API key
get_setup_statusBootstrap status
setup_shopSettings, categories, products, and theme in one call
get_settings · update_settingsRead the snapshot or patch one section
list_products · get_productPaginated list, or one product by id
upsert_product · delete_productCreate, update, or delete a product
list_categories · get_categoryCategory tree, or one category by id
create_category · update_category · delete_categoryManage categories
import_products_csvBulk import from CSV
list_orders · get_orderPaginated orders, or one order in detail
update_order_statusMove an order to a new status
list_inventory_locationsLocations with inventory levels
set_inventory_levelSet a variant quantity at a location
list_themes · activate_themeSwitch the active theme or save its settings
list_plugins · update_pluginsEnable, disable, reorder, and configure plugins
*_webhook_subscriptionList, get, create, update, and delete webhooks
upload_mediaUpload a file to shop media storage
get_overview_kpis · get_sales_over_timeRevenue, orders, AOV, conversion, daily sales
get_top_products · get_sales_by_categoryWhat sells, and where
get_customer_metrics · get_inventory_metricsNew vs. returning, low and out of stock
get_ops_metrics · get_export_metricsAbandoned checkouts, export health
get_dashboard_reportThe full composed analytics payload
bermooda://settingsSettings snapshot
bermooda://catalog/summaryFirst product page and the category tree
Three lines to an agent-ready shop.
Install, write the config, restart your editor. Then ask your agent to ping.
$ npm i -g @bermooda/cli@latest
$ bermooda install
$ cd bermooda && bermooda mcp init