alibaba-seller-mcp
Integrates with the Alibaba.com Global B2B open platform: OAuth 2.0 seller authorization (with token storage and auto-refresh), schema-driven product publishing and incremental updates, category attribute/schema lookup, photo-bank image uploads, video listing and product-video association, product groups, and a raw API escape-hatch tool for calling granted open-platform methods.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@alibaba-seller-mcppublish a new product listing from products/example/brief.json"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
alibaba-seller-mcp
An MCP server for the Alibaba.com Global B2B open platform. It gives an MCP client (Claude Desktop, Claude Code, or any MCP host) tools to:
Authorize a seller via OAuth 2.0 (authorization-code flow, with token storage and automatic refresh).
Upload and modify products, assembling the request from local files.
Read images / videos / prices from local files — images and videos are validated locally and media is uploaded to the photo bank to obtain hosted URLs; prices come from a CSV or JSON file.
Generate social-media content with Claude (Anthropic), tailored per platform.
Track AI token usage with per-model USD cost estimates.
Project structure
alibaba-seller-mcp/
├── pyproject.toml # packaging, dependencies, console scripts
├── .env.example # configuration template
├── README.md
├── src/alibaba_seller_mcp/
│ ├── __main__.py # entry point: python -m alibaba_seller_mcp
│ ├── server.py # MCP server — registers all tools + usage resource
│ ├── config.py # env-driven config (gateway, API method names, keys)
│ ├── storage.py # local JSON/JSONL persistence (tokens, usage, cache)
│ ├── authserver.py # CLI OAuth helper (local-callback / paste / tunnel)
│ ├── text_format.py # title normalizer (case + length + punctuation rules)
│ ├── brief.py # "brief → published draft" flow (facts in, AI enriches)
│ ├── models.py # typed Pydantic tool-output models
│ ├── pathsafe.py # filesystem allowlist (path confinement)
│ ├── alibaba/ # open-platform client
│ │ ├── client.py # signed REST client (HMAC-SHA256, GOP + TOP protocols)
│ │ ├── auth.py # seller OAuth (authorize URL, code→token, auto-refresh)
│ │ ├── errors.py # typed exceptions
│ │ ├── schema.py # itemSchema parse + filled value-XML builder
│ │ ├── products.py # schema-based publish/update, manifest, photo bank, icbuCatProp
│ │ ├── categories.py # category system attributes (required + options)
│ │ ├── videos.py # video ↔ product relation (+ id encrypt/resolve)
│ │ └── groups.py # product groups
│ ├── ai/ # Claude (Anthropic) generation
│ │ ├── product_detail.py # AI structured detail + category-attribute selection
│ │ └── social.py # social-media copy
│ ├── files/
│ │ └── readers.py # local image / video / price-file ingestion + image checks
│ └── usage/
│ └── tracker.py # token-usage accounting + USD cost estimates
├── products/
│ └── example/ # ready-to-fill templates (copy, replace placeholders)
│ ├── brief.json # recommended: minimal facts → product_publish_from_brief
│ ├── product.json # full manifest (manual control) → product_publish
│ ├── prices.csv # tiered-price example (for the full manifest)
│ └── README.md # what to prepare + field-code reference
└── tests/ # pytest suiteRelated MCP server: MCP E-commerce Server
Requirements
Python 3.11+
An Alibaba.com open-platform app (App Key / App Secret) with the product APIs granted
An Anthropic API key (for social-content generation)
Install
python3.11 -m venv .venv && source .venv/bin/activate
pip install -e .Configure
Copy .env.example to .env and fill it in (the server auto-loads .env from the
project root or the current directory):
cp .env.example .envKey variables (see .env.example for the full list):
Variable | Purpose |
| App credentials from the console |
| OAuth callback URL registered in the console |
| Granted API method names |
| Claude access for social content |
| Claude model (default |
Confirm the API method names. The exact method names/paths and product field schema are category-specific. Check your app console's API权限包 → 详情 pages and adjust the
ALIBABA_METHOD_*variables if they differ from the defaults. Use thealibaba_raw_calltool to test a method quickly.
Run
python -m alibaba_seller_mcpRegister with an MCP client
Claude Code:
claude mcp add alibaba-seller -- /path/to/.venv/bin/python -m alibaba_seller_mcpClaude Desktop (claude_desktop_config.json):
{
"mcpServers": {
"alibaba-seller": {
"command": "/path/to/.venv/bin/python",
"args": ["-m", "alibaba_seller_mcp"]
}
}
}Tools
Tool | What it does |
| Get the URL the seller opens to grant access |
| Exchange the OAuth |
| Finish auth from a pasted callback URL (auto-extracts |
| Show authorization state / token expiry |
| Call any granted API by method name (escape hatch / testing) |
| Inspect a local image/video (type, size, dimensions) |
| Read a CSV/JSON price file into normalized rows |
| Upload one local image to the photo bank → |
| Publish from a minimal brief — Claude enriches title/detail/attributes |
| Get a category's publish schema (fields, types, required, options) |
| Get a category's system attributes for |
| Publish a product from a |
| Incrementally update a product from a manifest (schema.update) |
| AI-generate a structured product detail (title/highlights/modules/attributes) |
| List the seller's videos (needs |
| Associate a video with a product ( |
| List product ids related to a video |
| Get a product group / list top-level groups ( |
| Generate per-platform social posts with Claude |
| Report AI token usage + estimated USD cost |
Resource: usage://summary — all-time usage grouped by model.
Authorizing a seller
The redirect_uri you send must byte-match the callback registered in the app
console. There are two ways to complete the flow:
Local auth helper (recommended)
alibaba-seller-auth # or: python -m alibaba_seller_mcp.authserverIf
ALIBABA_REDIRECT_URIis a localhost URL (e.g.http://127.0.0.1:8721/callback, registered in the console), it starts a tiny server, opens the browser, and auto-captures thecode— fully hands-off.Otherwise (e.g. a test app whose callback is
https://www.alibaba.com), it opens the browser and asks you to paste the redirected URL; it extracts thecodefor you. Force this with--paste. The callback page need not load correctly — thecodeis in the address bar regardless.
If the console only accepts a public https callback (no localhost), auto-capture
still works through a tunnel: run a public https tunnel (cloudflared/ngrok) to
127.0.0.1:8721, register the tunnel URL as the callback, set
ALIBABA_REDIRECT_URI to it, and start the helper with the local bind address:
alibaba-seller-auth --bind 127.0.0.1:8721 # or set ALIBABA_LOCAL_BIND=127.0.0.1:8721Via MCP tools
alibaba_get_authorize_url→ open the URL, approve.Either paste the redirected URL into
alibaba_complete_authorization_from_url, or pass just the code toalibaba_complete_authorization.
Typical flow
Authorize the seller (see above) → token stored + auto-refreshed.
product_create({...}, image_paths=[...], price_file="prices.csv").generate_social_content("My Product", ["linkedin","instagram"]).usage_stats(group_by="day")to see token spend.
Publishing from a brief (recommended)
Instead of hand-filling the full manifest, give a minimal brief — the facts only — and let Claude enrich the rest:
{
"brief": "C01B Salt Blaster: handheld salt-firing insect killer, infrared laser aiming, ABS body, for home/garden mosquito & fly control",
"brand": ["C01B", "ABS"],
"category_id": 201335115,
"images": { "main": [{ "file_id": "…", "url": "…" }, … 4–6], "detail": ["https://…", …] },
"price": { "unit": "Set", "moq": 10, "tiers": [[10, 12.90], [500, 9.90]] },
"facts": { "place_of_origin": "China", "material": "ABS" },
"version": "premium", "group": "908868315"
}product_publish_from_brief(brief_path="products/example/brief.json") then:
You provide (facts only): brief, brand, category, images, price/MOQ, and factual attributes (origin, material).
Claude enriches: title (title-cased, ≤128 chars), highlights, image-text detail modules, FAQs, custom parameters, and picks the descriptive category attributes (feature/use/season/style…) from the schema's allowed options.
The tool handles: schema fetch, option-code mapping, required-attribute detection,
priceUnit/saleType/scPricecodes, imagefileId, and multiComplex XML.
The result reports ai_filled (what was generated), missing_required (required
attributes still unfilled), and warnings. Main images must be 4–6 (≤5 MB each,
640×640, aspect ratio 3:4–4:3, square/1000×1000 best); fewer than 4 raises a warning — Claude cannot generate real product photos, so add more.
Image guidance differs by role:
Main images ( | Detail images ( | |
Count | 4–6 | ≤ 30 |
Size | ≤ 5 MB | ≤ 3 MB |
Dimensions | > 640×640, ratio 3:4–4:3 (square/1000×1000 best) | width ≥ 1200 px; height may be very long |
Because detail images allow long/tall canvases, several sections can be stitched into one long image (keep each ≤ 3 MB) — this fits more content under the 30-image cap, at the cost of slower detail-page image loading for buyers, so balance long images vs. count. Images may be local file paths (uploaded to the photo bank automatically, one per call) or existing photo-bank refs. Local files are checked against the guidance above (warnings only).
The full product.json manifest below remains available for manual control.
Publishing a product (full manifest)
Product publishing on Alibaba.com Global B2B is schema-based: each category
defines its own fields. The flow is schema.get → fill values → schema.add.
Inspect the category schema to learn its field ids/options:
product_get_schema(category_id=201335115).Describe the product in a manifest — a folder with
product.jsonplus assets:products/salt-blaster/ product.json images/main/01.jpg images/detail/01.jpg prices.csv{ "category_id": 201335115, "language": "en_US", "photobank_group_id": "17590", "fields": { "productTitle": "C01B Salt Blaster Insect Killer ...", "saleType": "normal", "scPrice": "1", "priceUnit": "20" }, "main_images": ["images/main/01.jpg"], "detail_images": ["images/detail/01.jpg"], "price_file": "prices.csv" }Publish:
product_publish(manifest_path="products/salt-blaster/product.json", draft=True)(drafts are not listed live — use them to verify a manifest, then publish for real).
Images: scImages (main images) require the photo-bank fileId — the value is
serialized as <value fileId="…">url</value>. Local images are uploaded via the photo
bank's /sync (TOP) gateway (photobank.upload uses session + no-prefix signing;
product_upload_image and the manifest's main_images/detail_images local paths use
it automatically). To reuse images already in your photo bank instead of uploading, put
them in the manifest as main_image_refs: [{"file_id": "…", "url": "…"}] and
detail_image_refs: ["https://…", …]. List existing images with the
alibaba.icbu.photobank.list API and groups with alibaba.icbu.photobank.group.list.
AI-generated structured detail (AI+结构化商详)
generate_product_detail(product_name, version, features, keywords, detail_image_count, save_to)
produces the title, highlights, ordered image+text modules, attributes and FAQs with
Claude. version ∈ premium (全能精装版) / lite (经济简装版) / general (通用排版)
controls completeness. The title is normalized to meet Alibaba's publishing rules:
≤128 characters, only - / , & . punctuation (special characters like
@ ! ! ? ? $ ^ { } ~ 、 are stripped), and title case (major words and 4+ letter
words capitalized; short articles/conjunctions/prepositions lowercased unless first;
brand/model/acronym tokens preserved — pass brands=["C01B", …]). The same length +
punctuation rules are enforced on any manually-set productTitle at publish time. Save it with
save_to="products/x/content/detail.json" and point
the manifest at it via "content_file": "content/detail.json".
The generated content follows the standard product-detail structure, and publishing maps each part to its schema field:
Detail section | Content key | Schema field |
Title |
|
|
Product Highlights |
|
|
Scene / detail / dimensions / packaging modules |
|
|
Custom parameters |
|
|
Category attributes (required) | manifest |
|
Company Introduction |
|
|
FAQs |
|
|
Description mode |
|
|
Product video is associated separately via the video tools; logistics dimensions live in
pkgMeasure/pkgWeight, packaging in boxPackaging, certifications in productCertificate.
Required category attributes (icbuCatProp, e.g. Place of Origin / Material / Feature)
are auto-filled from a manifest product_attributes map — keyed by attribute name or id,
with values given as display names or option codes:
"product_attributes": {
"Place of Origin": "China",
"Feature": ["Eco-Friendly", "Durable"],
"Material": "ABS"
}Which attributes are required and their allowed options come straight from schema.get
(each attribute's requiredRule / options). Discover them with category_get_attributes or
product_get_schema. The publish result's missing_required lists any required attribute still
unfilled — a draft tolerates gaps, but a real (non-draft) publish needs them all.
At publish time, main_images/detail_images are uploaded to the photo bank
(cached by content hash), their URLs are placed into scImages/detailImage, and
price_file fills ladderPrice (when scPrice is "1") plus MOQ. Field ids and
option codes are category-specific — always check product_get_schema first.
Price file formats
CSV (header row required):
sku,price,MOQ,currency
A-1,12.5,100,USDJSON (list of objects or a single object):
[{ "sku": "A-1", "price": 12.5, "moq": 100, "currency": "USD" }]Recognized aliases are normalized to sku, price, min_order_quantity,
currency, quantity, min_price, max_price; unknown columns are kept under
extra.
Signing
Requests are signed with HMAC-SHA256: parameters (system + business, excluding
sign and file bytes) are sorted by name, concatenated as
api_path + key1value1key2value2…, and signed with the App Secret (uppercase hex).
tests/test_signing.py verifies this against the documented reference vector.
Development
pip install -e ".[dev]"
pytestTool safety & schemas
Annotations — every tool advertises MCP hints so clients can reason about it: read-only tools set
readOnlyHint; writing tools setdestructiveHint/idempotentHint(e.g.product_publishis non-idempotent,product_updateandvideo_relate_productare idempotent); API/AI tools setopenWorldHint.Structured output — tools return typed Pydantic models, so each has an output schema with
additionalProperties: falseinstead of an open object.Filesystem allowlist — tools that take a local path (
read_local_media,read_price_file, product manifests and their referenced assets,generate_product_detail(save_to=…)) resolve the path and confine it toALIBABA_MCP_ALLOWED_DIRS(default: the current working directory). Paths outside the allowlist — including..traversal — are rejected with a clear error.
Security
The .env and the state dir (~/.alibaba_seller_mcp, holding OAuth tokens and the
usage log) are gitignored. Never commit real credentials. The filesystem allowlist
above limits what an untrusted MCP client can read or write.
Available Tools
21 toolsalibaba_auth_statusBRead-only
Show whether a seller is authorized and when the token expires.
| Name | Required | Description | Default |
|---|---|---|---|
| account_key | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | No | |
| error | No | |
| expired | No | |
| accounts | No | |
| authorized | No | |
| error_type | No | |
| expires_at | No | |
| account_key | No | |
| has_refresh_token | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=false, so the safe, local-read nature is known without the description. The description adds the useful behavioral fact that the payload covers both authorization state and token expiry, but says nothing about what happens with a missing/invalid account_key or token refresh behavior.
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?
A single tight sentence that front-loads the core purpose (authorized?) and adds the secondary detail (expiry) without filler. Nothing to trim.
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?
An output schema exists, so return values need no explanation, and the read-only annotations cover the safety profile. However, for a tool whose only parameter is undocumented in both schema and description, the definition is not quite complete enough to call confidently without inspecting the schema.
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 0% for the single account_key parameter, and the description never mentions it — not what it identifies, what format it takes, or what an empty default means. With a non-trivial parameter fully undocumented, the description fails to compensate for the schema gap.
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 states a specific check (authorization status) plus a concrete detail (token expiry), which cleanly identifies the tool's job. It doesn't explicitly contrast itself with siblings like alibaba_get_authorize_url or alibaba_complete_authorization, but the resource (auth status) is distinct enough to select it.
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?
Usage is only implied: an agent infers it should call this to check whether a seller is connected or when the token lapses. There is no explicit statement of when to use this versus alibaba_get_authorize_url (to start auth) or alibaba_complete_authorization (to finish it), nor any prerequisite guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
alibaba_complete_authorizationA
Exchange an OAuth code (from the callback) for an access token and store it.
| Name | Required | Description | Default |
|---|---|---|---|
| code | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | No | |
| error | No | |
| error_type | No | |
| expires_at | No | |
| account_key | No | |
| has_refresh_token | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, openWorldHint=true and idempotentHint=false, so the mutation/network profile is covered. The description adds real value with 'store it', disclosing a persistent side effect, but says nothing about code expiry, failure modes, or what happens to an existing stored token.
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?
One sentence, front-loaded with the core action and its key side effect. Nothing extraneous.
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?
An output schema exists, so return values need not be explained, and annotations cover the safety profile. The description adequately frames the flow (callback code in, stored token out), though it could name the alternative sibling to round out the picture.
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 0% and the single parameter has no schema description, so the description carries the burden. It compensates by explaining that `code` comes from the callback, giving the agent the origin and expected value of the parameter, though it omits format details.
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?
States a specific verb and resource: exchange an OAuth code for an access token and store it. It is clear and action-specific, but does not differentiate itself from the close sibling alibaba_complete_authorization_from_url, which an agent would need to choose between.
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 phrase 'from the callback' implies the usage context (after the OAuth redirect returns a code), which is useful implied guidance. However it never states when to prefer this over alibaba_complete_authorization_from_url or what prerequisites exist, leaving the alternative-route decision to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
alibaba_complete_authorization_from_urlA
Complete authorization from the full callback URL the seller landed on.
Handy when the callback is a page like https://www.alibaba.com — paste the
whole redirected address (containing ?code=...) and this extracts the code
and exchanges it for a token.
| Name | Required | Description | Default |
|---|---|---|---|
| redirected_url | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | No | |
| error | No | |
| error_type | No | |
| expires_at | No | |
| account_key | No | |
| has_refresh_token | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, openWorldHint=true and idempotentHint=false, covering the safety/network profile. The description adds that it performs a code-to-token exchange, which is useful behavioral context, but says nothing about prerequisite steps (e.g. needing alibaba_get_authorize_url first) or failure handling.
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 short sentences, front-loaded with the core action before the usage hint. Efficient, though the URL example is slightly verbose relative to the single parameter it illustrates.
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?
An output schema exists, so return values need no explanation, and the single parameter is explained. What remains unstated is the surrounding OAuth flow context (e.g. that an authorize URL must be generated first), which would help for a multi-step auth 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?
Schema coverage is 0% and the schema gives only a bare string type, so the description carries the full burden. It does this well by explaining the parameter must be the whole redirected address containing `?code=...`, which clarifies format and intent beyond the empty 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?
States a specific verb+resource (complete authorization) and explains the mechanism: extracts the code from the redirected URL and exchanges it for a token. This distinguishes it clearly from the sibling alibaba_complete_authorization, which takes the code directly, and an agent can select between them without opening either schema.
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?
"Handy when the callback is a page like https://www.alibaba.com" gives a concrete trigger condition for choosing this tool. It does not explicitly name the alternative (alibaba_complete_authorization) or state when NOT to use it, so it stops short of full routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
alibaba_get_authorize_urlARead-only
Get the OAuth URL the seller opens to grant this app access.
Send the returned URL to the seller. After they approve, the platform
redirects to the app's configured callback with a ?code=...; pass that code
to alibaba_complete_authorization.
| Name | Required | Description | Default |
|---|---|---|---|
| state | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | No | |
| error | No | |
| error_type | No | |
| authorize_url | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations cover the safety profile (readOnlyHint=true, openWorldHint=false), and the description adds real behavioral context beyond them: the URL is meant to be handed to a human seller, approval triggers a callback redirect carrying ?code, and that code must be forwarded. It does not mention URL expiry or scope requirements, so it is not fully exhaustive.
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 tight sentences: the purpose first, then the hand-off flow. No filler, and the next-step dependency is front-loaded rather than buried.
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?
An output schema exists, so the returned URL format need not be explained, and the description correctly covers the end-to-end auth hand-off. The one real hole is the unexplained `state` parameter; otherwise nothing needed to call this correctly is missing.
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 0% and the description never mentions the single `state` parameter, so the agent gets no guidance on what to put there or that it is optional (defaults to empty). With a low-coverage schema the description is expected to compensate, and it does not.
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?
States a specific verb and resource ('Get the OAuth URL') plus the actor and scope ('the seller opens to grant this app access'). It also implicitly separates itself from alibaba_complete_authorization by naming that tool as the downstream step.
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?
Explains the operational flow clearly: send the URL to the seller, they approve, the platform redirects with a ?code, and that code goes to alibaba_complete_authorization. It names the alternative sibling and the condition for using it, though it never states when this tool should not be used (e.g. already-authorized cases).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
alibaba_raw_callBDestructive
Call any granted API by method name (e.g. alibaba.icbu.product.get).
Escape hatch for testing/verifying methods. It can invoke write APIs, so it is
not read-only. Set authorized=False for system/public APIs that need no token.
| Name | Required | Description | Default |
|---|---|---|---|
| method | Yes | ||
| params | No | ||
| authorized | No | ||
| account_key | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | No | |
| error | No | |
| response | No | |
| error_type | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, destructiveHint=true and openWorldHint=true, so the safety profile is covered. The description adds that it 'can invoke write APIs, so it is not read-only,' which is largely a restatement of the annotations, but adds the useful token/auth caveat for public APIs. No rate-limit, error, or side-effect detail beyond what annotations give.
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, front-loaded sentences with no filler; the core 'call any granted API by method name' leads and details follow. Efficient and readable, though the dangling example fragment after the first sentence is slightly awkward.
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?
An output schema exists, so return values need not be explained, and annotations cover the safety profile. For a 4-parameter escape-hatch tool the description is adequate on method and auth but leaves the payload and account_key semantics unaddressed.
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 0%, so the description must carry the parameter burden. It explains `method` (by example) and `authorized` ('Set authorized=False for system/public APIs that need no token'), but says nothing about `params` (the request payload) or `account_key`, leaving half the parameters undocumented.
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 states a specific verb+resource: 'Call any granted API by method name,' reinforced with a concrete dotted example (`alibaba.icbu.product.get`). The phrase 'Escape hatch for testing/verifying methods' distinguishes it from the higher-level sibling tools (product_publish, product_update, etc.), though it never names an alternative explicitly.
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?
'Escape hatch for testing/verifying methods' gives clear context for when this tool is appropriate rather than the curated siblings. The authorized-flag note tells the agent when to pass `authorized=False`. There is no explicit when-not guidance or named sibling to prefer in normal flows.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
category_get_attributesARead-only
Get a category's system-defined attributes (for icbuCatProp), including
which are required. Public API — no authorization needed. Each attribute's
attr_id maps to the publish schema field p-<attr_id>; car_model attributes
need the hierarchical-attribute API for their next level.
| Name | Required | Description | Default |
|---|---|---|---|
| category_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | No | |
| count | No | |
| error | No | |
| cat_id | No | |
| required | No | |
| attributes | No | |
| error_type | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and openWorldHint, and the description usefully adds that no authorization is needed and how attr_id maps to publish schema fields. This is genuinely additive behavioral context rather than a restatement of the annotations, though it says nothing about rate limits or output shape.
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 tight sentences with the core purpose front-loaded and the edge-case caveat trailing. Slightly dense with inline identifiers but every clause carries information.
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?
An output schema exists, so return values need not be described; the description covers the remaining gaps an agent needs — auth requirement, the attr_id-to-publish-field mapping, and the car_model escalation path. Complete for a single-parameter read 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?
Schema coverage is 0% and there is one required parameter (category_id) whose format and provenance are never explained in either the schema or the description. The description explains attribute-level semantics (attr_id, car_model) rather than the input, so it only partially compensates.
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?
States a specific verb and resource ('Get a category's system-defined attributes') and adds scope ('including which are required'). It distinguishes the output from the broader publish schema (icbuCatProp, p-<attr_id> mapping), though it never names a sibling tool that an agent could confuse it with.
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?
Gives one conditional routing hint ('car_model attributes need the hierarchical-attribute API for their next level') and notes the API is public, but offers no explicit when-to-use-vs-alternatives guidance relative to siblings like product_get_schema.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
generate_product_detailA
Generate a structured product detail with Claude (title, highlights, ordered image+text modules, attributes, keywords, FAQs).
The title is normalized to Alibaba title case; pass brands (e.g. ["C01B"]) to
preserve casing. version ∈ premium (全能精装版) | lite (经济简装版) | general
(通用排版). If save_to is given, the content is written there as JSON (confined
to the server's allowed directories). Token usage is recorded (see usage_stats).
| Name | Required | Description | Default |
|---|---|---|---|
| tone | No | professional | |
| brands | No | ||
| save_to | No | ||
| version | No | premium | |
| features | No | ||
| keywords | No | ||
| language | No | English | |
| product_name | Yes | ||
| target_market | No | global B2B buyers | |
| detail_image_count | No | ||
| extra_instructions | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | No | |
| error | No | |
| model | No | |
| usage | No | |
| content | No | |
| raw_text | No | |
| saved_to | No | |
| error_type | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, openWorldHint=true and idempotentHint=false, but the description adds real behavioral context beyond them: the title is auto-normalized to Alibaba title case, writes via `save_to` are confined to the server's allowed directories, and token usage is recorded (pointing at `usage_stats`). It stops short of describing failure modes or API/permission requirements for a non-idempotent, LLM-backed generation call.
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 tight sentences: output shape front-loaded, then parameter semantics, then side effects. No filler, no restatement of the name, and the parenthetical details are load-bearing.
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?
An output schema exists, so return values need not be described, and the description covers the generation contract, the file-write side effect with its sandbox constraint, and cost accounting. The main remaining gap is guidance on the many unlabeled input parameters (tone, language, detail_image_count), which an agent must infer.
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 0% across 11 parameters, so the description carries the entire burden, yet it only explains three of them (brands, version, save_to). It does add non-obvious value the schema lacks — the version enum meanings (premium/lite/general) are absent from the schema, and the brand-casing rule is a real semantic detail — but tone, features, keywords, language, target_market, detail_image_count, and extra_instructions remain unexplained.
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?
Specific verb ('Generate') + resource ('structured product detail') with an explicit enumeration of the produced artifact (title, highlights, image+text modules, attributes, keywords, FAQs). This sharply distinguishes it from siblings like generate_social_content and product_render_draft without needing schema inspection.
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 gives conditional hints for individual parameters (when to pass `brands`, what `save_to` does, what `version` accepts), but never states when to choose this tool over alternatives such as product_publish_from_brief or generate_social_content, nor any exclusions or prerequisites. Usage is implied by the output artifact rather than stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
generate_social_contentC
Generate platform-tailored social posts for a product with Claude.
Token usage is recorded automatically (see usage_stats). platforms e.g.
["linkedin", "instagram", "x", "facebook", "tiktok", "pinterest"].
| Name | Required | Description | Default |
|---|---|---|---|
| tone | No | professional | |
| features | No | ||
| keywords | No | ||
| language | No | English | |
| variants | No | ||
| platforms | Yes | ||
| product_name | Yes | ||
| extra_instructions | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | No | |
| error | No | |
| model | No | |
| posts | No | |
| usage | No | |
| raw_text | No | |
| error_type | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, openWorldHint=true and idempotentHint=false, so the agent knows output is generated, non-deterministic and externally sourced. The description adds genuinely useful context that token usage is recorded automatically and where to check it, which the annotations do not convey. It stops short of noting cost magnitude, rate limits, or latency for an LLM-backed call.
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 short sentences, front-loaded with the purpose before the token-accounting note and the platform examples. Nothing is padded, though the trailing newline-wrapped example is slightly awkward.
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?
An output schema exists, so return values need not be described. However, for an 8-parameter generation tool with zero schema coverage and no usage guidance, six parameters and the tool-selection decision are left entirely unexplained.
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 0% across 8 parameters, so the description carries the full burden and largely fails it. It supplies useful example values for `platforms` (which has no enum), but tone, features, keywords, language, variants and extra_instructions are left completely undefined in both the schema and the description.
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 states a specific verb+resource: generating platform-tailored social posts for a product, and names the underlying generator (Claude). It is distinguishable from siblings like generate_product_detail, though it doesn't explicitly contrast with them.
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?
There is no statement of when to use this tool versus alternatives, no prerequisites, and no exclusions. The only routing hint is a pointer to usage_stats for token accounting, which is informational rather than usage guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
product_get_schemaARead-only
Get the publish schema for a category: fillable fields, types, required flags, and allowed options. Inspect this before publishing.
| Name | Required | Description | Default |
|---|---|---|---|
| language | No | en_US | |
| account_key | No | ||
| category_id | Yes | ||
| include_all | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | No | |
| error | No | |
| fields | No | |
| required | No | |
| error_type | No | |
| field_count | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=true, so safety is covered structurally. The description adds the pre-publish inspection framing but says nothing about caching, freshness, or completeness of the schema, so it adds only modest context 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?
Two tight sentences, zero filler, with the subject and the required action front-loaded before the workflow advice.
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?
An output schema exists, so the return shape need not be described, and the read-only nature is covered by annotations. The remaining gap is the undocumented parameters in an otherwise complete pre-publish helper.
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 0% for four parameters. The description only implies category_id ("for a category") and vaguely hints at include_all ("allowed options"), leaving language, account_key, and include_all's effect undocumented in both schema and prose.
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 names a specific verb and resource ("Get the publish schema for a category") and enumerates the returned content: fillable fields, types, required flags, allowed options. It does not explicitly differentiate itself from the nearby sibling category_get_attributes, so it stops short of a 5.
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?
"Inspect this before publishing" gives a clear workflow trigger that ties the tool to product_publish. It offers no exclusions or named alternatives (e.g., category_get_attributes vs this), so it is context without disambiguation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
product_group_getARead-only
Get a product group's info (name, parents, child groups). Pass group_id=-1
(default) to list all top-level groups (returned under children).
| Name | Required | Description | Default |
|---|---|---|---|
| group_id | No | -1 | |
| account_key | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | No | |
| error | No | |
| children | No | |
| group_id | No | |
| parent_id | No | |
| error_type | No | |
| group_name | No | |
| parent_id2 | No | |
| children_id_list | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=true, so safety is covered. The description adds useful behavior beyond the annotations: that the -1 sentinel switches from single-group lookup to top-level listing, and where results land (`children`). It says nothing about auth requirements, rate limits, or pagination, keeping it at a solid 3.
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 compact sentences with no filler; the primary purpose leads and the group_id special case follows. Effectively sized for a two-parameter read 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?
An output schema exists, so return-value documentation is not required, and the description sensibly stops at naming the key fields. Combined with readOnly/openWorld annotations and the -1 behavior note, an agent has enough to call it correctly; only account_key's role is unaddressed.
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 0%, so the description must carry parameter meaning. It explains group_id semantics well (default -1 means list all top-level), but account_key is left entirely unexplained in both schema and description, so half the parameters remain opaque.
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?
States a specific verb ('Get') and resource ('product group') and enumerates the returned fields (name, parents, child groups), so an agent knows exactly what it retrieves. It doesn't explicitly distinguish itself from the nearby category_get_attributes sibling, which is a minor gap given the largely unrelated sibling set.
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 does provide an actionable default behavior: passing group_id=-1 lists all top-level groups. That is real usage guidance, but it is scoped to one parameter value rather than stating when to reach for this tool versus alternatives, so guidance is implied rather than explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
product_publishA
Publish a product from a manifest file (product.json), creating a new product.
The manifest gives category_id, language, fields, and asset references
(main_images/detail_images, price_file, video). Required category
attributes (icbuCatProp) are auto-filled from the manifest's
product_attributes (keyed by attribute name or id) using the schema's own
options/required rules. Set draft=True to create a draft (not listed live) —
recommended for verifying a manifest. missing_required in the result lists
required attributes still unfilled (a real publish needs them). The manifest and
its assets are confined to the server's allowed directories.
| Name | Required | Description | Default |
|---|---|---|---|
| draft | No | ||
| account_key | No | ||
| manifest_path | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | No | |
| error | No | |
| response | No | |
| error_type | No | |
| product_id | No | |
| biz_success | No | |
| filled_fields | No | |
| missing_required | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, openWorldHint=true, idempotentHint=false, but the description adds substantial non-obvious behavior: auto-fill of required category attributes from product_attributes, draft semantics ('not listed live'), and that the manifest and assets are confined to the server's allowed directories. It stops short of describing failure conditions or side effects on existing products.
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 core action is front-loaded in the opening sentence, followed by structured detail on the manifest, attribute auto-fill, draft mode, and result fields. Dense but each clause carries information; no filler.
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?
An output schema exists, so return values need not be explained, and the description still notes missing_required in the result. It covers manifest structure, auto-fill rules, draft mode, and directory confinement. The only real gap is the unexplained account_key parameter.
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 0%, so the description must carry the load. It explains draft well and explains manifest_path's contents/constraints, but account_key is entirely undocumented and manifest_path's path syntax is left implicit. Partial compensation only.
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 first sentence gives a clear verb+resource ('Publish a product from a manifest file ... creating a new product') and names the concrete artifact (product.json). This implicitly distinguishes it from product_publish_from_brief (brief vs manifest) and product_update, though no sibling is explicitly named.
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?
It offers real guidance for one decision ('Set draft=True ... recommended for verifying a manifest') but never states when to choose this tool over product_publish_from_brief, product_render_draft, or product_update, nor prerequisites/alternatives. Usage is implied rather than framed.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
product_publish_from_briefA
Publish a product from a minimal brief — the seller provides only facts; Claude enriches the rest.
Provide brief inline or a brief_path (JSON file, confined to allowed dirs).
The brief needs: brief (short description), category_id, images
(main 4–6 + detail), price ({unit, moq, tiers}), and facts (place_of_origin,
material). Claude writes the title, highlights, detail modules, FAQs, custom
parameters, and picks the descriptive category attributes from the schema's
allowed options. Returns the draft product_id, missing_required, ai_filled
(what was auto-generated), and warnings (e.g. fewer than 4 main images —
AI cannot generate real product photos). Defaults to draft=True.
| Name | Required | Description | Default |
|---|---|---|---|
| brief | No | ||
| draft | No | ||
| brief_path | No | ||
| account_key | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | No | |
| error | No | |
| response | No | |
| warnings | No | |
| ai_filled | No | |
| error_type | No | |
| product_id | No | |
| biz_success | No | |
| filled_fields | No | |
| missing_required | No | |
| needs_more_main_images | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare the write/open-world/non-idempotent profile, so the description only needs to add what they don't cover. It does add real value: `brief_path` is confined to allowed directories, draft defaults to true, and warnings can be raised when fewer than 4 main images exist because AI cannot generate real photos. The enumerated return fields are largely redundant with the output schema, keeping this short of a 5.
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?
Front-loaded with the purpose, then input modes, then brief contents, then outputs — a sensible information hierarchy with no filler sentences. It is dense for a single paragraph, but every clause contributes.
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 AI-enrichment tool the description covers input modes, required brief fields, defaults, and failure warnings, and an output schema exists to carry return details. The only notable gaps are the unexplained `account_key` and the absence of any note about authorization prerequisites or repeat-call behavior.
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 0% and `brief` is an untyped object, so the description carries the full burden — and it does, spelling out the required brief keys (description, category_id, images, price with unit/moq/tiers, facts with place_of_origin/material). It also clarifies `brief_path` and the `draft` default. `account_key` is left unexplained, which prevents a top score.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Publish a product') plus the defining scope ('from a minimal brief — the seller provides only facts; Claude enriches the rest'). This scope is exactly what separates it from the sibling product_publish, so an agent can route between them without opening either schema.
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?
It explains how to supply input (inline `brief` or `brief_path`) and what the brief must contain, which is genuine usage context. However, it never says when to choose this tool over product_publish or product_render_draft, nor any precondition such as authorization or schema lookup. Usage is implied rather than stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
product_render_draftBRead-only
Read back a DRAFT product's saved fields (schema.render.draft). product_id
is the plaintext numeric draft id. Useful to verify what a publish stored.
| Name | Required | Description | Default |
|---|---|---|---|
| language | No | en_US | |
| product_id | Yes | ||
| account_key | No | ||
| category_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | No | |
| error | No | |
| fields | No | |
| error_type | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=true, so the safety profile is covered. The description adds the useful detail that it returns the saved field set from the draft render surface, but says nothing about scope, freshness, or failure modes when no draft exists.
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 tight sentences with the purpose front-loaded and zero filler; the parenthetical surface reference earns its place. Slightly denser than ideal but nothing is wasted.
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?
An output schema exists, so return values need no explanation, and the read-only nature is annotation-covered. However, with 0% parameter description coverage and a required category_id left undocumented, the definition is not quite complete enough for reliable invocation.
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 0%, so the description carries the full burden, yet it only explains product_id (plaintext numeric draft id). The required category_id and the language/account_key parameters are left entirely undefined in both the schema and the description.
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?
States a specific verb and resource: reads back a DRAFT product's saved fields, naming the underlying surface (schema.render.draft). That cleanly separates it from write siblings like product_publish and product_update, though it never explicitly contrasts with read siblings such as product_get_schema or product_group_get.
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?
"Useful to verify what a publish stored" implies the post-publish verification context, which is real usage guidance. But it never says when NOT to use it or which sibling to prefer for other product reads, leaving the agent to infer routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
product_updateBIdempotent
Incrementally update an existing product (schema.update) from a manifest.
Only the fields present in the manifest are changed. Re-applying the same manifest yields the same state (idempotent). Paths are confined to the server's allowed directories.
| Name | Required | Description | Default |
|---|---|---|---|
| product_id | Yes | ||
| account_key | No | ||
| manifest_path | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | No | |
| error | No | |
| response | No | |
| error_type | No | |
| product_id | No | |
| biz_success | No | |
| filled_fields | No | |
| missing_required | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare idempotentHint=true, readOnlyHint=false, and destructiveHint=false, so the safety profile is covered. The description adds genuinely new context: only manifest-present fields are changed (partial-update semantics) and paths are confined to allowed directories (a sandbox/security boundary). The idempotency sentence partly restates the annotation but the rest earns its place.
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, front-loaded with the core action and scope. Efficient, though the idempotency sentence duplicates an existing annotation hint.
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?
An output schema exists, so return values need no explanation, and behavioral boundaries (partial update, path confinement) are addressed. However, with 3 parameters at 0% schema coverage, the definition is incomplete about what product_id and account_key mean or require.
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 0%, so the description must carry parameter meaning, yet it only gestures at manifest_path via 'manifest'. The roles of product_id and especially the optional account_key (default "") are left entirely unexplained.
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?
Names a specific verb+resource (update a product) and clarifies scope with 'incrementally' and 'from a manifest', which distinguishes it from publish-style siblings like product_publish or product_publish_from_brief. No sibling is named explicitly, so it stops short of the top band.
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 says what it does but never states when to choose it over alternatives such as product_publish or product_render_draft, nor any prerequisites. No when/when-not routing is provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
product_upload_imageA
Upload one local image to the photo bank; returns {file_id, url}. The path is confined to the server's allowed directories.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | ||
| group_id | No | ||
| account_key | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | No | |
| url | No | |
| error | No | |
| cached | No | |
| file_id | No | |
| error_type | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare the write/openWorld/non-idempotent profile, and the description adds two genuinely new facts: the return payload {file_id, url} and the sandbox constraint that the path is confined to the server's allowed directories. That confinement note is real operational context an agent needs before calling.
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, no filler, with the action and its scope front-loaded before the return and constraint details. Every clause earns its place.
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 output schema covers return values so the description needn't, and the sandbox constraint closes the main safety gap. However, with three parameters at 0% schema coverage, the definition is not complete enough for an agent to confidently supply group_id or account_key.
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 0% and the description only obliquely touches 'path' via the confinement sentence. The two optional parameters, group_id and account_key, are entirely unexplained in both schema and description, leaving the agent guessing how to scope the upload.
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?
States a specific verb and resource ('Upload one local image to the photo bank') plus the return shape. No sibling tool performs image upload, so the definition is unambiguously distinguishable from the surrounding publish/query 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 never says when to use this tool versus alternatives (e.g. read_local_media, product_publish flows) or what prerequisites it assumes. 'One local image' hints at single-file batching behavior but stops short of guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
read_local_mediaARead-only
Inspect a local image or video (type, size, and image dimensions).
The path is confined to the server's allowed directories.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | No | |
| kind | No | |
| path | No | |
| error | No | |
| width | No | |
| height | No | |
| filename | No | |
| error_type | No | |
| size_bytes | No | |
| content_type | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=false, so the safety profile is covered. The description adds genuinely new behavioral context: the path must resolve inside the server's allowed directories, which is not expressed in the annotations or schema. It stops short of describing failure behavior for disallowed paths or size limits.
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 short sentences, front-loaded with the action and its returned fields, with the restriction second. Nothing is padded, though the second sentence could sit naturally alongside the parameter rather than in the body.
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?
An output schema exists, so return-value detail is unnecessary, and the description covers the key operational constraint for a single-parameter read tool. Only the handling of disallowed or nonexistent paths remains unaddressed.
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 0%, so the description must carry the parameter burden with one required 'path'. It contributes only the confinement rule and no format, relative-vs-absolute, or extension expectations, so it partially compensates but leaves real ambiguity about accepted path syntax.
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?
States a specific verb ('Inspect') and resource ('local image or video') and enumerates what it returns: type, size, and image dimensions. It is clearly distinguishable from read-family siblings like read_price_file and from the video_* tools, though it never names or contrasts them explicitly.
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?
No when-to-use guidance, no prerequisites, and no mention of alternatives such as video_query or video_list_related. The only contextual note is the path confinement, which is a constraint rather than usage guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
read_price_fileARead-only
Read prices from a local CSV or JSON file into normalized rows.
The path is confined to the server's allowed directories.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | No | |
| rows | No | |
| count | No | |
| error | No | |
| error_type | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=false, so the safety profile is known. The description usefully adds that the path is confined to the server's allowed directories and that input is normalized into rows, but says nothing about malformed files, missing files, encoding, or size limits.
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 short sentences, front-loaded with the action and supported formats, with the constraint appended. No filler.
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?
An output schema exists, so return values need not be documented, and annotations cover the read-only nature. Combined with the format and path-scope statements, the definition is nearly complete for a one-parameter read tool; only error/failure behavior is unaddressed.
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 0% for the single 'path' parameter, so the description carries the burden. It adds one meaningful constraint (the path must fall inside the server's allowed directories) but does not clarify whether the path is absolute or relative, or how the CSV/JSON format is detected.
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?
Specific verb (read) plus resource (prices) with the accepted inputs (CSV or JSON) and the output shape (normalized rows) all stated. It is clearly distinguishable from siblings such as read_local_media, which reads media rather than price files.
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 when it applies (you have a local price file) but never states when to prefer it, any prerequisites, or what alternatives exist if the data lives elsewhere. No exclusions or routing guidance are offered.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
usage_statsARead-only
Report AI token usage and estimated USD cost (from the local usage log).
Filter by model/label/since_iso (ISO-8601). group_by ∈ day|model|label.
| Name | Required | Description | Default |
|---|---|---|---|
| label | No | ||
| model | No | ||
| group_by | No | day | |
| since_iso | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | No | |
| error | No | |
| groups | No | |
| totals | No | |
| filters | No | |
| group_by | No | |
| call_count | No | |
| error_type | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=false, so the safety profile is covered. The description adds genuinely useful context that the numbers come from a local usage log, but says nothing about log coverage, staleness, or cost-model assumptions. With annotations carrying the safety burden, this is adequate rather than rich.
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 short sentences with zero filler; the purpose and scope come first and the parameter contract follows. Every clause carries information an agent needs.
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?
An output schema exists, so return values need not be explained, and the description covers the data source, all filters, and the grouping dimension. The only gap is not stating the default group_by=day or what an unfiltered call returns, which matters for a zero-required-parameter 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?
Schema description coverage is 0%, so the description must carry the load, and it does: it names all four parameters, marks model/label/since_iso as filters, flags ISO-8601 format, and supplies the group_by value set day|model|label that the schema does not declare as an enum. It omits defaults (group_by defaults to day) and empty-string semantics, so it falls short of full compensation.
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?
States a specific verb (report) and resource (AI token usage and estimated USD cost), and pins the data source with 'from the local usage log'. No sibling tool overlaps with usage/cost reporting, so an agent can select it unambiguously.
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?
Usage is implied by the reporting purpose and the filtering instructions, but the description never states when to reach for this tool versus other options or any exclusions (e.g. remote vs local accounting). It gives filtering mechanics rather than selection guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
video_queryARead-only
Query the seller's videos (to find video ids). Requires paging params, e.g.
params={"current_page": "1", "page_size": "20"}; each item has a video_id.
| Name | Required | Description | Default |
|---|---|---|---|
| params | No | ||
| account_key | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | No | |
| raw | No | |
| error | No | |
| error_type | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=true, so safety is covered. The description adds a genuine behavioral constraint (paging params are required) and the shape of each returned item (has a `video_id`), but says nothing about rate limits, filtering scope, or whether results are exhaustive.
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, no filler, with the core purpose front-loaded before the paging detail. The example is compact and directly actionable.
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?
An output schema exists so return values need not be re-explained, and the tool is simple (2 params, no required fields). However, the description leaves open what 'query' actually filters on and never accounts for `account_key`, so it is only minimally sufficient for correct invocation.
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 0% and the schema only shows `params` as an opaque anyOf object, so the description carries the load: it names the concrete keys (current_page, page_size) and their example values, which is meaningfully more than the schema. The `account_key` parameter remains unexplained, keeping this short of a 5.
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?
States a specific verb+resource ('Query the seller's videos') and adds the intent ('to find video ids'), which is more than a restatement of the name. It does not explicitly contrast with siblings like video_list_related or video_relate_product, so the differentiation is left implicit.
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 gives a concrete calling pattern ('Requires paging params, e.g. params={"current_page": "1", "page_size": "20"}'), which implies how to invoke it. It never states when this tool should be chosen over video_list_related or video_relate_product, so there is no real alternative-selection guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
video_relate_productAIdempotent
Associate a video with a product. target: "main" (main-image video) or
"detail" (detail video). Numeric ids are auto-converted to the encrypted ids
the API needs. Re-relating the same pair is idempotent.
| Name | Required | Description | Default |
|---|---|---|---|
| target | No | main | |
| video_id | Yes | ||
| product_id | Yes | ||
| account_key | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | No | |
| error | No | |
| success | No | |
| msg_code | No | |
| msg_info | No | |
| video_id | No | |
| error_type | No | |
| product_id | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare idempotentHint=true and destructiveHint=false, and the description's idempotency statement merely reinforces that. The genuinely new behavioral content is the auto-conversion of numeric ids into the encrypted form the API expects, which is not covered by any annotation and materially affects how callers pass ids.
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 tight sentences, front-loaded with the core action and then the target semantics and id conversion. Minimal waste, though the idempotency clause partly duplicates the annotation.
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?
An output schema exists, so return values need not be described, and annotations cover the safety profile. What remains is a simple associate operation, and the description covers the non-obvious pieces (target values, id conversion); only account_key's role is left unaddressed.
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 0% and target has no enum in the schema, so the description's enumeration of 'main' (main-image video) and 'detail' (detail video) adds real semantic value. However, video_id, product_id, and especially account_key (default "") remain unexplained, so compensation for the coverage gap is only partial.
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 ('Associate a video with a product'), which cleanly distinguishes it from the sibling read tools video_list_related and video_query. It never explicitly names those siblings or defines boundaries against them, so sibling differentiation is present only by implication.
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?
There is no when-to-use guidance, no prerequisites, and no reference to alternatives such as video_list_related for verification. Usage is only inferable from the purpose statement itself.
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.
21 tool updates
v0.1.0- First observed
alibaba_auth_status - First observed
alibaba_complete_authorization - First observed
alibaba_complete_authorization_from_url - First observed
alibaba_get_authorize_url - First observed
alibaba_raw_call - First observed
category_get_attributes - First observed
generate_product_detail - First observed
generate_social_content - First observed
product_get_schema - First observed
product_group_get - First observed
product_publish - First observed
product_publish_from_brief - First observed
product_render_draft - First observed
product_update - First observed
product_upload_image - First observed
read_local_media - First observed
read_price_file - First observed
usage_stats - First observed
video_list_related - First observed
video_query - First observed
video_relate_product
TDQS
Scored across 21 tools
Most tools target distinct resources or actions, but there are overlapping pairs: alibaba_complete_authorization vs alibaba_complete_authorization_from_url, and product_publish vs product_publish_from_brief vs generate_product_detail. Descriptions clearly distinguish inputs and use cases, so misselection is unlikely but possible for an agent skimming.
The set mixes naming conventions: namespace-prefixed (alibaba_*), resource-prefixed (video_*, product_*), verb-first (read_*, generate_*), and standalone usage_stats. Names remain readable, but there is no predictable verb_noun or resource_verb pattern throughout.
At 21 tools the set is in the borderline-heavy range. The broad domain (auth, product publishing, video, AI generation, local utilities) justifies many tools, but several auth and publish variants could potentially be consolidated.
Core publishing, updating, draft inspection, schema lookup, media handling, and content generation are covered. However, there is no product delete, no live product get/list, and no order or inventory operations; alibaba_raw_call is an escape hatch rather than a proper complete surface.
Maintenance
Related MCP Connectors
- cloziqOAuthcom.cloziq
Create your offers and launch AI Instagram DM sales agents from any MCP client, over OAuth.
Get recommended by Amazon's AI. Hosted MCP server for Amazon listing compliance & generation.
Multi-tenant MCP gateway for AI commerce. One connection, every store.
Multi-tenant MCP gateway for AI commerce. One connection, every store.
Related MCP Servers
- AlicenseAqualityCmaintenanceAn all-in-one AI content creation platform with 30 tools for generating images, videos, music, and managing enterprise social media and CRM. Enables content generation, image editing, e-commerce features, and social media management directly from MCP-compatible AI assistants.434Apache 2.0
- AlicenseCqualityCmaintenanceEnables e-commerce product management with CRUD operations, AI-powered descriptions, and MySQL database integration via MCP.46MIT
- FlicenseNot gradedqualityCmaintenanceEnables AI assistants to manage audio-story series: create, edit, narrate, publish, and generate marketing content like UGC videos and reels through a secure MCP endpoint.-

@fopost/mcpofficial
AlicenseAqualityBmaintenanceEnables managing social media posts, accounts, and AI-powered content features from any MCP client, including scheduling, publishing, analysis, and AI caption generation.1450MIT