@lofder/dsers-mcp-product 1.3.7 → 1.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (155) hide show
  1. package/README.md +164 -74
  2. package/dist/auth/browser-finder.d.ts +5 -5
  3. package/dist/auth/browser-finder.d.ts.map +1 -1
  4. package/dist/auth/browser-finder.js +13 -95
  5. package/dist/auth/browser-finder.js.map +1 -1
  6. package/dist/auth/cdp-session.d.ts.map +1 -1
  7. package/dist/auth/cdp-session.js +89 -38
  8. package/dist/auth/cdp-session.js.map +1 -1
  9. package/dist/auth/index.d.ts +3 -5
  10. package/dist/auth/index.d.ts.map +1 -1
  11. package/dist/auth/index.js +3 -5
  12. package/dist/auth/index.js.map +1 -1
  13. package/dist/auth/oauth.d.ts +36 -0
  14. package/dist/auth/oauth.d.ts.map +1 -0
  15. package/dist/auth/oauth.js +173 -0
  16. package/dist/auth/oauth.js.map +1 -0
  17. package/dist/auth/safari-fallback.d.ts.map +1 -1
  18. package/dist/auth/safari-fallback.js +7 -2
  19. package/dist/auth/safari-fallback.js.map +1 -1
  20. package/dist/auth/terminal-prompt.d.ts.map +1 -1
  21. package/dist/auth/terminal-prompt.js +6 -3
  22. package/dist/auth/terminal-prompt.js.map +1 -1
  23. package/dist/auth/token-store.d.ts +10 -2
  24. package/dist/auth/token-store.d.ts.map +1 -1
  25. package/dist/auth/token-store.js +32 -5
  26. package/dist/auth/token-store.js.map +1 -1
  27. package/dist/cli.js +51 -68
  28. package/dist/cli.js.map +1 -1
  29. package/dist/dsers/account.d.ts.map +1 -1
  30. package/dist/dsers/account.js.map +1 -1
  31. package/dist/dsers/auth.d.ts +5 -6
  32. package/dist/dsers/auth.d.ts.map +1 -1
  33. package/dist/dsers/auth.js +57 -84
  34. package/dist/dsers/auth.js.map +1 -1
  35. package/dist/dsers/client.d.ts +0 -1
  36. package/dist/dsers/client.d.ts.map +1 -1
  37. package/dist/dsers/client.js +7 -14
  38. package/dist/dsers/client.js.map +1 -1
  39. package/dist/dsers/config.d.ts +19 -16
  40. package/dist/dsers/config.d.ts.map +1 -1
  41. package/dist/dsers/config.js +22 -30
  42. package/dist/dsers/config.js.map +1 -1
  43. package/dist/dsers/product.d.ts.map +1 -1
  44. package/dist/dsers/product.js +5 -10
  45. package/dist/dsers/product.js.map +1 -1
  46. package/dist/dsers/settings.d.ts.map +1 -1
  47. package/dist/dsers/settings.js.map +1 -1
  48. package/dist/error-map.d.ts.map +1 -1
  49. package/dist/error-map.js +4 -6
  50. package/dist/error-map.js.map +1 -1
  51. package/dist/index.d.ts +2 -2
  52. package/dist/index.d.ts.map +1 -1
  53. package/dist/index.js +22 -13
  54. package/dist/index.js.map +1 -1
  55. package/dist/instructions.d.ts.map +1 -1
  56. package/dist/instructions.js +15 -2
  57. package/dist/instructions.js.map +1 -1
  58. package/dist/job-store.d.ts.map +1 -1
  59. package/dist/job-store.js.map +1 -1
  60. package/dist/oauth/crypto.d.ts.map +1 -1
  61. package/dist/oauth/crypto.js.map +1 -1
  62. package/dist/provider/helpers.d.ts +28 -0
  63. package/dist/provider/helpers.d.ts.map +1 -0
  64. package/dist/provider/helpers.js +265 -0
  65. package/dist/provider/helpers.js.map +1 -0
  66. package/dist/provider/import-ops.d.ts +23 -0
  67. package/dist/provider/import-ops.d.ts.map +1 -0
  68. package/dist/provider/import-ops.js +350 -0
  69. package/dist/provider/import-ops.js.map +1 -0
  70. package/dist/provider/index.d.ts +38 -0
  71. package/dist/provider/index.d.ts.map +1 -0
  72. package/dist/provider/index.js +172 -0
  73. package/dist/provider/index.js.map +1 -0
  74. package/dist/provider/normalize.d.ts +7 -0
  75. package/dist/provider/normalize.d.ts.map +1 -0
  76. package/dist/provider/normalize.js +239 -0
  77. package/dist/provider/normalize.js.map +1 -0
  78. package/dist/provider/push.d.ts +15 -0
  79. package/dist/provider/push.d.ts.map +1 -0
  80. package/dist/provider/push.js +420 -0
  81. package/dist/provider/push.js.map +1 -0
  82. package/dist/provider/store.d.ts +7 -0
  83. package/dist/provider/store.d.ts.map +1 -0
  84. package/dist/provider/store.js +152 -0
  85. package/dist/provider/store.js.map +1 -0
  86. package/dist/provider.d.ts.map +1 -1
  87. package/dist/provider.js +82 -241
  88. package/dist/provider.js.map +1 -1
  89. package/dist/push-guard.d.ts.map +1 -1
  90. package/dist/push-guard.js +3 -7
  91. package/dist/push-guard.js.map +1 -1
  92. package/dist/push-options.js.map +1 -1
  93. package/dist/resolver.d.ts.map +1 -1
  94. package/dist/resolver.js +1 -2
  95. package/dist/resolver.js.map +1 -1
  96. package/dist/rules.d.ts.map +1 -1
  97. package/dist/rules.js +39 -13
  98. package/dist/rules.js.map +1 -1
  99. package/dist/service/browse-shared.d.ts +6 -0
  100. package/dist/service/browse-shared.d.ts.map +1 -0
  101. package/dist/service/browse-shared.js +26 -0
  102. package/dist/service/browse-shared.js.map +1 -0
  103. package/dist/service/browse.d.ts +20 -0
  104. package/dist/service/browse.d.ts.map +1 -0
  105. package/dist/service/browse.js +159 -0
  106. package/dist/service/browse.js.map +1 -0
  107. package/dist/service/find-product.d.ts +12 -0
  108. package/dist/service/find-product.d.ts.map +1 -0
  109. package/dist/service/find-product.js +51 -0
  110. package/dist/service/find-product.js.map +1 -0
  111. package/dist/service/helpers.d.ts +20 -0
  112. package/dist/service/helpers.d.ts.map +1 -0
  113. package/dist/service/helpers.js +163 -0
  114. package/dist/service/helpers.js.map +1 -0
  115. package/dist/service/import-flow.d.ts +6 -0
  116. package/dist/service/import-flow.d.ts.map +1 -0
  117. package/dist/service/import-flow.js +141 -0
  118. package/dist/service/import-flow.js.map +1 -0
  119. package/dist/service/import-list.d.ts +6 -0
  120. package/dist/service/import-list.d.ts.map +1 -0
  121. package/dist/service/import-list.js +103 -0
  122. package/dist/service/import-list.js.map +1 -0
  123. package/dist/service/index.d.ts +37 -0
  124. package/dist/service/index.d.ts.map +1 -0
  125. package/dist/service/index.js +132 -0
  126. package/dist/service/index.js.map +1 -0
  127. package/dist/service/my-products.d.ts +7 -0
  128. package/dist/service/my-products.d.ts.map +1 -0
  129. package/dist/service/my-products.js +51 -0
  130. package/dist/service/my-products.js.map +1 -0
  131. package/dist/service/preview.d.ts +7 -0
  132. package/dist/service/preview.d.ts.map +1 -0
  133. package/dist/service/preview.js +235 -0
  134. package/dist/service/preview.js.map +1 -0
  135. package/dist/service/push-flow.d.ts +12 -0
  136. package/dist/service/push-flow.d.ts.map +1 -0
  137. package/dist/service/push-flow.js +251 -0
  138. package/dist/service/push-flow.js.map +1 -0
  139. package/dist/service/status.d.ts +6 -0
  140. package/dist/service/status.d.ts.map +1 -0
  141. package/dist/service/status.js +90 -0
  142. package/dist/service/status.js.map +1 -0
  143. package/dist/service.d.ts +1 -1
  144. package/dist/service.d.ts.map +1 -1
  145. package/dist/service.js +23 -32
  146. package/dist/service.js.map +1 -1
  147. package/dist/tools.d.ts +1 -1
  148. package/dist/tools.d.ts.map +1 -1
  149. package/dist/tools.js +162 -114
  150. package/dist/tools.js.map +1 -1
  151. package/dist/types/dsers-api.d.ts +133 -0
  152. package/dist/types/dsers-api.d.ts.map +1 -0
  153. package/dist/types/dsers-api.js +2 -0
  154. package/dist/types/dsers-api.js.map +1 -0
  155. package/package.json +15 -5
