{"_id":"@bermooda/mcp","name":"@bermooda/mcp","dist-tags":{"latest":"0.1.0"},"versions":{"0.1.0":{"name":"@bermooda/mcp","version":"0.1.0","description":"MCP server for bermooda Admin API — Cursor, Claude Desktop, and other MCP clients","type":"module","bin":{"bermooda-mcp":"src/index.js"},"main":"./src/index.js","engines":{"node":">=22.22.0"},"scripts":{"start":"node src/index.js","start:http":"node src/http.js","test":"vitest run","test:watch":"vitest","lint":"oxlint . && oxfmt --check .","fmt":"oxfmt","fmt:check":"oxfmt --check ."},"repository":{"type":"git","url":"git+https://github.com/bermooda/mcp.git"},"homepage":"https://github.com/bermooda/mcp","bugs":{"url":"https://github.com/bermooda/mcp/issues"},"publishConfig":{"access":"public"},"keywords":["bermooda","mcp","model-context-protocol","ecommerce","cursor","claude"],"license":"MIT","dependencies":{"@emnapi/core":"^1.11.3","@emnapi/runtime":"^1.11.3","@modelcontextprotocol/sdk":"^1.29.0","dotenv":"^17.4.2","zod":"^3.25.76"},"devDependencies":{"oxfmt":"^0.58.0","oxlint":"^1.73.0","vitest":"^4.1.10"},"gitHead":"0b74f29299a7c6816ba85f925d026fd28604675b","_id":"@bermooda/mcp@0.1.0","_nodeVersion":"24.13.0","_npmVersion":"11.6.2","dist":{"integrity":"sha512-nMw2kaDWBRcJ8E81Ryyz7Lh8IJZ2aHytIGek6q3HIuRTw0XjYG94to/1y64rU9ZOjWa1E4+uGxUgGkSZPZxTog==","shasum":"0cac83ff3ada4401fff25056919c1dcea744e9aa","tarball":"https://registry.npmjs.org/@bermooda/mcp/-/mcp-0.1.0.tgz","fileCount":20,"unpackedSize":60077,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCICuCmsIWh0s8NX8Ug5RILQoYuPdLRyoR3ANaaEu508ZeAiBi09LqbkaZAvMpzBMUfBUZ47I9dq+/2k2XJ4WDtr8lug=="}]},"_npmUser":{"name":"cvgellhorn","email":"cvgellhorn@gmail.com"},"directories":{},"maintainers":[{"name":"cvgellhorn","email":"cvgellhorn@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/mcp_0.1.0_1785303373695_0.5124479580116956"},"_hasShrinkwrap":false}},"time":{"created":"2026-07-29T05:36:13.561Z","0.1.0":"2026-07-29T05:36:13.853Z","modified":"2026-07-29T05:36:14.106Z"},"maintainers":[{"name":"cvgellhorn","email":"cvgellhorn@gmail.com"}],"description":"MCP server for bermooda Admin API — Cursor, Claude Desktop, and other MCP clients","homepage":"https://github.com/bermooda/mcp","keywords":["bermooda","mcp","model-context-protocol","ecommerce","cursor","claude"],"repository":{"type":"git","url":"git+https://github.com/bermooda/mcp.git"},"bugs":{"url":"https://github.com/bermooda/mcp/issues"},"license":"MIT","readme":"# Official bermooda MCP\n\nMCP server for [bermooda](https://github.com/bermooda/bermooda) shops. Thin facade over the Admin REST API (`/api/admin/v1`) for Cursor, Claude Desktop, and other MCP clients.\n\n**Package:** `@bermooda/mcp`  \n**Phase:** C + D — setup orchestration, themes/plugins, webhooks, media, inventory, Streamable HTTP ([agent-integration.md](https://github.com/bermooda/bermooda/blob/main/docs/agent-integration.md))\n\n## Requirements\n\n- Node.js ≥ 22.22.0\n- A running bermooda shop + Admin API key (`berm_…`)\n\n## Configure\n\n| Variable           | Description                                 |\n| ------------------ | ------------------------------------------- |\n| `BERMOODA_URL`     | Shop origin, e.g. `http://localhost:5173`   |\n| `BERMOODA_API_KEY` | Admin-scoped API key (`berm_…`)             |\n| `PORT`             | HTTP transport listen port (default `8787`) |\n\nKeys come from CLI/seed bootstrap or Admin UI (see bermooda `docs/api.md`).\n\n## Cursor\n\nAdd to Cursor MCP settings (or project `.cursor/mcp.json`):\n\n```json\n{\n  \"mcpServers\": {\n    \"bermooda\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"@bermooda/mcp\"],\n      \"env\": {\n        \"BERMOODA_URL\": \"http://localhost:5173\",\n        \"BERMOODA_API_KEY\": \"berm_REPLACE_ME\"\n      }\n    }\n  }\n}\n```\n\nLocal checkout (no publish):\n\n```json\n{\n  \"mcpServers\": {\n    \"bermooda\": {\n      \"command\": \"node\",\n      \"args\": [\"/ABSOLUTE/PATH/TO/mcp/src/index.js\"],\n      \"env\": {\n        \"BERMOODA_URL\": \"http://localhost:5173\",\n        \"BERMOODA_API_KEY\": \"berm_REPLACE_ME\"\n      }\n    }\n  }\n}\n```\n\nSee [examples/cursor.mcp.json](./examples/cursor.mcp.json) and [examples/cursor.mcp.local.json](./examples/cursor.mcp.local.json).\n\n## Claude Desktop\n\nMerge [examples/claude_desktop_config.json](./examples/claude_desktop_config.json) into Claude Desktop’s `claude_desktop_config.json` (same `command` / `env` shape as Cursor).\n\n## Tools\n\n| Tool                          | Purpose                                                                               |\n| ----------------------------- | ------------------------------------------------------------------------------------- |\n| `ping`                        | Verify URL + API key (loads settings)                                                 |\n| `get_setup_status`            | Bootstrap status (`/setup`)                                                           |\n| `get_settings`                | Full settings snapshot                                                                |\n| `update_settings`             | PATCH one settings section                                                            |\n| `setup_shop`                  | Orchestrate settings + categories + products/CSV + theme (`dryRun` or `confirm=true`) |\n| `list_products`               | Paginated product list                                                                |\n| `get_product`                 | Product by id                                                                         |\n| `upsert_product`              | Create (no id) or update (with id)                                                    |\n| `delete_product`              | Delete product (`confirm=true`)                                                       |\n| `list_categories`             | Category tree                                                                         |\n| `get_category`                | Category by id                                                                        |\n| `create_category`             | Create category                                                                       |\n| `update_category`             | Update category                                                                       |\n| `delete_category`             | Recursive delete (`confirm=true`)                                                     |\n| `list_orders`                 | Paginated orders                                                                      |\n| `get_order`                   | Order detail                                                                          |\n| `update_order_status`         | Set status (`cancelled`/`refunded` need confirm)                                      |\n| `import_products_csv`         | CSV import (`confirm=true`; optional local `dryRun`)                                  |\n| `list_themes`                 | Registered themes + active theme                                                      |\n| `activate_theme`              | Activate theme and/or save theme settings                                             |\n| `list_plugins`                | Registered plugins + enabled ids/order                                                |\n| `update_plugins`              | Enable/disable, reorder, settings (`confirm` when disabling)                          |\n| `list_webhook_subscriptions`  | Paginated webhook subscriptions                                                       |\n| `get_webhook_subscription`    | Subscription + recent deliveries                                                      |\n| `create_webhook_subscription` | Create subscription                                                                   |\n| `update_webhook_subscription` | Update subscription                                                                   |\n| `delete_webhook_subscription` | Delete subscription (`confirm=true`)                                                  |\n| `upload_media`                | Multipart media upload (`confirm=true`)                                               |\n| `list_inventory_locations`    | Locations with inventory levels                                                       |\n| `set_inventory_level`         | Set variant quantity at a location                                                    |\n| `get_overview_kpis`           | Revenue, orders, AOV, conversion for a range                                          |\n| `get_sales_over_time`         | Daily sales buckets                                                                   |\n| `get_top_products`            | Top products by revenue                                                               |\n| `get_sales_by_category`       | Revenue by category                                                                   |\n| `get_ops_metrics`             | Abandoned checkouts, recent orders, low stock                                         |\n| `get_dashboard_report`        | Full composed analytics payload                                                       |\n| `get_customer_metrics`        | New/returning customers, order split, top spenders                                    |\n| `get_inventory_metrics`       | Low/out-of-stock snapshot, stock value, by location                                   |\n| `get_export_metrics`          | Scheduled export counts, recent runs, failure rate                                    |\n\n## Resources\n\n| URI                          | Description                        |\n| ---------------------------- | ---------------------------------- |\n| `bermooda://settings`        | Settings snapshot                  |\n| `bermooda://catalog/summary` | First product page + category tree |\n\n## Develop\n\n```bash\nnpm install\nnpm test\nnpm start        # stdio server (default); needs env vars\nnpm run start:http   # Streamable HTTP on PORT (default 8787)\n```\n\nInspector (stdio):\n\n```bash\nnpx @modelcontextprotocol/inspector node ./src/index.js\n```\n\n## Streamable HTTP\n\nFor cloud agents or clients that cannot spawn a local stdio process, run the Streamable HTTP transport:\n\n```bash\nBERMOODA_URL=http://localhost:5173 BERMOODA_API_KEY=berm_… npm run start:http\n```\n\n- **Endpoint:** `POST http://localhost:8787/mcp` (stateless; one MCP session per request)\n- **Health:** `GET http://localhost:8787/health`\n\nPoint MCP clients that support Streamable HTTP at the `/mcp` URL with the same bermooda env vars loaded in the server process (credentials are not passed per request).\n\n## Architecture\n\n```\nCursor / Claude  --stdio or HTTP-->  @bermooda/mcp  --HTTP Bearer-->  /api/admin/v1\n```\n\nNo Prisma or shop DB access from this process. Domain logic stays in the bermooda app.\n\n## License\n\nMIT\n","readmeFilename":"README.md","_rev":"1-ab0155ed1028a4ebc2feedf654f69c8c"}