DSers MCP Product
Imports products from AliExpress into DSers for dropshipping.
Pushes imported products to Shopify stores via DSers.
Pushes imported products to Wix stores via DSers.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@DSers MCP Productimport this AliExpress product and push to Shopify with 2.5x markup"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
DSers MCP Product — Automate Dropshipping AI tools/AliExpress to Shopify & Wix Import
An open-source MCP server to automate DSers product import, bulk edit variants, and push to Shopify or Wix using AI.
English
⚠️ 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!
DSers MCP Product is an open-source MCP (Model Context Protocol) server that lets AI Agents automate the entire DSers import workflow — from AliExpress / Alibaba / 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.
What can it do?
One-click import — paste a product link, your AI agent imports it into DSers automatically
Clean up titles — strips the messy keyword-stuffed AliExpress titles into something readable
Pricing rules — markup multiplier (e.g. 2.5x), fixed markup (e.g. +$5), compare-at / sale prices
Batch import — import multiple products at once with a list of URLs
Multi-store push — push one product to all your connected Shopify & Wix stores in one go
Safety checks — automatically blocks pushes that would result in below-cost pricing, zero price, or zero stock
SEO optimization — let AI rewrite the title and description for better search rankings before pushing
The server is hosted on Vercel and published across multiple platforms:
Available On
Platform | Link |
npm | |
MCP Registry (Official) | |
Smithery | |
Glama.ai | |
mcp.so | |
mcpservers.org | |
MCP Marketplace | |
awesome-mcp-servers | |
Dev.to |
Supported product sources
Works with product links from AliExpress, Alibaba.com, and Accio.com. Just give your AI agent a product link from any of these platforms, and it will import the product into DSers and push it to your store. (1688.com links are also recognized but require your DSers account to have 1688 source authorization enabled.)
Accio.com — AI-powered product sourcing
Accio.com is Alibaba's AI sourcing assistant. You describe what you're looking for (e.g. "wireless earbuds under $5"), and it searches AliExpress & Alibaba for you.
How to use it with DSers MCP:
Go to accio.com and search for products in natural language.
Browse the results. When you find a product you like, click on it to open the product detail panel.
Copy the URL from your browser address bar — it will look something like:
https://www.accio.com/c/xxx?productId=1005009871053792&ds=aliexpress.comGive that link to your AI agent, e.g.: "Import this product and push to my store: [paste URL]"
The agent handles the rest — no extra setup needed.
This works for both AliExpress and Alibaba products found on Accio.
Documentation
Document | Description |
Three-layer architecture, directory structure, data flow | |
Installation, client config (Cursor, Claude Desktop), scenario examples | |
AI agent instruction file — workflow, rules, push options, error handling | |
Chinese human-readable guide for SKILL.md |
What You Need
A DSers account (free plan works)
A Shopify or Wix store already connected in DSers
An MCP-compatible AI client — Cursor, Claude Desktop, Windsurf, or any client that supports MCP
Quick Start
Step 1: Log in (one time — opens your browser)
npx @lofder/dsers-mcp-product loginA browser window opens to the official DSers login page. You log in on DSers's own website — your password never passes through this tool. After login, the session is encrypted and saved locally.
Step 2: Add to your MCP client (no credentials needed)
{
"mcpServers": {
"dsers-mcp-product": {
"command": "npx",
"args": ["-y", "@lofder/dsers-mcp-product"]
}
}
}That's it. No passwords in config files.
Also listed on the official MCP Registry.
Authentication — Zero-Password Login
Your DSers password never touches this tool. Here's how login works:
You run
npx @lofder/dsers-mcp-product loginYour browser opens the official DSers login page
You log in on DSers's own website, as usual
The tool picks up your login session and encrypts it locally
Done — from now on, the MCP server just works. No passwords in any config file.
Works with Chrome, Edge, Brave, and other Chromium browsers. On Mac, Safari works too.
Sessions last about 6 hours. When it expires, your AI agent will ask you to run login again — takes 10 seconds.
Switching accounts?
npx @lofder/dsers-mcp-product logout
npx @lofder/dsers-mcp-product loginFor developers: The server also accepts a
DSERS_TOKENenv var for headless/CI environments. For most users, just uselogin.
Usage Examples
Once set up, just talk to your AI agent in plain language:
"Import this product and push to my Shopify store as a draft: https://www.aliexpress.com/item/1005006372921430.html"
"Import this product, mark up the price by 2.5x, and push it: https://www.aliexpress.com/item/1005006372921430.html"
"Batch import these 3 products and push them all to my store: [URL1] [URL2] [URL3]"
"Push this product to all my connected stores"
"Rewrite the title and description for SEO, then push to my store"
The agent figures out the right tools to call. You don't need to know tool names or parameters.
Install via Smithery
npx @smithery/cli mcp add @dsersx/product-mcp --client cursorOr browse at smithery.ai/server/@dsersx/product-mcp.
Install from Source
# Clone
git clone https://github.com/lofder/dsers-mcp-product.git
cd dsers-mcp-product
# Install
npm install
# Configure (copy and fill in your DSers credentials)
cp .env.example .env
# Type check
npx tsc --noEmit
# Run with Smithery dev
npx @smithery/cli dev ./src/index.tsProject Structure
dsers-mcp-product/
├── src/
│ ├── index.ts # MCP server entry — tool registration
│ ├── service.ts # Import flow orchestration (7 operations)
│ ├── provider.ts # DSers API adapter
│ ├── rules.ts # Rule validation & application engine
│ ├── push-options.ts # Push option normalization
│ ├── resolver.ts # URL normalization (AliExpress/Alibaba/Accio)
│ ├── job-store.ts # File-based job persistence
│ └── dsers/ # Low-level DSers API wrappers
│ ├── config.ts # Configuration & environment
│ ├── auth.ts # Login, session cache, auto-refresh
│ ├── client.ts # Authenticated HTTP client
│ ├── account.ts # Store & user management APIs
│ ├── product.ts # Import list & push APIs
│ └── settings.ts # Shipping, pricing, billing APIs
├── test/ # Smoke tests
├── smithery.yaml # Smithery runtime config
├── package.json
├── tsconfig.json
└── .env.exampleNine Tools
# | Tool | What it does |
1 |
| See your connected stores, available shipping methods, pricing rules, and what rules you can apply |
2 |
| Test your pricing or title rules before applying — catches mistakes early |
3 |
| Paste a product URL, optionally apply pricing/title rules, and get a preview before pushing |
4 |
| Review a product you already imported — title, price, variants, stock at a glance |
5 |
| Edit pricing, content, images, or variant rules on an already-imported product (incremental merge — no re-import needed) |
6 |
| Set whether the product shows up in your store or stays as a hidden draft |
7 |
| Send products to your Shopify or Wix store — one at a time, in bulk, or to all stores at once |
8 |
| Check if a push finished and whether it succeeded |
9 |
| Delete a product from the DSers import list (irreversible, requires confirmation) |
All tools return clear error messages so your AI agent knows what went wrong and what to do next — no cryptic error codes.
Pre-Push Safety Checks
Before pushing a product to your store, the tool automatically checks for common mistakes:
Hard blocks (push won't go through): selling below supplier cost, zero sell price, all variants out of stock
Warnings (push goes through, but you'll see a heads-up): profit margin below 10%, stock under 5 units, sell price under $1
If something looks wrong, your AI agent will tell you exactly which variant has the problem and why. If you're sure it's fine, you can override with force_push.
Pricing Rule Conflict Detection
If your DSers store has its own Pricing Rule enabled (basic/standard/advanced), and you also set pricing rules through MCP, the push will be blocked — not just warned. The agent will show two fix options:
Set
pricing_rule_behavior='apply_store_pricing_rule'in push options to accept the store's pricing ruleDisable the Pricing Rule in your DSers store settings to use MCP pricing instead
Four Prompts
Ready-made workflows your AI client can use directly:
Prompt | Description |
| Import a single product and push to store as draft |
| Batch import with pricing multiplier |
| Push one product to all connected stores |
| Import, AI-rewrite title & description for SEO, then push |
Environment Variables
Variable | Required | Description |
| No |
|
| No | Override API base URL |
| No | Job state directory (default: |
What's Next
Support more store platforms that DSers already connects to (eBay, Wish, etc.)
Smarter pricing rule templates
More granular inventory sync options
Got an idea or feature request? Open an issue — suggestions and contributions from other developers are very welcome.
Also Available
A Python version is available for local stdio deployments.
License
MIT
Related MCP server: FishClaw MCP
中文
⚠️ 快速迭代阶段: 我手上只有有限的店铺和 DSers 账号,很难囊括所有场景。我在尽可能测试各种情况下可能出现的问题,发现一个修一个,修的过程中也可能连带引出其他问题,因此近期更新迭代速度会非常快。请时刻关注最新版本,也非常欢迎大家来帮我测试!
DSers MCP Product 是一个开源的 MCP (Model Context Protocol) 服务器,让 AI Agent 自动完成 DSers 的整个商品导入流程 —— 从速卖通 / Alibaba / Accio.com 商品链接到 Shopify 或 Wix 店铺上架。批量导入、批量编辑变体、清理速卖通标题、应用定价规则、推送到多个店铺 —— 只需一句话给你的 AI agent。
能做什么?
一句话导入 — 贴个商品链接,AI 助手自动导入到 DSers
标题清理 — 把速卖通那些关键词堆砌的乱标题整理成人话
定价规则 — 加价倍率(比如 2.5 倍)、固定加价(比如 +5 美金)、划线价
批量导入 — 一次丢一堆链接,全部导入
多店铺推送 — 一个商品一次推到你所有的 Shopify 和 Wix 店铺
安全校验 — 推送前自动拦截低于成本价、零售价为零、库存为零的商品
SEO 优化 — 让 AI 重写标题和描述,提高搜索排名后再推送
服务已托管在 Vercel,并发布到多个平台:
发布平台
平台 | 链接 |
npm | |
MCP Registry(官方) | |
Smithery | |
Glama.ai | |
mcp.so | |
mcpservers.org | |
MCP Marketplace | |
awesome-mcp-servers | |
Dev.to |
支持的商品来源
支持 速卖通(AliExpress)、Alibaba.com 和 Accio.com 的商品链接。把任意平台的商品链接丢给你的 AI 助手,它就能自动导入 DSers 并上架到你的店铺。(1688 链接也能识别,但需要你的 DSers 账号开通了 1688 来源权限。)
Accio.com — AI 智能找商
Accio.com 是阿里巴巴的 AI 选品助手。你用自然语言描述想找的商品(比如"5 美金以下的蓝牙耳机"),它会帮你在速卖通和阿里巴巴上搜索。
怎么配合 DSers MCP 用:
打开 accio.com,用自然语言搜索你想要的商品。
在搜索结果里浏览,看到感兴趣的商品点击进去看详情。
复制浏览器地址栏的链接,大概长这样:
https://www.accio.com/c/xxx?productId=1005009871053792&ds=aliexpress.com把链接丢给你的 AI 助手,比如说:"帮我导入这个商品并上架:[粘贴链接]"
剩下的 AI 助手会自动搞定,不需要任何额外设置。
Accio 上搜出来的速卖通和阿里巴巴商品都能用。
文档
文档 | 说明 |
三层架构、目录结构、数据流 | |
安装、客户端配置(Cursor、Claude Desktop)、使用场景 | |
AI agent 指令文件 — 工作流、规则、推送选项、错误处理 | |
SKILL.md 的中文说明 |
使用前提
一个 DSers 账号(免费版就行)
Shopify 或 Wix 店铺已经在 DSers 里绑定好了
一个支持 MCP 的 AI 客户端 — Cursor、Claude Desktop、Windsurf 或其他支持 MCP 的工具
快速开始
第 1 步:登录(一次性操作,会打开浏览器)
npx @lofder/dsers-mcp-product login浏览器会自动打开 DSers 官方登录页。你在 DSers 自己的网站上登录 —— 密码完全不经过本工具。登录后 session 加密保存到本地。
第 2 步:添加到你的 MCP 客户端(不需要密码)
{
"mcpServers": {
"dsers-mcp-product": {
"command": "npx",
"args": ["-y", "@lofder/dsers-mcp-product"]
}
}
}搞定。配置文件里不需要任何密码。
同时已收录到官方 MCP Registry。
授权认证 — 零密码登录
你的 DSers 密码完全不经过本工具。登录过程是这样的:
运行
npx @lofder/dsers-mcp-product login浏览器自动打开 DSers 官方登录页
你在 DSers 网站上正常登录
工具拿到登录状态,加密存到本地
搞定 — 之后 MCP 直接能用,配置文件里不需要写任何密码
支持 Chrome、Edge、Brave 等主流浏览器。Mac 上 Safari 也行。
登录大约 6 小时有效。 过期了 AI 助手会提醒你重新跑一下 login,10 秒的事。
换账号?
npx @lofder/dsers-mcp-product logout
npx @lofder/dsers-mcp-product login开发者注: headless / CI 环境也支持通过
DSERS_TOKEN环境变量传入凭据。普通用户直接用login就行。
使用示例
装好之后,直接用自然语言跟 AI 助手说就行:
"帮我导入这个商品,推到我的 Shopify 店铺草稿:https://www.aliexpress.com/item/1005006372921430.html"
"导入这个商品,加价 2.5 倍,然后推送:https://www.aliexpress.com/item/1005006372921430.html"
"批量导入这 3 个商品,全部推到店铺:[链接1] [链接2] [链接3]"
"把这个商品推到我所有店铺"
"帮我把标题和描述重写一下做 SEO 优化,然后推送"
AI 助手会自己判断调用哪个工具,你不需要知道工具名称或参数。
通过 Smithery 安装
npx @smithery/cli mcp add @dsersx/product-mcp --client cursor或在 smithery.ai/server/@dsersx/product-mcp 浏览和安装。
从源码安装
# 克隆
git clone https://github.com/lofder/dsers-mcp-product.git
cd dsers-mcp-product
# 安装
npm install
# 配置(复制并填写你的 DSers 账户信息)
cp .env.example .env
# 类型检查
npx tsc --noEmit
# 开发运行
npx @smithery/cli dev ./src/index.ts九个工具
# | 工具 | 干什么的 |
1 |
| 查看你绑定了哪些店铺、有哪些配送方式、定价规则、能用什么规则 |
2 |
| 先试试定价或标题规则对不对,不会真改东西 |
3 |
| 贴个商品链接,可以顺便加定价/标题规则,推送前先给你看预览 |
4 |
| 看一下已经导入的商品 — 标题、价格、变体、库存一目了然 |
5 |
| 对已导入的商品修改定价、标题、图片或变体规则(增量合并,不需要重新导入) |
6 |
| 设置商品在店铺里是上架展示还是隐藏草稿 |
7 |
| 把商品推到你的 Shopify 或 Wix 店铺 — 单个推、批量推、或一次推到所有店铺 |
8 |
| 看看推送完了没、成功了没 |
9 |
| 从 DSers 导入列表中删除商品(不可恢复,需确认) |
报错时会返回清晰的消息,AI 助手能看懂出了什么问题、该怎么办 — 不会给你一串看不懂的错误码。
推送前安全校验
推送到店铺之前,工具会自动帮你检查常见问题:
直接拦截(不让推):售价低于进货成本、零售价为 0、所有变体都没库存
警告提醒(能推,但会提示你):利润率低于 10%、库存少于 5 件、售价低于 1 美金
有问题的话,AI 助手会告诉你具体是哪个变体出了什么问题。确定没问题的话可以用 force_push 强制推送。
定价规则冲突检测
如果你的 DSers 店铺自己启用了定价规则(基础/标准/高级),同时你又通过 MCP 设置了定价规则,推送会被直接拦截而不是仅警告。AI 助手会给出两个解决方案:
在推送选项中设置
pricing_rule_behavior='apply_store_pricing_rule'接受店铺端的定价规则在 DSers 店铺设置中关闭定价规则,使用 MCP 的定价
四个预设提示
MCP 客户端可直接展示给用户的工作流模板:
提示 | 说明 |
| 一键导入单个商品并推送为草稿 |
| 批量导入 + 统一定价倍率 |
| 一个商品推送到所有店铺 |
| 导入后 AI 重写标题和描述做 SEO 优化,再推送 |
后续计划
支持更多 DSers 已接入的店铺平台(eBay、Wish 等)
更智能的定价规则模板
更精细的库存同步选项
有想法或需求?欢迎 提 issue —— 非常欢迎其他开发者的建议和贡献。
其他版本
也提供 Python 版本,适用于本地 stdio 部署。
许可证
MIT
Available Tools
9 toolsdsers_job_statusImport / Push Job Status TrackerARead-onlyIdempotent
Check the current status of an import or push job. Status lifecycle: preview_ready → push_requested → completed or failed. Returns: job_id, status, target_store, push_status (if pushed), warnings.
| Name | Required | Description | Default |
|---|---|---|---|
| job_id | Yes | Job ID from dsers_product_import or dsers_store_push. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark the tool as read-only, idempotent, and non-destructive. The description adds valuable behavioral context by outlining the status lifecycle and return fields (job_id, status, target_store, push_status, warnings). This goes beyond the annotations and helps the agent anticipate what the tool will report and how to interpret it.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with the action and resource. Includes the status lifecycle and return fields without any filler. Every word earns its place, making it easy to scan and understand quickly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter read-only status tool, this description covers the purpose, lifecycle, and return payload. Since there is no output schema, the return field list is essential and provided. It omits error handling for invalid job IDs, but that is a minor gap given the tool's simplicity and the annotations covering idempotency.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% for the sole parameter, so the baseline is 3. The description adds extra context by specifying that job_id comes from dsers_product_import or dsers_store_push, helping the agent know where to find a valid job ID. This is useful guidance beyond the raw schema definition.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description uses a specific verb ('Check') and resource ('status of an import or push job'), clearly distinguishing it from sibling tools that perform imports, pushes, and product management. It immediately tells the agent what this tool does and why it is separate from the others.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implicitly defines when to use this tool: after initiating an import or push, you check its status. It also describes the lifecycle of statuses, giving context on what to expect. It does not explicitly state exclusions or alternatives, but sibling tools are all different operations, so there is no ambiguity about when this tool applies.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dsers_product_deleteDelete Product from Import ListADestructive
Permanently delete a product from the DSers import list. IRREVERSIBLE — the product cannot be recovered after deletion. Requires explicit confirmation (confirm=true) to execute. If called without confirm=true, returns a confirmation prompt — show this to the user. SCOPE: Only removes the product from DSers import list (pre-push staging area). Products already pushed to Shopify/Wix stores are NOT affected — to remove a store listing, use the Shopify/Wix admin directly. BUSINESS CONTEXT: Deleting from import list means losing the supplier mapping (link between the store product and the AliExpress/Alibaba supplier). If the user wants to re-import later, they will need the original supplier URL. AGENT PROTOCOL: Before calling with confirm=true, always: 1) Show the user the product title and supplier URL. 2) Warn that this cannot be undone. 3) Get explicit user consent (e.g. 'yes, delete it'). Never set confirm=true without the user's explicit approval.
| Name | Required | Description | Default |
|---|---|---|---|
| confirm | No | Set to true to confirm deletion. First call without this to get a confirmation prompt, then call again with confirm=true after user approves. | |
| import_item_id | Yes | The import list item ID to delete. Obtain from dsers_product_preview (provider_state.import_item_id) or from searchImportList results. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already include destructiveHint=true, but the description adds substantial context: the operation is 'IRREVERSIBLE,' requires 'explicit confirmation,' only affects the pre-push staging area, and deletes the supplier mapping. It also discloses the confirmation-prompt behavior when confirm=true is absent. This greatly exceeds what the annotations alone convey and introduces no contradictions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is structured with clear sections (main purpose, confirm requirement, scope, business context, agent protocol). Every sentence contributes meaningful information, avoiding fluff. Despite its length, it is front-loaded with the core purpose and organized so an agent can quickly extract the essential safety and usage instructions.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given that this is a destructive operation with no output schema, the description covers all necessary context: what is deleted, what is not affected, the supplier-mapping consequence, and the required user-consent workflow. It explains the return behavior (confirmation prompt) and provides enough detail for an agent to use the tool safely and correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Although the input schema provides descriptions for both parameters, the description enriches them significantly. It clarifies the confirm parameter's two-step flow: the first call without confirm=true returns a confirmation prompt, and a second call with confirm=true executes only after user approval. It also specifies how to obtain import_item_id from dsers_product_preview or searchImportList results, which is not in the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with 'Permanently delete a product from the DSers import list,' which uses a specific verb ('delete') and resource ('product from the DSers import list'). It clearly distinguishes itself from sibling tools such as dsers_product_import, dsers_product_preview, and dsers_store_push, making the purpose unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly states when to use this tool and when not to. It says only products in the import list are affected, and for store listings it directs to 'use the Shopify/Wix admin directly.' It also provides a detailed agent protocol: show the user product title and supplier URL, warn that deletion is irreversible, and obtain explicit consent before setting confirm=true.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dsers_product_importAliExpress / Alibaba / Accio Product ImportA
Import product(s) from supplier URL(s) into the DSers import list and return a preview. Supports AliExpress, Alibaba, and Accio.com URLs. Provide source_url (single) or source_urls_json (batch). Optionally apply rules at import time via rules_json or flat params. EXPIRED/LOST JOB_ID: Re-import with source_url — DSers finds the existing draft (no duplicate). To UPDATE rules on an existing import, use dsers_product_update_rules instead. SINGLE RESPONSE: compact preview with all variants [name, sell, qty], price_summary, active_rules. BATCH RESPONSE: summary mode (default) returns job_id + key metadata per product (~100 tokens each). Use batch_detail='full' for complete previews. Use dsers_product_preview for individual details.
| Name | Required | Description | Default |
|---|---|---|---|
| job_id | No | (DEPRECATED — use dsers_product_update_rules) When provided without source_url, forwards to dsers_product_update_rules internally. | |
| country | No | Target country code for shipping and pricing lookup. Examples: US, GB, DE, FR, AU. | US |
| rules_json | No | Rules as JSON string. Keys: pricing, content, images, variant_overrides, option_edits. PRICING: {mode:'fixed_price',fixed_price:9.99} | {mode:'multiplier',multiplier:2} | {mode:'fixed_markup',fixed_markup:5}. VARIANT_OVERRIDES: [{match:'Red',sell_price:9.99,compare_at_price:19.99}]. CONTENT: {title_override, title_prefix, title_suffix, description_override_html, tags_add:['tag']}. IMAGES: {drop_indexes, reorder, add_urls, keep_first_n}. OPTION_EDITS: [{action:'rename_option',option_name:'Color',new_name:'Style'}]. | |
| source_url | No | Single supplier product URL. Supports AliExpress (aliexpress.com/item/xxx.html), Alibaba (alibaba.com/product-detail/xxx.html), and Accio.com product links (accio.com/c/...?productId=xxx&ds=aliexpress.com). | |
| source_hint | No | Supplier platform hint. Valid values: auto, aliexpress, alibaba, accio. Default: auto (detected from URL). | auto |
| batch_detail | No | Batch response detail level. summary (default): job_id + title + sell_price + cost + variants_count + stock per product (~100 tokens each). full: complete preview per product (can be very large for 10+ products). Single imports always return full preview. | |
| pricing_mode | No | Flat param: pricing mode. Use instead of rules_json for simple pricing. | |
| target_store | No | Store ID or display name from dsers_store_discover. Required when the account has multiple stores. | |
| title_prefix | No | Flat param: prepend to product title. | |
| title_suffix | No | Flat param: append to product title. | |
| title_override | No | Flat param: replace entire product title. | |
| visibility_mode | No | Product visibility after push. backend_only (default): saved as draft, not visible to shoppers — SAFE, no financial risk. sell_immediately: published and LIVE on the storefront — RISK: verify pricing and inventory first. | |
| source_urls_json | No | Batch import: JSON array of URL strings or objects with {url, rules?, source_hint?, country?, target_store?, visibility_mode?}. Example: ["https://aliexpress.com/item/123.html", {"url": "https://aliexpress.com/item/456.html", "rules": {"pricing": {"mode": "multiplier", "multiplier": 3}}}] | |
| pricing_multiplier | No | Flat param: multiplier value when pricing_mode='multiplier'. | |
| pricing_fixed_price | No | Flat param: exact price in dollars when pricing_mode='fixed_price'. | |
| pricing_fixed_markup | No | Flat param: markup in dollars when pricing_mode='fixed_markup'. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations, the description discloses important behavioral traits: it explains the difference between single and batch responses, the deduplication behavior on re-import ('DSers finds the existing draft (no duplicate)'), and the deprecation of job_id. It also clearly indicates that imports create entries (not read-only) while warning about update operations. No contradictions with the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is lengthy but well-structured and information-dense. It front-loads the core purpose and then details response modes and alternative tools without redundancy. The use of all-caps section headers (e.g., 'SINGLE RESPONSE', 'BATCH RESPONSE') improves scannability, though slightly verbose for a tool description.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (16 parameters, single/batch modes, no output schema), the description is remarkably complete. It explains what the return previews look like in both single and batch modes, how to handle lost job IDs, and the distinction between this tool and its siblings. No output schema exists, so the description fully compensates by detailing response formats.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already provides 100% description coverage for all 16 parameters, so the baseline is 3. The description adds value by clarifying parameter relationships and usage patterns, such as 'Provide source_url (single) or source_urls_json (batch)' and 'Optionally apply rules at import time via rules_json or flat params.' However, the marginal gain is limited since the schema already explains each parameter in detail.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a clear, specific action: 'Import product(s) from supplier URL(s) into the DSers import list and return a preview.' It also names the exact supported platforms (AliExpress, Alibaba, Accio.com), distinguishing this tool from siblings like dsers_product_preview and dsers_product_update_rules by explicitly pointing to them for alternative use cases.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit guidance on when to use this tool vs alternatives: 'To UPDATE rules on an existing import, use dsers_product_update_rules instead' and 'Use dsers_product_preview for individual details.' It also advises on batch vs single usage and how to handle expired/lost job IDs, giving clear context and exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dsers_product_previewImport Draft PreviewARead-onlyIdempotent
Reload preview for an import job. Two modes: compact (default) returns [name, sell, qty] for ALL variants — lightweight. full returns [name, sell, compare_at, cost, qty, supplier_qty] for 3 variants by default. Always includes price_summary: {sell:{min,max}, cost:{min,max}, zero_stock_count, low_stock_count, variants_count}. Key fields: sell_price (store listing price, $), cost (supplier price, $), compare_at_price (strikethrough, $). options: array of {name, values[], values_count} — values truncated to 10 by default, set show_all_options=true for full list. active_rules: currently applied rules (always present, {} if none). Use variant_detail='full' when agent needs compare_at or cost columns.
| Name | Required | Description | Default |
|---|---|---|---|
| job_id | Yes | Job ID returned by dsers_product_import. | |
| variant_limit | No | Max variants in skus table. Compact default: all. Full default: 3. Hard cap: 200. | |
| variant_detail | No | compact (default): columns [name, sell, qty], shows ALL variants. full: columns [name, sell, compare_at, cost, qty, supplier_qty], shows 3 by default. | |
| variant_offset | No | Start index for variant/SKU listing (0-based). Default: 0. | |
| show_all_options | No | Show all option values instead of truncating to 10. Use before applying option_edits. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, and non-destructive. The description adds substantial behavioral context: default truncation of options to 10, always-present active_rules and price_summary, column differences between modes, and hard cap of 200. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense but well-organized, covering modes, field meanings, defaults, and usage tips. It is slightly long but every sentence adds value, and information is front-loaded with the core purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite lacking an output schema, the description thoroughly specifies the return structure (price_summary fields, options structure, active_rules) and behavior differences between modes. It fully compensates for the missing output schema and covers the tool's complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3. The description adds meaning beyond schema by explaining key field semantics (e.g., sell_price is store listing price, cost is supplier price), clarifying variant_limit defaults, and advising when to use show_all_options. This extra context elevates the score.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's function: 'Reload preview for an import job.' It specifies the resource (import job) and action (reload preview), and distinguishes between compact and full modes, making the purpose unambiguous and distinct from sibling tools that handle imports, updates, or status checks.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit guidance on when to use each variant_detail mode ('Use variant_detail='full' when agent needs compare_at or cost columns') and explains default behaviors for variant_limit. However, it does not explicitly compare to sibling tools like dsers_job_status, so overall tool selection context is only implicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dsers_product_update_rulesUpdate Rules on Imported ProductA
Update pricing, content, images, or variant rules on an already-imported product. Rules are merged incrementally: pricing/images/variant_overrides replace by family; content merges by field (set title_prefix without losing description). To clear a content field, send it as empty string or null (e.g. title_prefix:''). To remove an entire family, pass null (e.g. rules_json='{"pricing":null}'). option_edits are always fully replaced (ordered operations, not mergeable). OPTION_EDITS actions: rename_option {action,option_name,new_name} — rename e.g. Color→Style. rename_value {action,option_name,value_name,new_name} — rename a value within an option. remove_value {action,option_name,value_name} — remove value and DELETE all variants with that value. remove_option {action,option_name} — remove entire option dimension. RESPONSE: compact preview with active_rules showing all currently applied rules.
| Name | Required | Description | Default |
|---|---|---|---|
| job_id | Yes | Job ID from a previous dsers_product_import call. | |
| rules_json | No | Rules as JSON string. Keys: pricing, content, images, variant_overrides, option_edits. PRICING: {mode:'fixed_price',fixed_price:9.99} | {mode:'multiplier',multiplier:2} | {mode:'fixed_markup',fixed_markup:5}. VARIANT_OVERRIDES: [{match:'Red',sell_price:9.99,compare_at_price:19.99}]. CONTENT: {title_override, title_prefix, title_suffix, description_override_html, tags_add:['tag']}. Content fields merge individually — set title_prefix without losing description. Clear with '' or null. IMAGES: {drop_indexes, reorder, add_urls, keep_first_n}. OPTION_EDITS (always full replacement): [{action:'rename_option',option_name:'Color',new_name:'Style'},{action:'rename_value',option_name:'Color',value_name:'Red',new_name:'Crimson'},{action:'remove_value',option_name:'Color',value_name:'Gray'},{action:'remove_option',option_name:'Size'}]. Only include families you want to change. Others are preserved automatically. | |
| pricing_mode | No | Flat param: pricing mode. Use instead of rules_json for simple pricing. | |
| target_store | No | Store ID or name from dsers_store_discover. | |
| title_prefix | No | Flat param: prepend to product title. | |
| title_suffix | No | Flat param: append to product title. | |
| title_override | No | Flat param: replace entire product title. | |
| visibility_mode | No | backend_only (default, safe) or sell_immediately (live — confirm with user). | |
| pricing_multiplier | No | Flat param: multiplier value when pricing_mode='multiplier'. | |
| pricing_fixed_price | No | Flat param: exact price in dollars when pricing_mode='fixed_price'. | |
| pricing_fixed_markup | No | Flat param: markup in dollars when pricing_mode='fixed_markup'. | |
| description_append_html | No | Flat param: append HTML to description. | |
| description_override_html | No | Flat param: replace full description (HTML). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description goes well beyond annotations by disclosing merge semantics (replace-by-family vs field-merge), the use of null to remove entire families, the full replacement of option_edits, and the destructive delete of variants for remove_value. This provides critical side-effect visibility beyond the generic destructiveHint=false.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense but efficiently structured: purpose, merge rules, clearing/removal, option_edits actions, and response format. Each sentence contributes unique information, making it appropriately sized for the tool's complexity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers operational behavior, edge cases for clearing/removing, all option_edits actions, and the response shape. Combined with the rich schema, it is comprehensive for a tool with 13 parameters, no output schema, and complex merge logic.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Despite 100% schema coverage, the description adds substantive semantics for rules_json: explaining merge behavior, clearing fields with empty string/null, removing families via null, and the DELETE consequence of remove_value. These details are not fully captured in the schema description, raising the value beyond the baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a clear, specific action: 'Update pricing, content, images, or variant rules on an already-imported product.' It identifies the resource (rules on an imported product) and disambiguates from sibling tools like import or preview by focusing on updates.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides strong context for when to use ('already-imported product') and detailed how-to guidance (merge behavior, clearing, removal of families). However, it does not explicitly name alternative tools or state when not to use it, leaving the distinction to the reader.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dsers_product_visibilityShopify / Wix Product Visibility ToggleAIdempotent
Change the visibility mode of a prepared job before pushing it to the store. Call this between dsers_product_import and dsers_store_push to switch between draft and published. Returns: job_id, status, visibility_mode.
| Name | Required | Description | Default |
|---|---|---|---|
| job_id | Yes | Job ID returned by dsers_product_import. | |
| visibility_mode | Yes | New visibility mode. backend_only: save as draft, not visible to shoppers — SAFE. sell_immediately: publish and LIVE on storefront — RISK: product becomes purchasable immediately. Confirm with user first. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare idempotentHint=true and destructiveHint=false. The description adds workflow timing and return fields but does not disclose additional behavioral traits (e.g., confirmation needed for sell_immediately), which appears only in the schema parameter description. This is adequate but not rich beyond annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences deliver purpose, workflow placement, and return fields without redundancy. Front-loaded with the core function and no fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The combination of full schema coverage, annotations (idempotent, non-destructive), and a description that states purpose, timing, and return fields fully contextualizes the tool. The lack of an output schema is compensated by the explicit return fields listed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with detailed parameter descriptions including risk warnings for visibility_mode. The description itself does not add parameter-specific semantics beyond what the schema already provides, so baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool changes the visibility mode of a prepared job, using a specific verb ('Change') and resource ('visibility mode'). It further explains the effect (switch between draft and published) and distinguishes itself from siblings by positioning it between dsers_product_import and dsers_store_push.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly instructs to call this tool between dsers_product_import and dsers_store_push, providing clear workflow context. However, it does not mention alternatives or exclusions, though the placement is sufficient for this specific toggle.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dsers_rules_validateDropshipping Pricing & Content Rule ValidatorARead-onlyIdempotent
Check and normalize a rules object against the provider's capabilities before importing. Use this to verify pricing, content, and image rules are valid and see exactly which ones will be applied. Returns: effective_rules_snapshot (what will actually be applied), warnings (adjustments made), errors (blocking issues that must be fixed before calling dsers_product_import).
| Name | Required | Description | Default |
|---|---|---|---|
| rules | Yes | Rules as a JSON string. Top-level keys: pricing, content, images, variant_overrides, option_edits. Pricing modes: fixed_price (exact dollar amount for all), multiplier (cost × ratio), fixed_markup (cost + dollars). Example: {"pricing": {"mode": "fixed_price", "fixed_price": 9.99}, "content": {"title_prefix": "[US] "}, "images": {"keep_first_n": 5}} | |
| target_store | No | Store ID or display name from dsers_store_discover. Some rule capabilities vary by store. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations (readOnlyHint=true, destructiveHint=false) already cover safety, but the description adds valuable behavioral context: it returns an effective_rules_snapshot, warnings for adjustments, and blocking errors. 'Normalize' could imply mutation, but the readOnlyHint clears that up, so no contradiction.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three sentences, front-loaded with the primary action, then usage context, then return values. Each sentence earns its place with clear labeling of outputs (effective_rules_snapshot, warnings, errors) and no fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given only 2 parameters and no output schema, the description fully covers the tool's purpose, timing, and return structure. It even explains what errors mean in the context of a dependent tool (dsers_product_import), making it complete for an agent to understand when and how to use it.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so per the baseline rules, a score of 3 is appropriate even without additional param detail. The description reiterates the types of rules (pricing, content, images) but adds nothing beyond the schema's existing parameter descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses specific verbs 'check and normalize' and clearly identifies the resource ('rules object against the provider's capabilities'). It distinguishes itself from siblings by explicitly stating this is a pre-import validation step, with unique return values like effective_rules_snapshot, warnings, and errors.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description clearly states when to use it ('before importing') and ties it to the follow-up tool (dsers_product_import). It does not explicitly mention when not to use it or list alternative tools, but the intended context is unambiguous.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dsers_store_discoverDSers Store & Rule DiscoveryARead-onlyIdempotent
Retrieve available stores and supported rules for the connected DSers account. Call this first — the response contains store IDs and configuration needed by all subsequent operations. Returns: stores (each with id, name, platform, ship[]), rules (pricing modes, content, images). ae_expired means AliExpress re-authorization is needed but does NOT block imports — proceed normally. plan_issue only appears if the DSers subscription has a real problem (expired, suspended). After calling this tool, proceed to the next step (import, preview, etc.) — do NOT retry discover.
| Name | Required | Description | Default |
|---|---|---|---|
| target_store | No | Store ID or name to filter capabilities for a specific store. Omit to see all linked stores. Use the id or name from this response in later calls. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint. The description adds valuable behavioral context beyond annotations: it explains the meaning of ae_expired and plan_issue flags, clarifies that ae_expired does not block imports, and advises not to retry the tool. These are non-obvious behaviors that an agent needs to know, fully satisfying transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is somewhat long but every sentence serves a purpose: stating the main function, giving usage timing, describing return values, clarifying error flags, and setting expectations for the next step. It is well-structured and front-loaded, though it could be trimmed slightly without losing meaning.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's low complexity (one optional parameter, no output schema), the description thoroughly covers what an agent needs: what is returned, how to interpret flags, when to call it, and what to do afterward. It is complete for the tool's context and annotations.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% for the single optional parameter, so the baseline of 3 applies. The parameter description already explains filtering, omission behavior, and how to use the values in later calls. The tool description adds no additional parameter semantics beyond what the schema provides, but it does not need to.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb ('Retrieve'), resource ('available stores and supported rules'), and scope ('for the connected DSers account'). It also distinguishes the tool by positioning it as the mandatory first call whose response is needed by all subsequent operations, setting it apart from sibling tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly instructs when to use the tool ('Call this first'), how to proceed after ('proceed to the next step'), and what not to do ('do NOT retry discover'). It also provides context on handling response flags (ae_expired vs. plan_issue), giving clear when-to-use guidance without naming alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dsers_store_pushPush Product to Shopify / Wix StoreADestructive
Push one or more prepared import drafts to the connected Shopify or Wix store(s). SAFETY: Automatic pre-push validation checks pricing (blocks if sell price < cost or $0) and stock (blocks if all variants have zero inventory). Warnings are raised for low margin (<10%), low stock (<5 units), or very low price (<$1). If blocked, fix pricing rules or use force_push=true ONLY after explaining the risk to the user. Three modes: (1) Single push — provide job_id + target_store. (2) Batch push — provide job_ids_json with an array of job IDs or objects; takes priority over job_id. (3) Multi-store push — provide job_id + target_stores_json to push one product to multiple stores. SAFETY RESPONSE: If checks fail, response includes 'blocked' (array of reasons push was rejected — must fix before retrying) and/or 'warnings' (array of risk alerts — push proceeds but user should be informed). blocked = hard stop (e.g. sell below cost), warnings = soft alert (e.g. low margin). On success, returns per-job: job_id, status, target_store, visibility_applied, push_options_applied, job_summary, warnings.
| Name | Required | Description | Default |
|---|---|---|---|
| job_id | No | Single job ID from dsers_product_import. Used for single-push or multi-store mode. | |
| force_push | No | Override pre-push safety checks. ONLY set true after you have shown the user the specific risk (e.g., 'This product is priced below cost — you will lose $X per sale') and they explicitly confirmed. Never set this silently. | |
| job_ids_json | No | Batch push: JSON array of job ID strings or objects {job_id, target_store?, target_stores?, push_options?, visibility_mode?}. Example: ["job-abc123", {"job_id": "job-def456", "target_store": "My Store"}]. When provided, this takes priority over job_id. | |
| target_store | No | Target store ID or display name from dsers_store_discover. Required when the account has multiple stores. | |
| visibility_mode | No | Override the visibility mode set during prepare. backend_only: draft — SAFE. sell_immediately: published and LIVE — RISK: confirm pricing/inventory with user first. | |
| push_options_json | No | Push configuration as JSON string. Keys: publish_to_online_store (bool), image_strategy ('selected_only' or 'all_available'), pricing_rule_behavior ('keep_manual' or 'apply_store_pricing_rule'), shipping_profile_name (string — Shopify delivery profile name), auto_inventory_update (bool), auto_price_update (bool), sales_channels (string[]), only_push_specifications (bool). Example: {"image_strategy": "all_available", "shipping_profile_name": "DSers Shipping Profile"} | |
| target_stores_json | No | Multi-store: JSON array of store IDs or display names. Pushes the same job_id to each listed store. Example: ["Store A", "Store B"] |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond annotations (destructiveHint=true), the description discloses extensive behavioral details: automatic pre-push validation, blocking vs. warning thresholds, hard stop vs. soft alert semantics, and the requirement to explain risks before using force_push. This is exactly the kind of behavioral context that annotations do not provide.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is long but well-structured with clear sections (SAFETY, modes, SAFETY RESPONSE). It is front-loaded with the core purpose. Every section provides necessary detail, though there is slight repetition of the warning/block distinction between the SAFETY section and the response description.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, but the description fully enumerates success response fields (job_id, status, target_store, etc.) and error/warning structures ('blocked', 'warnings'). It also references related tools (dsers_product_import, dsers_store_discover) and conveys preconditions, making it self-contained for a complex batch/multi-store tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
All 7 parameters have descriptions in the input schema (100% coverage), so the bar is at baseline 3. The description adds value by explaining inter-parameter relationships (e.g., job_ids_json takes priority, target_stores_json for multi-store) and mode-specific usage, though some of this is already present in the schema descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb + resource: 'Push one or more prepared import drafts to the connected Shopify or Wix store(s).' It clearly distinguishes this from siblings like dsers_product_import (import drafts) or dsers_product_preview (preview).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly describes three usage modes (single, batch, multi-store), parameter priority order (job_ids_json takes priority over job_id), when target_store is required, and the condition for force_push (only after user confirmation of risk). This is clear when-to-use guidance with exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
9 tool updates
v1.3.3- First observed
dsers_job_status - First observed
dsers_product_delete - First observed
dsers_product_import - First observed
dsers_product_preview - First observed
dsers_product_update_rules - First observed
dsers_product_visibility - First observed
dsers_rules_validate - First observed
dsers_store_discover - First observed
dsers_store_push
TDQS
Scored across 9 tools
Each tool has a clearly distinct purpose in the import/push workflow. Even the potential overlap between dsers_product_import (which returns a preview) and dsers_product_preview (which reloads a preview) is explicitly disambiguated in the descriptions, so agents can easily select the right tool.
All tools use the dsers_ prefix and follow a resource_then_action pattern (e.g., store_discover, rules_validate, product_import). However, there are minor inconsistencies: product_update_rules mixes a verb-object pair, and product_visibility and job_status use nouns rather than verbs. Still, the overall pattern is predictable and readable.
The 9 tools are well-scoped for managing DSers product imports and pushes. They cover the core workflow from store discovery to deletion without unnecessary redundancy, staying comfortably within the ideal 3-15 range.
The tool set covers the full lifecycle: discover, validate, import, preview, update rules, set visibility, push, check status, and delete. A notable minor gap is the lack of a 'list products' or 'list jobs' tool, which could force agents to rely on job IDs from earlier steps. However, core workflows are well-supported.
Maintenance
Related MCP Connectors
Official DSers MCP for dropshipping: import, edit, price, and publish products to Shopify and Wix.
Unified MCP server for 70+ eCommerce platforms: products, orders, customers, and more.
Google Shopping products, prices, sellers, and deals as structured data via a hosted MCP server.
All HasData scraping tools in one MCP server: Google, TikTok, Instagram, maps, e-commerce and more.
Related MCP Servers
- FlicenseNot gradedqualityNot gradedmaintenanceAn MCP server that generates conversion-optimized e-commerce product descriptions, bullet points, and SEO metadata using AI. It supports multiple platforms like Shopify and Amazon with customizable tones for various writing styles.-
- FlicenseAqualityDmaintenanceAn MCP server that automates Xianyu marketplace operations through Playwright, allowing users to manage listings and conduct market research via natural language. It features integrated tools for generating AI-powered product descriptions and cover images using DashScope.1124-
- FlicenseAqualityDmaintenanceAn MCP server that provides AI assistants with tools for Mercado Libre and Shopee affiliate marketing, including product search, affiliate link generation, product analysis, copy generation, and trending product discovery.63-
- FlicenseNot gradedqualityBmaintenanceThis MCP server analyzes product photos using AI to generate listing drafts, publishes to Mercari Shops via GraphQL API, and exports drafts for other marketplaces.-