package/README.md CHANGED
@@ -1,11 +1,12 @@
1
- # DSers MCP Product — Automate Dropshipping AI tools/AliExpress to Shopify & Wix Import
1
+ # DSers MCP Product — Dropshipping Automation: AliExpress to Shopify & Wix with AI
2
2
 
3
+ [![SafeSkill](https://img.shields.io/badge/SafeSkill-92%2F100-brightgreen)](https://safeskill.dev/scan/@lofder/dsers-mcp-product)
3
4
  [![Smithery](https://smithery.ai/badge/@dsersx/product-mcp)](https://smithery.ai/server/@dsersx/product-mcp)
4
5
  [![npm](https://img.shields.io/npm/v/@lofder/dsers-mcp-product)](https://www.npmjs.com/package/@lofder/dsers-mcp-product)
5
6
  [![MCP Registry](https://img.shields.io/badge/MCP_Registry-listed-blue)](https://registry.modelcontextprotocol.io/servers/io.github.lofder/dsers-mcp-product)
6
7
  [![Glama](https://glama.ai/mcp/servers/lofder/dsers-mcp-product/badges/score.svg)](https://glama.ai/mcp/servers/lofder/dsers-mcp-product)
7
8
 
8
- > An open-source MCP server to automate DSers product import, bulk edit variants, and push to Shopify or Wix using AI.
9
+ > An open-source MCP server to automate DSers product sourcing, import, bulk edit, and push to Shopify or Wix using AI.
9
10
 
10
11
  > [English](#english) | [中文](#中文)
11
12
 
@@ -15,13 +16,13 @@
15
16
 
16
17
  ## English
17
18
 
18
- > **⚠️ Rapid iteration phase:** I only have limited DSers accounts and stores to test with, so it's hard to cover every edge case. I'm testing as many scenarios as I can, fixing issues as I find them though fixes sometimes introduce new ones. Releases will be very frequent during this period. Please always use the latest version, and I'd really appreciate it if you could [help me test](https://github.com/lofder/dsers-mcp-product/issues)!
19
-
20
- **DSers MCP Product** is an open-source [MCP (Model Context Protocol)](https://modelcontextprotocol.io/) server that lets AI Agents automate the entire DSers import workflow — from AliExpress / Alibaba / [Accio.com](https://www.accio.com/) product URL to Shopify or Wix store listing. Bulk import, batch edit variants, clean AliExpress titles, apply pricing rules, and push to multiple stores — all with a single sentence to your AI agent.
19
+ **DSers MCP Product** is an open-source [MCP (Model Context Protocol)](https://modelcontextprotocol.io/) server that lets AI Agents automate the entire DSers import workflow from product sourcing to Shopify or Wix store listing. Search the DSers product pool, import from AliExpress / Alibaba / [Accio.com](https://www.accio.com/), bulk edit variants, apply pricing rules, and push to multiple stores all with a single sentence to your AI agent.
21
20
 
22
21
  #### What can it do?
23
22
 
23
+ - **Product sourcing** — search the DSers product pool by keyword or image, find products to sell
24
24
  - **One-click import** — paste a product link, your AI agent imports it into DSers automatically
25
+ - **Browse your catalog** — view your import staging list and products already pushed to stores
25
26
  - **Clean up titles** — strips the messy keyword-stuffed AliExpress titles into something readable
26
27
  - **Pricing rules** — markup multiplier (e.g. 2.5x), fixed markup (e.g. +$5), compare-at / sale prices
27
28
  - **Batch import** — import multiple products at once with a list of URLs
@@ -29,7 +30,7 @@
29
30
  - **Safety checks** — automatically blocks pushes that would result in below-cost pricing, zero price, or zero stock
30
31
  - **SEO optimization** — let AI rewrite the title and description for better search rankings before pushing
31
32
 
32
- The server is hosted on [Vercel](https://dsers-mcp-product.vercel.app/api/mcp) and published across multiple platforms:
33
+ The server is hosted on [Vercel](https://ai.silentrillmcp.com/dropshipping/mcp) and published across multiple platforms:
33
34
 
34
35
  ### Available On
35
36
 
@@ -44,6 +45,7 @@ The server is hosted on [Vercel](https://dsers-mcp-product.vercel.app/api/mcp) a
44
45
  | MCP Marketplace | [mcp-marketplace.io](https://mcp-marketplace.io/server/io-github-lofder-dsers-mcp-product) |
45
46
  | awesome-mcp-servers | [punkpeye/awesome-mcp-servers](https://github.com/punkpeye/awesome-mcp-servers) |
46
47
  | Dev.to | [Article: I Built an MCP Server to Automate Dropshipping](https://dev.to/_95a3e57463e6442feacd0/i-built-an-mcp-server-to-automate-dropshipping-product-imports-3m5b) |
48
+ | Dev.to | [Tutorial: How to Automate AliExpress to Shopify with AI](https://dev.to/_95a3e57463e6442feacd0/how-to-automate-aliexpress-to-shopify-product-import-with-ai-step-by-step-guide-3f5a) |
47
49
 
48
50
  ### Supported product sources
49
51
 
@@ -71,7 +73,6 @@ This works for both AliExpress and Alibaba products found on Accio.
71
73
  | [ARCHITECTURE.md](ARCHITECTURE.md) | Three-layer architecture, directory structure, data flow |
72
74
  | [USAGE.md](USAGE.md) | Installation, client config (Cursor, Claude Desktop), scenario examples |
73
75
  | [SKILL.md](SKILL.md) | AI agent instruction file — workflow, rules, push options, error handling |
74
- | [SKILL-CN.md](SKILL-CN.md) | Chinese human-readable guide for SKILL.md |
75
76
 
76
77
  ### What You Need
77
78
 
@@ -104,21 +105,33 @@ A browser window opens to the official DSers login page. You log in on DSers's o
104
105
 
105
106
  That's it. No passwords in config files.
106
107
 
108
+ **Remote server (no install needed):**
109
+
110
+ If you don't want to install anything locally, you can connect directly to the hosted MCP server at `https://ai.silentrillmcp.com/dropshipping/mcp`. This works with any MCP client that supports Streamable HTTP transport. You'll be prompted to authorize with your DSers account on first connect.
111
+
112
+ ```json
113
+ {
114
+ "mcpServers": {
115
+ "dropshipping": {
116
+ "url": "https://ai.silentrillmcp.com/dropshipping/mcp"
117
+ }
118
+ }
119
+ }
120
+ ```
121
+
107
122
  Also listed on the official [MCP Registry](https://registry.modelcontextprotocol.io/servers/io.github.lofder/dsers-mcp-product).
108
123
 
109
- ### Authentication — Zero-Password Login
124
+ ### Authentication — OAuth 2.1
110
125
 
111
126
  Your DSers password **never touches this tool**. Here's how login works:
112
127
 
113
128
  1. You run `npx @lofder/dsers-mcp-product login`
114
- 2. Your browser opens the official DSers login page
115
- 3. You log in on DSers's own website, as usual
116
- 4. The tool picks up your login session and encrypts it locally
117
- 5. Done — from now on, the MCP server just works. No passwords in any config file.
129
+ 2. Your browser opens the DSers OAuth authorization page
130
+ 3. You authorize access on DSers's own website
131
+ 4. The tool receives an OAuth token and encrypts it locally
132
+ 5. Done — the MCP server uses the token automatically. No passwords in config files.
118
133
 
119
- Works with Chrome, Edge, Brave, and other Chromium browsers. On Mac, Safari works too.
120
-
121
- **Sessions last about 6 hours.** When it expires, your AI agent will ask you to run `login` again — takes 10 seconds.
134
+ **Tokens refresh automatically** a long-lived refresh token keeps your session active without manual re-login. You should rarely need to run `login` again.
122
135
 
123
136
  **Switching accounts?**
124
137
 
@@ -127,7 +140,7 @@ npx @lofder/dsers-mcp-product logout
127
140
  npx @lofder/dsers-mcp-product login
128
141
  ```
129
142
 
130
- > **For developers:** The server also accepts a `DSERS_TOKEN` env var for headless/CI environments. For most users, just use `login`.
143
+ > **For developers:** The server also accepts `DSERS_ACCESS_TOKEN` and `DSERS_REFRESH_TOKEN` env vars for headless/CI environments.
131
144
 
132
145
  ### Usage Examples
133
146
 
@@ -139,6 +152,12 @@ Once set up, just talk to your AI agent in plain language:
139
152
 
140
153
  > "Batch import these 3 products and push them all to my store: [URL1] [URL2] [URL3]"
141
154
 
155
+ > "Search for phone cases under $5 on the DSers product pool"
156
+
157
+ > "Show me what's in my import list"
158
+
159
+ > "What products have I pushed to my store?"
160
+
142
161
  > "Push this product to all my connected stores"
143
162
 
144
163
  > "Rewrite the title and description for SEO, then push to my store"
@@ -156,21 +175,11 @@ Or browse at [smithery.ai/server/@dsersx/product-mcp](https://smithery.ai/server
156
175
  ### Install from Source
157
176
 
158
177
  ```bash
159
- # Clone
160
178
  git clone https://github.com/lofder/dsers-mcp-product.git
161
179
  cd dsers-mcp-product
162
-
163
- # Install
164
180
  npm install
165
-
166
- # Configure (copy and fill in your DSers credentials)
167
- cp .env.example .env
168
-
169
- # Type check
170
- npx tsc --noEmit
171
-
172
- # Run with Smithery dev
173
- npx @smithery/cli dev ./src/index.ts
181
+ npm run build
182
+ npm test
174
183
  ```
175
184
 
176
185
  ### Project Structure
@@ -178,32 +187,48 @@ npx @smithery/cli dev ./src/index.ts
178
187
  ```
179
188
  dsers-mcp-product/
180
189
  ├── src/
181
- │ ├── index.ts # MCP server entry — tool registration
182
- │ ├── service.ts # Import flow orchestration (7 operations)
183
- │ ├── provider.ts # DSers API adapter
190
+ │ ├── cli.ts # npx entry — stdio transport, login/logout
191
+ │ ├── index.ts # MCP server init, tool registration
192
+ │ ├── instructions.ts # Server-level prompts (agent instructions)
193
+ │ ├── tools.ts # 12 MCP tools — schema + handler
184
194
  │ ├── rules.ts # Rule validation & application engine
195
+ │ ├── push-guard.ts # Pre-push safety checks
185
196
  │ ├── push-options.ts # Push option normalization
186
197
  │ ├── resolver.ts # URL normalization (AliExpress/Alibaba/Accio)
187
- │ ├── job-store.ts # File-based job persistence
188
- └── dsers/ # Low-level DSers API wrappers
189
- ├── config.ts # Configuration & environment
190
- ├── auth.ts # Login, session cache, auto-refresh
191
- ├── client.ts # Authenticated HTTP client
192
- ├── account.ts # Store & user management APIs
193
- ├── product.ts # Import list & push APIs
194
- └── settings.ts # Shipping, pricing, billing APIs
195
- ├── test/ # Smoke tests
196
- ├── smithery.yaml # Smithery runtime config
198
+ │ ├── provider/ # DSers API adapter (split by concern)
199
+ │ ├── index.ts # Provider class + interface
200
+ ├── store.ts # Store discovery, platform detection
201
+ ├── import-ops.ts # Import, save draft, delete
202
+ ├── push.ts # Push execution, shipping logistics
203
+ ├── normalize.ts # Data normalization
204
+ │ └── helpers.ts # Shared utilities
205
+ ├── service/ # Business logic orchestration
206
+ │ │ ├── index.ts # ImportFlowService class
207
+ │ │ ├── import-flow.ts # Import workflows
208
+ │ │ ├── push-flow.ts # Push workflows
209
+ │ │ ├── preview.ts # Preview & visibility
210
+ │ │ ├── status.ts # Job status & deletion
211
+ │ │ ├── import-list.ts # Import list browsing (with enrich)
212
+ │ │ ├── my-products.ts # Pushed products browsing
213
+ │ │ └── find-product.ts # Product pool search
214
+ │ ├── dsers/ # Low-level DSers API wrappers
215
+ │ │ ├── config.ts # Configuration
216
+ │ │ ├── auth.ts # Session management
217
+ │ │ ├── client.ts # Authenticated HTTP client
218
+ │ │ ├── account.ts # Store & user APIs
219
+ │ │ ├── product.ts # Product & import APIs
220
+ │ │ └── settings.ts # Shipping, pricing, billing APIs
221
+ │ └── auth/ # Browser login (CDP)
222
+ ├── test/ # Vitest unit tests (298 tests)
197
223
  ├── package.json
198
- ├── tsconfig.json
199
- └── .env.example
224
+ └── tsconfig.json
200
225
  ```
201
226
 
202
- ### Nine Tools
227
+ ### Twelve Tools
203
228
 
204
229
  | # | Tool | What it does |
205
230
  |---|------|-------------|
206
- | 1 | `dsers_store_discover` | See your connected stores, available shipping methods, pricing rules, and what rules you can apply |
231
+ | 1 | `dsers_store_discover` | See your connected stores, shipping methods, pricing rules, and capabilities |
207
232
  | 2 | `dsers_rules_validate` | Test your pricing or title rules before applying — catches mistakes early |
208
233
  | 3 | `dsers_product_import` | Paste a product URL, optionally apply pricing/title rules, and get a preview before pushing |
209
234
  | 4 | `dsers_product_preview` | Review a product you already imported — title, price, variants, stock at a glance |
@@ -212,8 +237,11 @@ dsers-mcp-product/
212
237
  | 7 | `dsers_store_push` | Send products to your Shopify or Wix store — one at a time, in bulk, or to all stores at once |
213
238
  | 8 | `dsers_job_status` | Check if a push finished and whether it succeeded |
214
239
  | 9 | `dsers_product_delete` | Delete a product from the DSers import list (irreversible, requires confirmation) |
240
+ | 10 | `dsers_import_list` | Browse your import staging list with cost & sell price, stock, markup status |
241
+ | 11 | `dsers_my_products` | See products already pushed to a store, with supplier links for re-import |
242
+ | 12 | `dsers_find_product` | Search the DSers product pool by keyword or image — results link directly to import |
215
243
 
216
- All tools return clear error messages so your AI agent knows what went wrong and what to do next — no cryptic error codes.
244
+ All tools return clear error messages so your AI agent knows what went wrong and what to do next.
217
245
 
218
246
  ### Pre-Push Safety Checks
219
247
 
@@ -252,11 +280,38 @@ Ready-made workflows your AI client can use directly:
252
280
 
253
281
  ### What's Next
254
282
 
283
+ - Product pool search enhancements (category filters, URL-based search, product detail view)
255
284
  - Support more store platforms that DSers already connects to (eBay, Wish, etc.)
256
285
  - Smarter pricing rule templates
257
286
  - More granular inventory sync options
258
287
 
259
- Got an idea or feature request? [Open an issue](https://github.com/lofder/dsers-mcp-product/issues) — suggestions and contributions from other developers are very welcome.
288
+ Got an idea or feature request? [Open an issue](https://github.com/lofder/dsers-mcp-product/issues) — contributions are very welcome.
289
+
290
+ ### FAQ
291
+
292
+ **What is DSers MCP Product?**
293
+ DSers MCP Product is a free, open-source MCP server that automates dropshipping product imports from AliExpress, Alibaba, and 1688 to Shopify and Wix stores using AI agents like Claude and Cursor. Instead of manually copying product data, you tell your AI agent what to do in plain English.
294
+
295
+ **How does it work?**
296
+ You type a command like "Import this product, mark up 2.5x, push to my store" in Cursor or Claude Desktop. The MCP server handles the entire workflow: fetching product data, applying pricing rules, editing variants, and pushing to your connected stores.
297
+
298
+ **Is it free?**
299
+ Yes. The tool is open-source (MIT license) and completely free to use. You only need a free DSers account and a Shopify or Wix store connected in DSers.
300
+
301
+ **Is it safe? Do I need to share my password?**
302
+ No passwords are stored or transmitted. Authentication uses a zero-password browser login — you log in on DSers's own website, and the tool picks up the session token. Your credentials never touch the MCP server. The project scored 92/100 on [SafeSkill](https://safeskill.dev/scan/@lofder/dsers-mcp-product) security scanning.
303
+
304
+ **What AI clients does it support?**
305
+ Cursor, Claude Desktop, Claude Code, Windsurf, and any MCP-compatible client that supports stdio transport.
306
+
307
+ **How is this different from AliDropify, AutoDS, or other dropshipping tools?**
308
+ Most dropshipping tools have their own UI and require you to click through web interfaces. DSers MCP Product takes a fundamentally different approach — it connects directly to your AI agent, so you automate workflows through conversation instead of clicking buttons. It's also open-source and free, with no subscription tiers.
309
+
310
+ **What product sources does it support?**
311
+ AliExpress, Alibaba.com, Accio.com (Alibaba's AI sourcing tool), and 1688 (requires DSers authorization).
312
+
313
+ **Can I push to multiple stores at once?**
314
+ Yes. The `dsers_store_push` tool supports pushing a single product to all your connected Shopify and Wix stores in one command, with per-store pricing and visibility options.
260
315
 
261
316
  ### Also Available
262
317
 
@@ -272,13 +327,13 @@ MIT
272
327
 
273
328
  ## 中文
274
329
 
275
- > **⚠️ 快速迭代阶段:** 我手上只有有限的店铺和 DSers 账号,很难囊括所有场景。我在尽可能测试各种情况下可能出现的问题,发现一个修一个,修的过程中也可能连带引出其他问题,因此近期更新迭代速度会非常快。请时刻关注最新版本,也非常欢迎大家来[帮我测试](https://github.com/lofder/dsers-mcp-product/issues)
276
-
277
- **DSers MCP Product** 是一个开源的 [MCP (Model Context Protocol)](https://modelcontextprotocol.io/) 服务器,让 AI Agent 自动完成 DSers 的整个商品导入流程 —— 从速卖通 / Alibaba / [Accio.com](https://www.accio.com/) 商品链接到 Shopify 或 Wix 店铺上架。批量导入、批量编辑变体、清理速卖通标题、应用定价规则、推送到多个店铺 —— 只需一句话给你的 AI agent。
330
+ **DSers MCP Product** 是一个开源的 [MCP (Model Context Protocol)](https://modelcontextprotocol.io/) 服务器,让 AI Agent 自动完成 DSers 的整个商品流程 —— 从选品搜索到 Shopify 或 Wix 店铺上架。搜索 DSers 商品池、从速卖通 / Alibaba / [Accio.com](https://www.accio.com/) 导入商品、批量编辑变体、应用定价规则、推送到多个店铺 —— 只需一句话给你的 AI agent。
278
331
 
279
332
  #### 能做什么?
280
333
 
334
+ - **选品搜索** — 在 DSers 商品池里按关键词或图片搜索,找到值得卖的商品
281
335
  - **一句话导入** — 贴个商品链接,AI 助手自动导入到 DSers
336
+ - **浏览商品库** — 查看导入待推送列表和已上架商品,包含成本价、售价、加价状态
282
337
  - **标题清理** — 把速卖通那些关键词堆砌的乱标题整理成人话
283
338
  - **定价规则** — 加价倍率(比如 2.5 倍)、固定加价(比如 +5 美金)、划线价
284
339
  - **批量导入** — 一次丢一堆链接,全部导入
@@ -286,7 +341,7 @@ MIT
286
341
  - **安全校验** — 推送前自动拦截低于成本价、零售价为零、库存为零的商品
287
342
  - **SEO 优化** — 让 AI 重写标题和描述,提高搜索排名后再推送
288
343
 
289
- 服务已托管在 [Vercel](https://dsers-mcp-product.vercel.app/api/mcp),并发布到多个平台:
344
+ 服务已托管在 [Vercel](https://ai.silentrillmcp.com/dropshipping/mcp),并发布到多个平台:
290
345
 
291
346
  ### 发布平台
292
347
 
@@ -301,6 +356,7 @@ MIT
301
356
  | MCP Marketplace | [mcp-marketplace.io](https://mcp-marketplace.io/server/io-github-lofder-dsers-mcp-product) |
302
357
  | awesome-mcp-servers | [punkpeye/awesome-mcp-servers](https://github.com/punkpeye/awesome-mcp-servers) |
303
358
  | Dev.to | [技术文章:I Built an MCP Server to Automate Dropshipping](https://dev.to/_95a3e57463e6442feacd0/i-built-an-mcp-server-to-automate-dropshipping-product-imports-3m5b) |
359
+ | Dev.to | [教程:How to Automate AliExpress to Shopify with AI](https://dev.to/_95a3e57463e6442feacd0/how-to-automate-aliexpress-to-shopify-product-import-with-ai-step-by-step-guide-3f5a) |
304
360
 
305
361
  ### 支持的商品来源
306
362
 
@@ -328,7 +384,6 @@ Accio 上搜出来的速卖通和阿里巴巴商品都能用。
328
384
  | [ARCHITECTURE.md](ARCHITECTURE.md) | 三层架构、目录结构、数据流 |
329
385
  | [USAGE.md](USAGE.md) | 安装、客户端配置(Cursor、Claude Desktop)、使用场景 |
330
386
  | [SKILL.md](SKILL.md) | AI agent 指令文件 — 工作流、规则、推送选项、错误处理 |
331
- | [SKILL-CN.md](SKILL-CN.md) | SKILL.md 的中文说明 |
332
387
 
333
388
  ### 使用前提
334
389
 
@@ -361,21 +416,33 @@ npx @lofder/dsers-mcp-product login
361
416
 
362
417
  搞定。配置文件里不需要任何密码。
363
418
 
419
+ **在线版(免安装):**
420
+
421
+ 如果不想在本地安装,可以直接连接托管的 MCP 服务端 `https://ai.silentrillmcp.com/dropshipping/mcp`。支持 Streamable HTTP transport 的 MCP 客户端都能用,首次连接会引导你授权 DSers 账号。
422
+
423
+ ```json
424
+ {
425
+ "mcpServers": {
426
+ "dropshipping": {
427
+ "url": "https://ai.silentrillmcp.com/dropshipping/mcp"
428
+ }
429
+ }
430
+ }
431
+ ```
432
+
364
433
  同时已收录到官方 [MCP Registry](https://registry.modelcontextprotocol.io/servers/io.github.lofder/dsers-mcp-product)。
365
434
 
366
- ### 授权认证 — 零密码登录
435
+ ### 授权认证 — OAuth 2.1
367
436
 
368
437
  你的 DSers 密码**完全不经过本工具**。登录过程是这样的:
369
438
 
370
439
  1. 运行 `npx @lofder/dsers-mcp-product login`
371
- 2. 浏览器自动打开 DSers 官方登录页
372
- 3. 你在 DSers 网站上正常登录
373
- 4. 工具拿到登录状态,加密存到本地
440
+ 2. 浏览器自动打开 DSers OAuth 授权页
441
+ 3. 你在 DSers 网站上授权
442
+ 4. 工具拿到 OAuth token,加密存到本地
374
443
  5. 搞定 — 之后 MCP 直接能用,配置文件里不需要写任何密码
375
444
 
376
- 支持 Chrome、Edge、Brave 等主流浏览器。Mac Safari 也行。
377
-
378
- **登录大约 6 小时有效。** 过期了 AI 助手会提醒你重新跑一下 `login`,10 秒的事。
445
+ **Token 自动续期** refresh token 会自动保持登录状态,你基本不需要重新登录。
379
446
 
380
447
  **换账号?**
381
448
 
@@ -384,7 +451,7 @@ npx @lofder/dsers-mcp-product logout
384
451
  npx @lofder/dsers-mcp-product login
385
452
  ```
386
453
 
387
- > **开发者注:** headless / CI 环境也支持通过 `DSERS_TOKEN` 环境变量传入凭据。普通用户直接用 `login` 就行。
454
+ > **开发者注:** headless / CI 环境支持通过 `DSERS_ACCESS_TOKEN` `DSERS_REFRESH_TOKEN` 环境变量传入凭据。
388
455
 
389
456
  ### 使用示例
390
457
 
@@ -396,6 +463,12 @@ npx @lofder/dsers-mcp-product login
396
463
 
397
464
  > "批量导入这 3 个商品,全部推到店铺:[链接1] [链接2] [链接3]"
398
465
 
466
+ > "帮我搜一下 5 美金以下的手机壳"
467
+
468
+ > "看下我的导入列表里有什么"
469
+
470
+ > "我已经推送了哪些商品到店铺?"
471
+
399
472
  > "把这个商品推到我所有店铺"
400
473
 
401
474
  > "帮我把标题和描述重写一下做 SEO 优化,然后推送"
@@ -413,24 +486,14 @@ npx @smithery/cli mcp add @dsersx/product-mcp --client cursor
413
486
  ### 从源码安装
414
487
 
415
488
  ```bash
416
- # 克隆
417
489
  git clone https://github.com/lofder/dsers-mcp-product.git
418
490
  cd dsers-mcp-product
419
-
420
- # 安装
421
491
  npm install
422
-
423
- # 配置(复制并填写你的 DSers 账户信息)
424
- cp .env.example .env
425
-
426
- # 类型检查
427
- npx tsc --noEmit
428
-
429
- # 开发运行
430
- npx @smithery/cli dev ./src/index.ts
492
+ npm run build
493
+ npm test
431
494
  ```
432
495
 
433
- ### 九个工具
496
+ ### 十二个工具
434
497
 
435
498
  | # | 工具 | 干什么的 |
436
499
  |---|------|---------|
@@ -443,8 +506,11 @@ npx @smithery/cli dev ./src/index.ts
443
506
  | 7 | `dsers_store_push` | 把商品推到你的 Shopify 或 Wix 店铺 — 单个推、批量推、或一次推到所有店铺 |
444
507
  | 8 | `dsers_job_status` | 看看推送完了没、成功了没 |
445
508
  | 9 | `dsers_product_delete` | 从 DSers 导入列表中删除商品(不可恢复,需确认) |
509
+ | 10 | `dsers_import_list` | 浏览导入待推送列表,含成本价、售价、库存、加价状态 |
510
+ | 11 | `dsers_my_products` | 查看已推到店铺的商品,带供应商链接方便重新导入 |
511
+ | 12 | `dsers_find_product` | 在 DSers 商品池搜索,支持关键词和以图搜图,结果可直接导入 |
446
512
 
447
- 报错时会返回清晰的消息,AI 助手能看懂出了什么问题、该怎么办 — 不会给你一串看不懂的错误码。
513
+ 报错时会返回清晰的消息,AI 助手能看懂出了什么问题、该怎么办。
448
514
 
449
515
  ### 推送前安全校验
450
516
 
@@ -475,12 +541,36 @@ MCP 客户端可直接展示给用户的工作流模板:
475
541
 
476
542
  ### 后续计划
477
543
 
544
+ - 商品池搜索增强(分类过滤、URL 搜索、商品详情查看)
478
545
  - 支持更多 DSers 已接入的店铺平台(eBay、Wish 等)
479
546
  - 更智能的定价规则模板
480
547
  - 更精细的库存同步选项
481
548
 
482
549
  有想法或需求?欢迎 [提 issue](https://github.com/lofder/dsers-mcp-product/issues) —— 非常欢迎其他开发者的建议和贡献。
483
550
 
551
+ ### 常见问题
552
+
553
+ **DSers MCP Product 是什么?**
554
+ 一个免费开源的 MCP 服务器,让 AI Agent(如 Claude、Cursor)自动完成从速卖通/Alibaba/1688 到 Shopify/Wix 店铺的商品导入全流程。不用手动复制商品数据,用自然语言对话就能操作。
555
+
556
+ **怎么用?**
557
+ 在 Cursor 或 Claude Desktop 里输入"导入这个商品,加价 2.5 倍,推送到我的店铺",MCP 服务器自动完成抓取商品数据、应用定价规则、编辑变体、推送到店铺的全部流程。
558
+
559
+ **收费吗?**
560
+ 完全免费。项目开源(MIT 协议),你只需要一个免费的 DSers 账号和已连接的 Shopify 或 Wix 店铺。
561
+
562
+ **安全吗?需要提供密码吗?**
563
+ 不需要。登录采用零密码浏览器认证——你在 DSers 官网登录,工具只接收会话令牌,密码永远不会经过 MCP 服务器。项目在 [SafeSkill](https://safeskill.dev/scan/@lofder/dsers-mcp-product) 安全扫描中获得 92/100 分。
564
+
565
+ **支持哪些 AI 客户端?**
566
+ Cursor、Claude Desktop、Claude Code、Windsurf,以及任何支持 stdio 传输的 MCP 兼容客户端。
567
+
568
+ **和 AliDropify、AutoDS 等 Dropshipping 工具有什么区别?**
569
+ 大多数 Dropshipping 工具有自己的界面,需要点来点去。DSers MCP Product 完全不同——它直接连接你的 AI Agent,用对话代替点击来自动化工作流。而且完全开源免费,没有订阅分级。
570
+
571
+ **能同时推送到多个店铺吗?**
572
+ 可以。`dsers_store_push` 支持一条命令将商品推送到所有已连接的 Shopify 和 Wix 店铺,支持按店铺设置不同的定价和可见性。
573
+
484
574
  ### 其他版本
485
575
 
486
576
  也提供 [Python 版本](https://github.com/lofder/dsers-mcp-product-py),适用于本地 stdio 部署。
@@ -1,6 +1,6 @@
1
- export interface BrowserMatch {
2
- name: string;
3
- path: string;
4
- }
5
- export declare function findChromiumBrowser(): BrowserMatch | null;
1
+ /**
2
+ * Open a URL in the system's default browser.
3
+ * Uses spawn() with explicit arguments to avoid command injection.
4
+ */
5
+ export declare function openBrowser(url: string): void;
6
6
  //# sourceMappingURL=browser-finder.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"browser-finder.d.ts","sourceRoot":"","sources":["../../src/auth/browser-finder.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CACd;AA4FD,wBAAgB,mBAAmB,IAAI,YAAY,GAAG,IAAI,CAMzD"}
1
+ {"version":3,"file":"browser-finder.d.ts","sourceRoot":"","sources":["../../src/auth/browser-finder.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAW7C"}
@@ -1,99 +1,17 @@
1
- import { execSync } from "node:child_process";
2
- import { existsSync } from "node:fs";
3
- import { join } from "node:path";
4
- const MACOS_BROWSERS = [
5
- ["Google Chrome", "/Applications/Google Chrome.app/Contents/MacOS/Google Chrome"],
6
- ["Microsoft Edge", "/Applications/Microsoft Edge.app/Contents/MacOS/Microsoft Edge"],
7
- ["Brave Browser", "/Applications/Brave Browser.app/Contents/MacOS/Brave Browser"],
8
- ["Arc", "/Applications/Arc.app/Contents/MacOS/Arc"],
9
- ["Chromium", "/Applications/Chromium.app/Contents/MacOS/Chromium"],
10
- ["Opera", "/Applications/Opera.app/Contents/MacOS/Opera"],
11
- ["Vivaldi", "/Applications/Vivaldi.app/Contents/MacOS/Vivaldi"],
12
- ];
13
- const LINUX_COMMANDS = [
14
- ["Google Chrome", "google-chrome-stable"],
15
- ["Google Chrome", "google-chrome"],
16
- ["Chromium", "chromium-browser"],
17
- ["Chromium", "chromium"],
18
- ["Microsoft Edge", "microsoft-edge-stable"],
19
- ["Microsoft Edge", "microsoft-edge"],
20
- ["Brave Browser", "brave-browser"],
21
- ["Brave Browser", "brave-browser-stable"],
22
- ["Opera", "opera"],
23
- ["Vivaldi", "vivaldi-stable"],
24
- ["Vivaldi", "vivaldi"],
25
- ];
26
- const WIN_PATHS = [
27
- ["Google Chrome", "Google\\Chrome\\Application\\chrome.exe"],
28
- ["Microsoft Edge", "Microsoft\\Edge\\Application\\msedge.exe"],
29
- ["Brave Browser", "BraveSoftware\\Brave-Browser\\Application\\brave.exe"],
30
- ["Opera", "Opera\\opera.exe"],
31
- ["Vivaldi", "Vivaldi\\Application\\vivaldi.exe"],
32
- ["Chromium", "Chromium\\Application\\chrome.exe"],
33
- ];
34
- function whichSync(cmd) {
35
- if (!/^[a-z0-9._-]+$/i.test(cmd))
36
- return null;
37
- try {
38
- return execSync(`which ${cmd} 2>/dev/null`, { encoding: "utf-8", timeout: 3000 }).trim() || null;
1
+ /**
2
+ * Open a URL in the system's default browser.
3
+ * Uses spawn() with explicit arguments to avoid command injection.
4
+ */
5
+ import { spawnSync } from "node:child_process";
6
+ export function openBrowser(url) {
7
+ const cmd = process.platform === "darwin" ? "open"
8
+ : process.platform === "win32" ? "cmd"
9
+ : "xdg-open";
10
+ if (process.platform === "win32") {
11
+ spawnSync(cmd, ["/c", "start", "", url], { stdio: "ignore" });
39
12
  }
40
- catch {
41
- return null;
13
+ else {
14
+ spawnSync(cmd, [url], { stdio: "ignore" });
42
15
  }
43
16
  }
44
- function findOnMacOS() {
45
- for (const [name, p] of MACOS_BROWSERS) {
46
- if (existsSync(p))
47
- return { name, path: p };
48
- }
49
- // mdfind fallback for non-standard install locations
50
- try {
51
- const result = execSync('mdfind "kMDItemCFBundleIdentifier == com.google.Chrome" 2>/dev/null', { encoding: "utf-8", timeout: 3000 }).trim();
52
- if (result) {
53
- const appPath = result.split("\n")[0];
54
- const execPath = join(appPath, "Contents/MacOS/Google Chrome");
55
- if (existsSync(execPath))
56
- return { name: "Google Chrome", path: execPath };
57
- }
58
- }
59
- catch { /* mdfind unavailable or timed out */ }
60
- return null;
61
- }
62
- function findOnLinux() {
63
- for (const [name, cmd] of LINUX_COMMANDS) {
64
- const p = whichSync(cmd);
65
- if (p)
66
- return { name, path: p };
67
- }
68
- return null;
69
- }
70
- function findOnWindows() {
71
- const roots = [
72
- process.env.PROGRAMFILES ?? "C:\\Program Files",
73
- process.env["PROGRAMFILES(X86)"] ?? "C:\\Program Files (x86)",
74
- process.env.LOCALAPPDATA ?? "",
75
- ].filter(Boolean);
76
- for (const [name, rel] of WIN_PATHS) {
77
- for (const root of roots) {
78
- const full = join(root, rel);
79
- if (existsSync(full))
80
- return { name, path: full };
81
- }
82
- }
83
- // Edge is pre-installed on Windows 10+ in a special location
84
- const edgeSys = "C:\\Program Files (x86)\\Microsoft\\Edge\\Application\\msedge.exe";
85
- if (existsSync(edgeSys))
86
- return { name: "Microsoft Edge", path: edgeSys };
87
- return null;
88
- }
89
- export function findChromiumBrowser() {
90
- const platform = process.platform;
91
- if (platform === "darwin")
92
- return findOnMacOS();
93
- if (platform === "linux")
94
- return findOnLinux();
95
- if (platform === "win32")
96
- return findOnWindows();
97
- return null;
98
- }
99
17
  //# sourceMappingURL=browser-finder.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"browser-finder.js","sourceRoot":"","sources":["../../src/auth/browser-finder.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"browser-finder.js","sourceRoot":"","sources":["../../src/auth/browser-finder.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAE/C,MAAM,UAAU,WAAW,CAAC,GAAW;IACrC,MAAM,GAAG,GACP,OAAO,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM;QACtC,CAAC,CAAC,OAAO,CAAC,QAAQ,KAAK,OAAO,CAAC,CAAC,CAAC,KAAK;YACtC,CAAC,CAAC,UAAU,CAAC;IAEf,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO,EAAE,CAAC;QACjC,SAAS,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,OAAO,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC;IAChE,CAAC;SAAM,CAAC;QACN,SAAS,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC;IAC7C,CAAC;AACH,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"cdp-session.d.ts","sourceRoot":"","sources":["../../src/auth/cdp-session.ts"],"names":[],"mappings":"AAmBA,MAAM,WAAW,cAAc;IAC7B,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;CACf;AAoND,wBAAsB,WAAW,CAC/B,WAAW,EAAE,MAAM,EACnB,GAAG,GAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAe,GACpC,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC,CAmEhC"}
1
+ {"version":3,"file":"cdp-session.d.ts","sourceRoot":"","sources":["../../src/auth/cdp-session.ts"],"names":[],"mappings":"AAeA,MAAM,WAAW,cAAc;IAC7B,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;CACf;AAyQD,wBAAsB,WAAW,CAC/B,WAAW,EAAE,MAAM,EACnB,GAAG,GAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAe,GACpC,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC,CAqGhC"}