alibaba-seller-mcp
It is an MCP server for Alibaba.com Global B2B sellers to authorize, create/update product listings, generate AI content, and manage media/usage.
Seller authorization: Get OAuth authorize URL, exchange callback code/URL for tokens, check auth status.
Publish from brief: Feed a minimal brief with facts/photos/prices; Claude enriches title, highlights, details, FAQs, and attributes, then publishes a draft or live product.
Full-manifest publishing: Publish or update products from a product.json with fields, images, prices, and product attributes; supports drafts and auto-fills required category attributes.
Schema and category attributes: Fetch category publish schemas and required system attributes/options for icbuCatProp.
Listing media: Inspect local images/videos, read price files, upload images to photo bank, render main images and code-rendered detail pages from JSON specs (no image model needed), re-render edits without tokens.
Product verification: Read back draft products to see what fields were stored and what required fields are missing.
AI generation: Generate structured product details (title, highlights, modules, attributes, FAQs) and platform-tailored social posts with Claude; save content to allowlisted paths.
Video management: Query seller videos, relate a video to a product (main or detail), list products related to a video.
Product groups: Get product group info and list top-level groups.
Raw API calls: Call any granted Alibaba API method as an escape hatch for testing/verification.
Usage tracking: Report AI token usage and estimated USD cost, filterable and grouped by day/model/label.
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:
Publish a listing from a brief — the seller writes down facts, Claude writes the title, highlights, detail modules, FAQs and descriptive attributes, and the server handles the category schema, option codes and image uploads.
Render the listing's images in code, not with an image model — main-image crops and text-dense detail pages are drawn with Pillow from a JSON spec, so the numbers and spelling are exact and re-rendering after an edit is free.
Authorize a seller via OAuth 2.0 (authorization-code flow, with token storage and automatic refresh).
Publish and update products from a lower-level manifest when you want full control.
Read images / videos / prices from local files — validated locally, then uploaded to the photo bank to obtain hosted URLs.
Track AI token usage with per-model USD cost estimates, and cap it per session.
Project structure
Organised by layer, and the dependencies only point downwards — adapters →
application → integrations → engine → shared. The rendering engine knows nothing
about Alibaba, briefs or Claude; it depends on pathsafe and nothing else.
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
│ │ ── adapters ──────────────────────────────────────────────
│ ├── server.py # MCP server — registers all tools + usage resource
│ ├── models.py # typed Pydantic tool-output models
│ ├── authserver.py # CLI OAuth helper (local-callback / paste / tunnel)
│ │ ── application ───────────────────────────────────────────
│ ├── listing/ # the flow: a brief folder → a published listing
│ │ ├── publishing.py # PublishFromBrief — owns media→schema→AI→publish
│ │ └── media.py # brief.photos → main images + rendered detail pages
│ │ ── integrations ──────────────────────────────────────────
│ ├── 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 # publish API adapter: schema.get / add / add.draft / update
│ │ ├── manifest.py # ProductManifest — the input document (DTO)
│ │ ├── values.py # pure value rules: icbuCatProp, saleProp, ladders, clipping
│ │ ├── fields.py # FieldAssembler — manifest + AI content → filled fields (does I/O)
│ │ ├── photobank.py # image uploads + content-hash cache
│ │ ├── categories.py # category system attributes (required + options)
│ │ ├── videos.py # video ↔ product relation (+ id encrypt/resolve)
│ │ └── groups.py # product groups
│ ├── ai/ # Claude generators — one class per concern
│ │ ├── prompts.py # every built-in prompt (edit wording rules here)
│ │ ├── base.py # shared client / usage recording / JSON extraction
│ │ ├── product_detail.py # title, highlights, modules, FAQs + attribute selection
│ │ └── detail_spec.py # page spec for the code-rendered detail images
│ │ ── engine ────────────────────────────────────────────────
│ ├── rendering/ # deterministic renderer (no AI, no brief knowledge)
│ │ ├── spec.py # page-template DTOs (the AI ↔ renderer contract)
│ │ ├── image_ops.py # cut-outs, transparency, colour variants
│ │ ├── fonts.py / painter.py# font lookup, drawing primitives (2× supersampled)
│ │ ├── pages.py # one renderer per page type
│ │ ├── typefaces/ # bundled Inter (SIL OFL)
│ │ ├── render.py # render_spec(spec, out_dir)
│ │ └── main_images.py # main-image crops
│ │ ── shared ────────────────────────────────────────────────
│ ├── config.py # env-driven config (gateway, API method names, keys)
│ ├── pathsafe.py # filesystem allowlist (path confinement)
│ ├── storage.py # local JSON/JSONL persistence (tokens, usage, cache)
│ ├── text_format.py # title normalizer (case + length + punctuation rules)
│ ├── 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 template (copy, replace placeholders)
│ ├── brief.json # the ONE input file: facts, photos, prices, overrides, detail pages
│ └── README.md # every key explained + page-type 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 — used for the brief's copy and the detail-page spec. Not needed for a brief with
"ai": false.
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 (brief copy, detail spec) |
| Claude model for AI generation (default |
| Filesystem roots the server may read/write (default: cwd) |
| Soft cap on Claude tokens per session (unset = no limit) |
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 |
| Overwrite a product from a complete manifest (schema.update — not a partial update) |
| Read back a draft's saved fields to verify what a publish stored |
| AI-generate a structured product detail (title/highlights/modules/attributes) |
| Build main images + code-rendered detail pages from a brief's |
| Re-render detail pages from an edited spec file — no tokens |
| List the seller's videos (needs |
| Set a product's main/detail video (single slot — replaces an existing one; numeric ids auto-encrypted) |
| List product ids related to a video |
| Get a product group / list top-level groups ( |
| 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.
Put
brief.jsonand the seller's photos in a folder (copyproducts/example/).product_publish_from_brief(brief_path="products/my-product/brief.json")→ media rendered, images uploaded, draft created.product_render_draft(product_id=…, category_id=…)to verify what was stored. Each publish creates a NEW draft — delete superseded ones in the console.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 — read them. A brief is hand-written
JSON, so a typo is the likeliest failure and the quietest one: an unknown key is
simply never read and the draft publishes without it. Any top-level key the flow
does not know, and any facts entry matching no attribute of the category, is
reported there with a "did you mean" when something is close:
ignored unknown brief key(s): lead_tiem (did you mean 'lead_time'?)
ignored facts key(s) matching no attribute of this category: Colour (did you mean 'Color'?)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).
One file, full control. Everything a listing needs lives in brief.json
(products/example/brief.json lists every key; its README explains each one):
ai: falseturns off every Claude call — thencontent.titleanddetail_specare mandatory and the draft is built purely from what you wrote.contentoverrides always win over AI output:title,highlights,company_intro,keywords,attributes,faqs.photos+detail_spec(inline) +how_to_use+partsdrive the code-rendered media (next section);imagescan still point at ready-made files or photo-bank refs instead.sale_props({"Color": ["Orange"]}) fills the required sales properties (saleProp, values serialized withinputValue);lead_time([[quantity, days], …]) fills the required shipping ladder (ladderPeriod), defaulting to ≤1000 units → 15 days with a warning when omitted.missing_requiredin the result now covers both.
The product.json manifest below remains available as a lower-level path.
Listing media without an image model (code-rendered detail pages)
Detail pages are text-dense (specs, steps, OEM/ODM terms). Image models get numbers and spelling wrong, bill per attempt, and need a full re-render for every copy change. This server draws them instead: the AI writes a compact JSON spec once, Pillow renders it, and re-rendering is free. Photos of the real product are the only pixels not drawn.
Put the seller's photos in the brief and leave images empty:
{
"brief": "…facts…", "product_name": "Salt Gun Fly Blaster", "model": "C01",
"brand": ["XXXX"], "category_id": 201335115,
"photos": {
"hero": "hero.png", // white-background render (required)
"side": "side.png", // side render (for features / steps / callouts)
"scenes": [{ "path": "kitchen.png", "caption": "Kitchen" }, { "path": "patio.png", "caption": "Patio" }],
"theme": { "primary": "#F47A20", "dark": "#1A1A1A" }
},
"oem_odm": "custom colours, logo printing, retail packaging; samples available",
"how_to_use": ["Fill the chamber with dry salt", "Rack the slide", "…"], // → steps page
"parts": ["salt chamber", "barrel", "elastic pouch", "grip"], // → callouts page
"price": { … }, "facts": { … }
}how_to_use and parts are optional but matter: the built-in prompt only lets the AI
write a steps page from listed operation steps and only label parts you named — without
them those pages are omitted rather than guessed.
Then either call listing_media_prepare(brief_path=…) explicitly, or just
product_publish_from_brief — it runs the same preparation when images.main /
images.detail are empty:
Step | What happens | Tokens |
Main images | hero/side cropped to the product and padded to 1000×1000; scenes cropped to 3:4 / 4:3 (max 6) | 0 |
| rendered exactly as written — full manual control | 0 |
else | rendered as-is — edit the text, call | 0 |
else (and | Claude writes the pages (hero, features, steps, levels, callouts, chips, scenes, spec_table, oem_odm, trust) from the brief's facts and saves them as | ~6k measured |
The spec's page schema lives in src/alibaba_seller_mcp/rendering/spec.py; the prompt that fills it is ai/prompts.py → DETAIL_SPEC_SYSTEM
(products/example/brief.json → detail_spec is a filled template of every page
type). Field lengths are enforced, so copy stays short enough to fit; unknown facts are
omitted, never invented.
Look: bundled Inter with tight headline tracking, product renders on light-grey stages
with a soft contact shadow, the accent colour (theme.primary) only on eyebrows,
numbers and one gradient line per page, stats as big numbers with small units, and
rounded cards. Pages are drawn at 2× and downsampled. Set DETAIL_FONT_DIR or
theme.font_dir to override the typeface (files named like Inter-SemiBold.ttf).
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]"
pytest
ruff check . # lint: pyflakes, import order, bugbear, pyupgrade
lint-imports # architecture guard: package layers (see [tool.importlinter])CI (.github/workflows/ci.yml) runs those three on every push and pull request —
ruff and lint-imports once, pytest on Python 3.11 / 3.12 / 3.13 — plus a build job
that checks the wheel's metadata with twine check.
The layers contract pins the dependency direction — server → listing → ai → alibaba →
rendering → usage → files → leaf modules — and a second contract keeps the renderer and
the file readers free of anthropic / requests / mcp, so the drawing engine stays
runnable (and testable) without the platform.
Tool safety & schemas
Annotations — every tool advertises MCP hints so clients can reason about it: read-only tools set
readOnlyHint; API/AI tools setopenWorldHint. Writing tools setdestructiveHint/idempotentHinthonestly:product_publishis non-idempotent (every call creates a product), whileproduct_updateandvideo_relate_productare idempotent but destructive — each replaces something that already exists.destructiveHint: falsepromises an additive-only tool, so no tool here claims it (a test enforces that).Structured output — tools return typed Pydantic models, so each has an output schema with
additionalProperties: falseinstead of an open object.Error handling — an anticipated failure (API error, rejected input, a path outside the allowlist, or a business refusal) comes back as a tool execution error:
isError: true, the message incontent, and the tool's own model as structured content withok: false/error/error_type. Protocol errors stay reserved for unknown tools and malformed requests, per the MCP spec. A business refusal is a clean gatewaycode: "0"with a false verdict; which field carries that verdict differs per API (biz_successon a publish,successon a video relation), so each result model declares its own viaResult.OUTCOME_FIELDrather than it being guessed by name — a status tool'sauthorized: falseis an answer, not a failure.Runaway-loop budget —
ALIBABA_MCP_AI_TOKEN_BUDGETcaps Claude tokens for one server session (unset = no limit). Checked before each AI call, so it bounds a loop rather than aborting work midway. Platform API calls need no equivalent: one tool call is one request, with no retries, and image uploads are cached by content hash.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. The same check covers paths named inside a file — a brief'sphotos, a spec'sassets, a manifest's images — since those are read, rendered into listing images and uploaded to the photo bank, and are no more trustworthy than a tool argument.
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.
License
MIT — see LICENSE.md. The bundled Inter typeface
(rendering/typefaces/) is under the SIL Open Font License 1.1.
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
- AlicenseCqualityDmaintenanceEnables e-commerce product management with CRUD operations, AI-powered descriptions, and MySQL database integration via MCP.47 npmMIT
- 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.14200 npmMIT