Dropshipping MCP Dsers
This server automates the entire DSers dropshipping workflow — from importing products to pushing them live on your Shopify or Wix store — via AI agent commands.
Discover Stores & Rules: Retrieve connected stores, supported rule families (pricing, content, images), push options, shipping profiles, and visibility modes.
Validate Rules: Check and normalize pricing, content, and image rules before applying them — catch errors early without making changes.
Import Products: Import single or multiple products from AliExpress, Alibaba, 1688, or Accio.com URLs into the DSers import list, optionally applying pricing, title, and image rules, with a preview of title, prices, variants, and images.
Preview & Update Drafts: Re-examine previously imported product drafts and update rules or visibility incrementally without re-importing.
Visibility Control: Set products as a hidden draft (
backend_only) or publish immediately (sell_immediately) before pushing.Push to Stores: Push products to Shopify or Wix stores — supports single, batch (multiple products), or multi-store (one product to many stores) pushes, with configurable options for image strategy, pricing rule behavior, and inventory updates.
Safety & Conflict Checks: Pre-push checks block pushes with below-cost pricing, zero price, or zero stock, and detect conflicts with existing store-side pricing rules.
Track Job Status: Monitor the lifecycle of any import or push job (e.g., preview_ready → push_requested → completed/failed).
Enables the automated import of products from AliExpress URLs, allowing AI agents to clean titles and apply pricing rules before importing.
Supports pushing imported products to Shopify stores, including capabilities for bulk editing variants, toggling visibility, and multi-store management.
Supports pushing imported products to Wix stores, including capabilities for bulk editing variants, toggling visibility, and multi-store management.
DSers MCP Product — Dropshipping Automation: AliExpress to Shopify & Wix with AI
An open-source MCP server to automate DSers product sourcing, import, bulk edit, and push to Shopify or Wix using AI.
English
DSers MCP Product is an open-source MCP (Model Context Protocol) 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, bulk edit variants, apply pricing rules, and push to multiple stores — all with a single sentence to your AI agent.
What can it do?
Product sourcing — search the DSers product pool by keyword or image, find products to sell
One-click import — paste a product link, your AI agent imports it into DSers automatically
Browse your catalog — view your import staging list and products already pushed to stores
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 | |
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 |
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.
Remote server (no install needed):
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.
{
"mcpServers": {
"dropshipping": {
"url": "https://ai.silentrillmcp.com/dropshipping/mcp"
}
}
}Also listed on the official MCP Registry.
Authentication — OAuth 2.1
Your DSers password never touches this tool. Here's how login works:
You run
npx @lofder/dsers-mcp-product loginYour browser opens the DSers OAuth authorization page
You authorize access on DSers's own website
The tool receives an OAuth token and encrypts it locally
Done — the MCP server uses the token automatically. No passwords in config files.
Tokens refresh automatically — a long-lived refresh token keeps your session active without manual re-login. You should rarely need to run login again.
Switching accounts?
npx @lofder/dsers-mcp-product logout
npx @lofder/dsers-mcp-product loginFor developers: The server also accepts
DSERS_ACCESS_TOKENandDSERS_REFRESH_TOKENenv vars for headless/CI environments.
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]"
"Search for phone cases under $5 on the DSers product pool"
"Show me what's in my import list"
"What products have I pushed to my store?"
"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
git clone https://github.com/lofder/dsers-mcp-product.git
cd dsers-mcp-product
npm install
npm run build
npm testProject Structure
dsers-mcp-product/
├── src/
│ ├── cli.ts # npx entry — stdio transport, login/logout
│ ├── index.ts # MCP server init, tool registration
│ ├── instructions.ts # Server-level prompts (agent instructions)
│ ├── tools.ts # 12 MCP tools — schema + handler
│ ├── rules.ts # Rule validation & application engine
│ ├── push-guard.ts # Pre-push safety checks
│ ├── push-options.ts # Push option normalization
│ ├── resolver.ts # URL normalization (AliExpress/Alibaba/Accio)
│ ├── provider/ # DSers API adapter (split by concern)
│ │ ├── index.ts # Provider class + interface
│ │ ├── store.ts # Store discovery, platform detection
│ │ ├── import-ops.ts # Import, save draft, delete
│ │ ├── push.ts # Push execution, shipping logistics
│ │ ├── normalize.ts # Data normalization
│ │ └── helpers.ts # Shared utilities
│ ├── service/ # Business logic orchestration
│ │ ├── index.ts # ImportFlowService class
│ │ ├── import-flow.ts # Import workflows
│ │ ├── push-flow.ts # Push workflows
│ │ ├── preview.ts # Preview & visibility
│ │ ├── status.ts # Job status & deletion
│ │ ├── import-list.ts # Import list browsing (with enrich)
│ │ ├── my-products.ts # Pushed products browsing
│ │ └── find-product.ts # Product pool search
│ ├── dsers/ # Low-level DSers API wrappers
│ │ ├── config.ts # Configuration
│ │ ├── auth.ts # Session management
│ │ ├── client.ts # Authenticated HTTP client
│ │ ├── account.ts # Store & user APIs
│ │ ├── product.ts # Product & import APIs
│ │ └── settings.ts # Shipping, pricing, billing APIs
│ └── auth/ # Browser login (CDP)
├── test/ # Vitest unit tests (298 tests)
├── package.json
└── tsconfig.jsonTwelve Tools
# | Tool | What it does |
1 |
| See your connected stores, shipping methods, pricing rules, and capabilities |
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) |
10 |
| Browse your import staging list with cost & sell price, stock, markup status |
11 |
| See products already pushed to a store, with supplier links for re-import |
12 |
| Search the DSers product pool by keyword or image — results link directly to import |
All tools return clear error messages so your AI agent knows what went wrong and what to do next.
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
Product pool search enhancements (category filters, URL-based search, product detail view)
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 — contributions are very welcome.
FAQ
What is DSers MCP Product? 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.
How does it work? 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.
Is it free? 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.
Is it safe? Do I need to share my password? 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 security scanning.
What AI clients does it support? Cursor, Claude Desktop, Claude Code, Windsurf, and any MCP-compatible client that supports stdio transport.
How is this different from AliDropify, AutoDS, or other dropshipping tools? 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.
What product sources does it support? AliExpress, Alibaba.com, Accio.com (Alibaba's AI sourcing tool), and 1688 (requires DSers authorization).
Can I push to multiple stores at once?
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.
Also Available
A Python version is available for local stdio deployments.
License
MIT
中文
DSers MCP Product 是一个开源的 MCP (Model Context Protocol) 服务器,让 AI Agent 自动完成 DSers 的整个商品流程 —— 从选品搜索到 Shopify 或 Wix 店铺上架。搜索 DSers 商品池、从速卖通 / Alibaba / Accio.com 导入商品、批量编辑变体、应用定价规则、推送到多个店铺 —— 只需一句话给你的 AI agent。
能做什么?
选品搜索 — 在 DSers 商品池里按关键词或图片搜索,找到值得卖的商品
一句话导入 — 贴个商品链接,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 | |
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 指令文件 — 工作流、规则、推送选项、错误处理 |
使用前提
一个 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 服务端 https://ai.silentrillmcp.com/dropshipping/mcp。支持 Streamable HTTP transport 的 MCP 客户端都能用,首次连接会引导你授权 DSers 账号。
{
"mcpServers": {
"dropshipping": {
"url": "https://ai.silentrillmcp.com/dropshipping/mcp"
}
}
}同时已收录到官方 MCP Registry。
授权认证 — OAuth 2.1
你的 DSers 密码完全不经过本工具。登录过程是这样的:
运行
npx @lofder/dsers-mcp-product login浏览器自动打开 DSers OAuth 授权页
你在 DSers 网站上授权
工具拿到 OAuth token,加密存到本地
搞定 — 之后 MCP 直接能用,配置文件里不需要写任何密码
Token 自动续期 — refresh token 会自动保持登录状态,你基本不需要重新登录。
换账号?
npx @lofder/dsers-mcp-product logout
npx @lofder/dsers-mcp-product login开发者注: headless / CI 环境支持通过
DSERS_ACCESS_TOKEN和DSERS_REFRESH_TOKEN环境变量传入凭据。
使用示例
装好之后,直接用自然语言跟 AI 助手说就行:
"帮我导入这个商品,推到我的 Shopify 店铺草稿:https://www.aliexpress.com/item/1005006372921430.html"
"导入这个商品,加价 2.5 倍,然后推送:https://www.aliexpress.com/item/1005006372921430.html"
"批量导入这 3 个商品,全部推到店铺:[链接1] [链接2] [链接3]"
"帮我搜一下 5 美金以下的手机壳"
"看下我的导入列表里有什么"
"我已经推送了哪些商品到店铺?"
"把这个商品推到我所有店铺"
"帮我把标题和描述重写一下做 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
npm run build
npm test十二个工具
# | 工具 | 干什么的 |
1 |
| 查看你绑定了哪些店铺、有哪些配送方式、定价规则、能用什么规则 |
2 |
| 先试试定价或标题规则对不对,不会真改东西 |
3 |
| 贴个商品链接,可以顺便加定价/标题规则,推送前先给你看预览 |
4 |
| 看一下已经导入的商品 — 标题、价格、变体、库存一目了然 |
5 |
| 对已导入的商品修改定价、标题、图片或变体规则(增量合并,不需要重新导入) |
6 |
| 设置商品在店铺里是上架展示还是隐藏草稿 |
7 |
| 把商品推到你的 Shopify 或 Wix 店铺 — 单个推、批量推、或一次推到所有店铺 |
8 |
| 看看推送完了没、成功了没 |
9 |
| 从 DSers 导入列表中删除商品(不可恢复,需确认) |
10 |
| 浏览导入待推送列表,含成本价、售价、库存、加价状态 |
11 |
| 查看已推到店铺的商品,带供应商链接方便重新导入 |
12 |
| 在 DSers 商品池搜索,支持关键词和以图搜图,结果可直接导入 |
报错时会返回清晰的消息,AI 助手能看懂出了什么问题、该怎么办。
推送前安全校验
推送到店铺之前,工具会自动帮你检查常见问题:
直接拦截(不让推):售价低于进货成本、零售价为 0、所有变体都没库存
警告提醒(能推,但会提示你):利润率低于 10%、库存少于 5 件、售价低于 1 美金
有问题的话,AI 助手会告诉你具体是哪个变体出了什么问题。确定没问题的话可以用 force_push 强制推送。
定价规则冲突检测
如果你的 DSers 店铺自己启用了定价规则(基础/标准/高级),同时你又通过 MCP 设置了定价规则,推送会被直接拦截而不是仅警告。AI 助手会给出两个解决方案:
在推送选项中设置
pricing_rule_behavior='apply_store_pricing_rule'接受店铺端的定价规则在 DSers 店铺设置中关闭定价规则,使用 MCP 的定价
四个预设提示
MCP 客户端可直接展示给用户的工作流模板:
提示 | 说明 |
| 一键导入单个商品并推送为草稿 |
| 批量导入 + 统一定价倍率 |
| 一个商品推送到所有店铺 |
| 导入后 AI 重写标题和描述做 SEO 优化,再推送 |
后续计划
商品池搜索增强(分类过滤、URL 搜索、商品详情查看)
支持更多 DSers 已接入的店铺平台(eBay、Wish 等)
更智能的定价规则模板
更精细的库存同步选项
有想法或需求?欢迎 提 issue —— 非常欢迎其他开发者的建议和贡献。
常见问题
DSers MCP Product 是什么? 一个免费开源的 MCP 服务器,让 AI Agent(如 Claude、Cursor)自动完成从速卖通/Alibaba/1688 到 Shopify/Wix 店铺的商品导入全流程。不用手动复制商品数据,用自然语言对话就能操作。
怎么用? 在 Cursor 或 Claude Desktop 里输入"导入这个商品,加价 2.5 倍,推送到我的店铺",MCP 服务器自动完成抓取商品数据、应用定价规则、编辑变体、推送到店铺的全部流程。
收费吗? 完全免费。项目开源(MIT 协议),你只需要一个免费的 DSers 账号和已连接的 Shopify 或 Wix 店铺。
安全吗?需要提供密码吗? 不需要。登录采用零密码浏览器认证——你在 DSers 官网登录,工具只接收会话令牌,密码永远不会经过 MCP 服务器。项目在 SafeSkill 安全扫描中获得 92/100 分。
支持哪些 AI 客户端? Cursor、Claude Desktop、Claude Code、Windsurf,以及任何支持 stdio 传输的 MCP 兼容客户端。
和 AliDropify、AutoDS 等 Dropshipping 工具有什么区别? 大多数 Dropshipping 工具有自己的界面,需要点来点去。DSers MCP Product 完全不同——它直接连接你的 AI Agent,用对话代替点击来自动化工作流。而且完全开源免费,没有订阅分级。
能同时推送到多个店铺吗?
可以。dsers_store_push 支持一条命令将商品推送到所有已连接的 Shopify 和 Wix 店铺,支持按店铺设置不同的定价和可见性。
其他版本
也提供 Python 版本,适用于本地 stdio 部署。
许可证
MIT
Available Tools
13 toolsdsers_find_productSearch DSers Product PoolARead-onlyIdempotent
Search the DSers product pool (AliExpress supplier catalog) for products to import by keyword or by image URL (visual search). Returns products that can be directly imported via dsers_product_import using the import_url field. Use search_after from the response to get the next page of results. Results include import_url for direct use with dsers_product_import. After importing, use dsers_import_list to browse, then dsers_store_push to push. Note: results may overlap between pages — deduplicate by product_id if needed. Empty or whitespace-only keywords are rejected. When results exceed the limit (especially for image search), response includes truncated_from showing the original count before truncation.
| Name | Required | Description | Default |
|---|---|---|---|
| keyword | No | Search keyword. Omit when using image_url. | |
| image_url | No | Image URL for visual search. Mutually exclusive with keyword — if both provided, image_url takes priority. | |
| limit | No | Results per page (max 50) | |
| search_after | No | Cursor from previous response for pagination | |
| sort | No | Sort order | |
| ship_to | No | Destination country code | US |
| ship_from | No | Origin country code (CN, US, FR, UK) | |
| category_id | No | Category ID filter |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate read-only, non-destructive, idempotent, and closed-world behavior. The description adds valuable context beyond this: pagination details (use search_after for next page, results may overlap between pages requiring deduplication by product_id), response truncation (truncated_from field for image search), and input validation (empty keywords rejected). 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 front-loaded with core functionality (search for import) and efficiently covers key points like pagination, integration, and limitations in clear sentences. It could be slightly more concise by avoiding minor repetition (e.g., 'import_url' mentioned multiple times), but overall it's well-structured with zero waste.
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 (8 parameters, no output schema) and rich annotations, the description is complete: it explains the purpose, usage flow, pagination, deduplication, truncation, and input validation. It effectively compensates for the lack of output schema by describing response fields like import_url, search_after, and truncated_from.
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 the schema fully documents all 8 parameters. The description adds minimal parameter-specific semantics beyond the schema, such as noting keyword and image_url are mutually exclusive (implied in schema) and that image_url takes priority. It doesn't provide additional syntax or format details, 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 searches the DSers product pool (AliExpress supplier catalog) for products to import, specifying it can search by keyword or image URL. It distinguishes from siblings by mentioning direct integration with dsers_product_import via the import_url field, unlike other tools like dsers_my_products or dsers_store_discover.
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?
Explicit guidance is provided: use this tool to find products for import, then use dsers_product_import with the import_url, followed by dsers_import_list and dsers_store_push. It distinguishes from alternatives by noting results are for direct import via dsers_product_import, and it specifies when not to use it (empty/whitespace-only keywords are rejected).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dsers_import_listBrowse DSers Import ListARead-onlyIdempotent
Browse the DSers import list with enriched variant data. Returns per item: import_item_id, title, image, sell_price_range, cost_range, currency, variant_count, total_stock, push_status, supplier, source_url, tags. no_markup=true when sell equals cost (no pricing rule applied). low_stock_warning counts variants with stock <= 5. Use import_item_id with dsers_product_preview for full details or dsers_product_delete to remove. This is the staging area before push. To see products already on your store, use dsers_my_products. To search for new products, use dsers_find_product. Note: DSers API returns a minimum of 20 items per page. If page_size < 20, results are truncated client-side.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number (1-based). Default: 1. | |
| page_size | No | Items per page. Default: 20. Max: 100. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false, idempotentHint=true, and openWorldHint=false. The description adds valuable behavioral context beyond annotations: explains the staging area nature, minimum 20 items per page API behavior with client-side truncation, and how to interpret specific fields (no_markup=true, low_stock_warning). 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?
Well-structured with front-loaded information about what the tool returns, followed by field explanations, usage guidance, and behavioral notes. Every sentence adds value with zero wasted words. The description efficiently covers multiple aspects in a compact format.
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 (list browsing with specific field interpretations), the description provides complete context: detailed return field explanations, behavioral notes about API pagination, clear guidance on when to use versus siblings, and next-step actions. No output schema exists, but the description thoroughly documents what's returned.
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 the schema already fully documents both parameters (page and page_size). The description adds some context about the minimum 20 items per page behavior when page_size < 20, but doesn't provide additional parameter semantics beyond what's in the schema. Baseline 3 is appropriate when schema does the heavy lifting.
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 ('browse') and resource ('DSers import list') with specific scope ('with enriched variant data'). It distinguishes from siblings by explicitly mentioning dsers_my_products for products already on store and dsers_find_product for searching new products.
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?
Explicit guidance is provided on when to use this tool ('staging area before push') versus alternatives: use dsers_my_products for products already on store, dsers_find_product for searching new products. Clear context about what this tool provides versus other options.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dsers_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_my_productsBrowse DSers My ProductsARead-onlyIdempotent
Browse products already pushed to a store. Requires store_id (from dsers_store_discover). Returns compact items with: dsers_product_id, title, image, sell_price (min/max in $), cost (min/max in $), status (Draft/Active), supplier, supplier_url. Prices are in dollars (converted from cents). Shows products already pushed to a specific store. To see products waiting to be pushed, use dsers_import_list. Note: DSers API returns a minimum of 20 items per page. If page_size < 20, results are truncated client-side.
| Name | Required | Description | Default |
|---|---|---|---|
| store_id | Yes | Store ID from dsers_store_discover. Required. | |
| page | No | Page number (1-based). Default: 1. | |
| page_size | No | Items per page. Default: 20. Max: 100. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds valuable behavioral context beyond what annotations provide: it discloses the API's minimum page size constraint ('DSers API returns a minimum of 20 items per page'), explains client-side truncation behavior ('If page_size < 20, results are truncated client-side'), and details the return format with specific field descriptions. While annotations already declare readOnlyHint=true, destructiveHint=false, and idempotentHint=true, the description enriches understanding of operational behavior without 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 efficiently structured with zero wasted sentences: it opens with the core purpose, specifies required parameters, details the return format, provides sibling differentiation, and concludes with important behavioral notes. Every sentence adds essential information, making it both comprehensive and concise.
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 moderate complexity (list operation with pagination), rich annotations (readOnlyHint, destructiveHint, idempotentHint), and full schema coverage, the description provides excellent contextual completeness. It covers purpose, prerequisites, return format, sibling differentiation, and critical behavioral constraints (minimum page size, truncation). While there's no output schema, the description adequately compensates by detailing the return structure.
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?
With 100% schema description coverage, the input schema already fully documents all three parameters (store_id, page, page_size) with their types, constraints, and descriptions. The description adds minimal parameter-specific information beyond the schema, mainly reinforcing the store_id requirement and mentioning page_size behavior, but doesn't provide significant additional semantic context. This meets the baseline expectation when schema coverage is complete.
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 specific action ('Browse products already pushed to a store'), identifies the resource ('products'), and explicitly distinguishes it from sibling dsers_import_list ('To see products waiting to be pushed, use dsers_import_list'). This provides precise differentiation from alternatives.
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 ('Browse products already pushed to a store') versus when to use an alternative ('To see products waiting to be pushed, use dsers_import_list'). It also specifies a prerequisite requirement ('Requires store_id (from dsers_store_discover)'), giving clear context for proper usage.
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 |
|---|---|---|---|
| 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. | |
| 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. |
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 |
|---|---|---|---|
| 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_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}}}] | |
| source_hint | No | Supplier platform hint. Valid values: auto, aliexpress, alibaba, accio. Default: auto (detected from URL). | auto |
| country | No | Target country code for shipping and pricing lookup. Examples: US, GB, DE, FR, AU. | US |
| target_store | No | Store ID or display name from dsers_store_discover. Required when the account has multiple stores. | |
| 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. | |
| job_id | No | (DEPRECATED — use dsers_product_update_rules) When provided without source_url, forwards to dsers_product_update_rules internally. | |
| 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. | |
| pricing_multiplier | No | Flat param: multiplier value when pricing_mode='multiplier'. | |
| pricing_fixed_markup | No | Flat param: markup in dollars when pricing_mode='fixed_markup'. | |
| pricing_fixed_price | No | Flat param: exact price in dollars when pricing_mode='fixed_price'. | |
| title_override | No | Flat param: replace entire product title. | |
| title_prefix | No | Flat param: prepend to product title. | |
| title_suffix | No | Flat param: append to product title. | |
| description_override_html | No | Flat param: replace full description (HTML). | |
| description_append_html | No | Flat param: append HTML to description. | |
| 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. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds valuable behavioral context beyond annotations: it explains the risk implications of visibility_mode (backend_only vs sell_immediately), describes response formats for single vs batch imports, and clarifies idempotent behavior for re-imports with expired job IDs. While annotations cover basic safety (readOnlyHint=false, destructiveHint=false), the description provides practical implementation details that help the agent understand consequences.
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 well-structured and front-loaded with the core purpose, then efficiently covers key usage scenarios. While comprehensive, some sentences could be more concise (e.g., the batch response explanation is somewhat verbose). Overall, most content earns its place by addressing distinct aspects of tool behavior.
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 complex tool with 18 parameters and no output schema, the description provides substantial context about response formats, risk considerations, and sibling tool relationships. It compensates well for the lack of output schema by describing single vs batch response structures. The main gap is not explicitly covering all possible error conditions or rate limits.
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?
With 100% schema description coverage, the input schema already documents all 18 parameters thoroughly. The description adds minimal parameter semantics beyond the schema - it mentions the source_url vs source_urls_json distinction and hints at rules_json structure, but doesn't provide significant additional parameter understanding that isn't already 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 clearly states the specific action ('Import product(s) from supplier URL(s) into the DSers import list and return a preview'), identifies the resources involved (products from AliExpress, Alibaba, Accio.com), and distinguishes it from siblings by explicitly mentioning when to use dsers_product_update_rules instead for rule 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 explicit guidance on when to use this tool vs alternatives: it specifies to use dsers_product_update_rules for updating rules on existing imports, dsers_product_preview for individual details, and clarifies behavior for expired/lost job IDs. It also distinguishes between single and batch usage contexts.
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. Set include_images=true to add per-variant image_url and per-option-value imgUrl — useful for visual SKU matching across suppliers.
| Name | Required | Description | Default |
|---|---|---|---|
| job_id | Yes | Job ID returned by dsers_product_import. | |
| 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. | |
| variant_limit | No | Max variants in skus table. Compact default: all. Full default: 3. Hard cap: 200. | |
| show_all_options | No | Show all option values instead of truncating to 10. Use before applying option_edits. | |
| include_images | No | Include per-variant image_url and per-option-value imgUrl in the response. Useful for visual SKU matching when comparing suppliers. Off by default to keep responses compact. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false, and idempotentHint=true, so the agent knows this is a safe, repeatable read operation. The description adds valuable behavioral context beyond annotations: the default modes, field truncation behavior, hard cap of 200 variants, and that active_rules is always present (even if empty). No contradictions 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 appropriately sized and front-loaded with core functionality. Every sentence adds value: explaining modes, key fields, options behavior, and usage tips. It could be slightly more structured with bullet points for clarity, but there's minimal wasted text.
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 (6 parameters, no output schema) and rich annotations, the description provides comprehensive context. It explains return data structure, behavioral defaults, and practical usage scenarios. The main gap is lack of explicit output format details, but the description compensates with field explanations and usage guidance.
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 the schema already documents all parameters thoroughly. The description adds some semantic context (e.g., explaining that sell_price is 'store listing price, $' and compare_at_price is 'strikethrough, $'), but most parameter details are already in the schema. Baseline 3 is appropriate when schema does the heavy lifting.
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 purpose: 'Reload preview for an import job' with specific details about two modes (compact and full) and what data they return. It distinguishes this from siblings like dsers_job_status (which likely shows status only) and dsers_product_import (which initiates imports).
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 different modes: 'Use variant_detail='full' when agent needs compare_at or cost columns' and 'Set include_images=true... useful for visual SKU matching across suppliers.' It also distinguishes this from other tools by focusing on previewing import job data rather than finding, importing, or managing products.
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. If rule persistence to DSers backend fails, job status is set to persist_failed and subsequent push will be blocked. Retry the rule update or re-import the product.
| 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. | |
| pricing_multiplier | No | Flat param: multiplier value when pricing_mode='multiplier'. | |
| pricing_fixed_markup | No | Flat param: markup in dollars when pricing_mode='fixed_markup'. | |
| pricing_fixed_price | No | Flat param: exact price in dollars when pricing_mode='fixed_price'. | |
| title_override | No | Flat param: replace entire product title. | |
| title_prefix | No | Flat param: prepend to product title. | |
| title_suffix | No | Flat param: append to product title. | |
| description_override_html | No | Flat param: replace full description (HTML). | |
| description_append_html | No | Flat param: append HTML to description. | |
| target_store | No | Store ID or name from dsers_store_discover. | |
| visibility_mode | No | backend_only (default, safe) or sell_immediately (live — confirm with user). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate non-read-only, non-destructive, non-idempotent, open-world hints. The description adds substantial behavioral context beyond annotations: explains incremental merging rules, clearing mechanisms, option_edits replacement behavior, response format (compact preview), failure states (persist_failed blocks subsequent push), and retry/re-import recovery options. 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 appropriately front-loaded with core purpose, followed by detailed behavioral rules. Every sentence adds value: merging rules, clearing methods, option_edits actions, response format, and error handling. Slightly dense but well-structured for a complex tool.
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 complex mutation tool with no output schema, the description provides comprehensive behavioral details (merging, clearing, failure states) and parameter semantics. It covers key aspects like incremental updates and error recovery, though doesn't explicitly document all 13 parameters' usage scenarios or sibling tool relationships.
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?
With 100% schema description coverage, the baseline is 3. The description adds meaningful semantic context: clarifies rules_json structure (keys, merging behavior, clearing rules), explains option_edits actions with examples, and distinguishes between rules_json and flat parameters. However, it doesn't fully detail all 13 parameters' interactions beyond 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 clearly states the verb ('Update') and resource ('pricing, content, images, or variant rules on an already-imported product'), distinguishing it from siblings like dsers_product_import (import new) or dsers_product_delete (remove). It specifies this is for incremental rule updates rather than full replacements.
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 implies usage context ('on an already-imported product') and mentions retry scenarios, but doesn't explicitly state when to use this versus alternatives like dsers_product_import for new products or dsers_rules_validate for validation. It provides operational guidance but lacks comparative sibling differentiation.
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). Extreme pricing values (multiplier >100x, fixed_markup >$500, fixed_price >$10,000) produce warnings. HTML description fields are validated against script injection.
| 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?
Annotations already declare readOnlyHint=true, destructiveHint=false, and idempotentHint=true, covering safety and idempotency. The description adds valuable behavioral context beyond annotations: it specifies validation outcomes (warnings for extreme pricing values, errors for blocking issues), security validation (HTML description fields against script injection), and normalization behavior ('normalize a rules object'). No contradictions with annotations exist.
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 efficiently structured with two sentences: the first states the core purpose and usage context, and the second details specific validation behaviors. Every sentence adds essential information without redundancy, and it's front-loaded with the primary function.
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 (validation with normalization and multiple rule types), annotations cover safety aspects well, but there's no output schema. The description compensates by detailing return components (effective_rules_snapshot, warnings, errors) and specific validation logic. However, it could be more complete by explicitly mentioning idempotency or providing examples of error 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?
Schema description coverage is 100%, providing detailed documentation for both parameters. The description adds minimal parameter semantics beyond the schema: it implies the 'rules' parameter is validated against provider capabilities and mentions specific validation thresholds (e.g., multiplier >100x). However, it doesn't significantly enhance understanding of parameter usage beyond what the schema already covers.
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 purpose with specific verbs ('check and normalize', 'verify') and resources ('rules object', 'pricing, content, and image rules'). It distinguishes from siblings like dsers_product_import by focusing on validation rather than execution, and from dsers_product_update_rules by emphasizing pre-import checking.
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 ('before importing') and why ('to verify... are valid and see exactly which ones will be applied'). It names a specific alternative (dsers_product_import) for post-validation actions and indicates blocking issues must be fixed before calling that sibling.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dsers_sku_remapSKU-level Supplier ReplacementADestructiveIdempotent
Replace the supplier on a store product with SKU-level variant matching. DEFAULTS TO mode='preview' which is read-only and safe to call without confirmation — only mode='apply' actually writes to DSers. TWO discovery paths: (A) STRICT — caller provides new_supplier_url and the tool swaps to that exact supplier; (B) DISCOVER — omit new_supplier_url and the tool reverse-image-searches the DSers pool using seed images from the current product, ranks candidates via sku-matcher + multi-factor scoring, and auto-picks the best replacement. Use discover mode when the current supplier is broken/out-of-stock and you don't have a specific replacement URL in hand. WORKFLOW: (1) Call with mode='preview' to see the match plan, scoreBreakdown, tier-isolated top_candidates and the planned pool[] history additions — nothing is written. (2) Review the diffs, then call again with mode='apply' and the same params to persist. auto_confidence threshold defaults to 70 (conservative). Lower at your own risk — DSers does NOT validate supplier payload correctness; data errors only surface at order fulfillment time. Returns: path (A_strict or B_discover), summary (swapped/kept_old/unmatched/skipped counts), mapping_type, diffs (per-variant decision + before/after), discovery.top_candidates (discover mode only), pool_additions (PoolEntry[] that apply will append to mapping.pool[] as history), warnings, errors. When applied: also returns process_status from DSers post-write polling. Requires the product:mapping OAuth scope. Get store_id from dsers_store_discover first.
| Name | Required | Description | Default |
|---|---|---|---|
| dsers_product_id | Yes | DSers product ID of the store product whose supplier you want to replace. Get from dsers_my_products. Must be a numeric string that fits in a signed int64 (max 9223372036854775807) — the schema's maxLength:19 + numeric pattern allow up to 19 digits but values above the int64 ceiling are rejected at the MCP boundary. | |
| new_supplier_url | No | OPTIONAL. AliExpress / Alibaba / 1688 URL of the replacement supplier. Provide to use STRICT mode (exact swap). Omit to use DISCOVER mode (reverse-image search to auto-find the best replacement). Must be a valid http/https URL — plain text / non-URL strings are rejected at the MCP boundary. URL scheme is normalized to lowercase (HTTPS:// → https://) per RFC 3986 before the candidate fetch. | |
| store_id | Yes | Store ID from dsers_store_discover. Required. Must be a string (DSers backend rejects integer storeId due to int64 precision). Must be a numeric string that fits in a signed int64 (max 9223372036854775807) — the schema's maxLength:19 + numeric pattern allow up to 19 digits but values above the int64 ceiling are rejected at the MCP boundary. | |
| mode | No | preview (default — read-only, no DSers writes, safe to call repeatedly) or apply (persist the swap; verify diffs in preview first). | preview |
| country | No | Target country code for candidate fetch. Default US. | US |
| auto_confidence | No | Minimum sku-matcher confidence (0-100) for a variant to be auto-swapped. Default 70. | |
| max_candidates | No | DISCOVER mode only. Max candidates to fetch full variant detail for and rank. Default 5. Ignored in STRICT mode. |
Output Schema
| Name | Required | Description |
|---|---|---|
| mode | Yes | |
| dsers_product_id | Yes | |
| source_url | Yes | |
| mapping_type | Yes | |
| path | Yes | |
| degraded | No | |
| summary | Yes | |
| diffs | Yes | |
| discovery | No | |
| pool_additions | Yes | |
| warnings | Yes | |
| errors | Yes | |
| applied | No | |
| process_status | No | |
| process_errmsg | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds substantial behavioral context beyond annotations: it explains the default safe mode ('preview'), the two discovery paths (STRICT vs DISCOVER), the workflow sequence, the auto_confidence threshold implications ('DSers does NOT validate supplier payload correctness; data errors only surface at order fulfillment time'), and OAuth scope requirements. While annotations cover basic hints, the description provides rich operational details.
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 information-dense but well-structured with clear sections (DEFAULTS, discovery paths, WORKFLOW, Returns, requirements). Every sentence adds value, though the length pushes it toward comprehensive rather than concise. The front-loaded safety warning about mode='preview' is particularly effective.
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 (7 parameters, destructive operation, multiple modes) and the presence of both annotations and output schema, the description provides excellent completeness. It covers the operational workflow, safety considerations, mode differences, practical usage scenarios, and OAuth requirements. The output schema handles return values, so the description appropriately focuses on behavioral context.
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?
With 100% schema description coverage, the baseline is 3. The description adds meaningful context about parameter interactions: it explains how 'new_supplier_url' determines the mode (STRICT when provided, DISCOVER when omitted), clarifies that 'max_candidates' is DISCOVER-mode only, and provides practical guidance about 'auto_confidence' thresholds. However, it doesn't add syntax or format details beyond what the schema already documents.
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 explicitly states the verb ('Replace') and resource ('supplier on a store product') with specific scope ('SKU-level variant matching'). It clearly distinguishes this tool from siblings by focusing on supplier replacement rather than product discovery, import, deletion, or rule management.
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 mode: 'preview' for safe read-only analysis and 'apply' for actual writes. It also distinguishes between STRICT mode (when you have a specific supplier URL) and DISCOVER mode (when the current supplier is broken/out-of-stock and you need auto-discovery). The workflow section gives clear step-by-step instructions.
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. | |
| 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. | |
| 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"] | |
| 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"} | |
| 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. |
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.
2 tool updates
v1.5.7- Changed
dsers_product_preview1 field changed- added
Input schema / properties / include_imagesAdded value: +{ + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + } + ], + "description": "Include per-variant image_url and per-option-value imgUrl in the response. Useful for visual SKU matching when comparing suppliers. Off by default to keep responses compact." +}
- Added
dsers_sku_remap
4 tool updates
v1.0.3- Added
dsers_find_product - Added
dsers_import_list - Added
dsers_my_products - Changed
dsers_product_import3 fields changed- added
Input schema / properties / description_append_htmlAdded value: +{ + "description": "Flat param: append HTML to description.", + "type": "string" +} - added
Input schema / properties / description_override_htmlAdded value: +{ + "description": "Flat param: replace full description (HTML).", + "type": "string" +} - changed
Input schema / properties / rules_json / descriptionPrevious value: -"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'}]."New value: +"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."
16 tool updates
- Added
dsers_job_status - Added
dsers_product_delete - Added
dsers_product_import - Added
dsers_product_preview - Added
dsers_product_update_rules - Added
dsers_product_visibility - Added
dsers_rules_validate - Added
dsers_store_discover - Added
dsers_store_push - Removed
dsers.job.status - Removed
dsers.product.import - Removed
dsers.product.preview - Removed
dsers.product.visibility - Removed
dsers.rules.validate - Removed
dsers.store.discover - Removed
dsers.store.push
7 tool updates
v1.0.1- First observed
dsers.job.status - First observed
dsers.product.import - First observed
dsers.product.preview - First observed
dsers.product.visibility - First observed
dsers.rules.validate - First observed
dsers.store.discover - First observed
dsers.store.push
TDQS
Scored across 13 tools
Each tool has a clearly distinct purpose with no ambiguity. For example, dsers_find_product searches for new products, dsers_import_list shows staged imports, dsers_my_products lists pushed products, and dsers_store_push pushes to stores. The descriptions clearly differentiate overlapping areas like import vs. push workflows.
All tools follow a consistent dsers_verb_noun naming pattern (e.g., dsers_product_import, dsers_store_discover). The prefix 'dsers_' is uniformly applied, and the verb-noun structure is maintained throughout, making the set highly predictable and readable.
With 13 tools, the count is well-scoped for a dropshipping automation server. Each tool serves a specific function in the product lifecycle (discovery, import, preview, rules, push, management), and none appear redundant or unnecessary for the domain.
The tool set provides complete coverage of the dropshipping workflow: from store discovery (dsers_store_discover) and product search (dsers_find_product) through import, preview, rules management, and pushing to stores (dsers_store_push), including job status checks, product deletion, and advanced features like SKU remapping. No obvious gaps are present.
Related MCP Connectors
Official DSers MCP for dropshipping: import, edit, price, and publish products to Shopify and Wix.
AI marketplace: search, buy, sell across Amazon, eBay, AliExpress. 13 tools.
AI product videos for e-commerce: import products, generate TikTok/Reels clips, earn per sale.
E-commerce autonomy for dropshippers — listings, SEO, catalog audit, niche & ad intel.