Ecomwith Commerce Desk
Break-even ROAS and profit calculators, UTM link builder, and Ecomwith tutorial and report search.
Should I use this
Quality & Safety
Based on automated analysis of tool definitions and protocol compliance.
Context Cost
This is the approximate number of tokens consumed each time the server's tools are loaded into a model's context. Higher counts reduce the attention available for other tasks.
Install
One-Click Install
Add this to your `claude_desktop_config.json` file:
{
"mcpServers": {
"commerce-desk": {
"url": "https://ecomwith.com/api/mcp"
}
}
}Remote endpoints
https://ecomwith.com/api/mcpstreamable-httpWhat it can do
Tool inventory
Tools (6)
🟢calculate_break_even_roas(currency, price, productCost, shippingCost, paymentFeeRate, ...)
Calculate break-even and target-profit ROAS and maximum CPA from user-supplied revenue, costs, percentage fees and refund reserve. Ask for missing inputs even if asked not to ask questions. Unknown fields must be null, never guessed zeros or a default currency. If any input is unknown, returns needs_input with questions and no estimate. Only explicit user-supplied zeros are valid. Does not read an ad account or change a budget.
Input Schema
{
"type": "object",
"properties": {
"currency": {
"anyOf": [
{
"type": "string",
"pattern": "^[A-Z]{3}$",
"description": "ISO 4217 currency code; all amounts must use this currency."
},
{
"type": "null"
}
],
"description": "User-supplied ISO 4217 currency code. Use null if unknown; never assume USD."
},
"price": {
"anyOf": [
{
"type": "number",
"exclusiveMinimum": 0,
"maximum": 1000000000,
"description": "Revenue per order after discounts, excluding collected taxes."
},
{
"type": "null"
}
],
"description": "User-supplied revenue per order after discounts and excluding collected taxes. Use null if unknown."
},
"productCost": {
"anyOf": [
{
"type": "number",
"minimum": 0,
"maximum": 1000000000,
"description": "Product cost per order, including any allocated costs you want to model."
},
{
"type": "null"
}
],
"description": "User-supplied product cost per order. Use null if unknown; use 0 only when the user explicitly supplied zero."
},
"shippingCost": {
"anyOf": [
{
"type": "number",
"minimum": 0,
"maximum": 1000000000,
"description": "Net shipping and fulfillment cost per order."
},
{
"type": "null"
}
],
"description": "User-supplied net shipping and fulfillment cost per order. Use null if unknown; do not substitute 0."
},
"paymentFeeRate": {
"anyOf": [
{
"type": "number",
"minimum": 0,
"maximum": 100,
"description": "Payment fee as a percentage, e.g. 3 means 3%, not 0.03."
},
{
"type": "null"
}
],
"description": "User-supplied payment fee percentage: 3 means 3%. Use null if unknown; do not substitute 0."
},
"refundRate": {
"anyOf": [
{
"type": "number",
"minimum": 0,
"maximum": 100,
"description": "Revenue reserved for refunds as a percentage; this is a simplified reserve."
},
{
"type": "null"
}
],
"description": "User-supplied refund reserve percentage. Use null if unknown; do not substitute 0."
},
"targetProfit": {
"anyOf": [
{
"type": "number",
"minimum": 0,
"maximum": 1000000000,
"description": "Desired contribution per order after advertising. Supply 0 for break-even only."
},
{
"type": "null"
}
],
"description": "User-supplied desired profit per order, or 0 when the user requests break-even only. Use null if unknown."
}
},
"required": [
"currency",
"price",
"productCost",
"shippingCost",
"paymentFeeRate",
"refundRate",
"targetProfit"
],
"$schema": "https://json-schema.org/draft/2020-12/schema",
"additionalProperties": false
}Output Schema
{
"type": "object",
"properties": {
"status": {
"type": "string",
"enum": [
"complete",
"needs_input"
]
},
"estimate": {
"type": "object",
"properties": {
"currency": {
"type": "string"
},
"basis": {
"type": "string",
"const": "user_supplied_estimates"
},
"inputs": {
"type": "object",
"properties": {
"currency": {
"type": "string",
"pattern": "^[A-Z]{3}$",
"description": "ISO 4217 currency code; all amounts must use this currency."
},
"price": {
"type": "number",
"exclusiveMinimum": 0,
"maximum": 1000000000,
"description": "Revenue per order after discounts, excluding collected taxes."
},
"productCost": {
"type": "number",
"minimum": 0,
"maximum": 1000000000,
"description": "Product cost per order, including any allocated costs you want to model."
},
"shippingCost": {
"type": "number",
"minimum": 0,
"maximum": 1000000000,
"description": "Net shipping and fulfillment cost per order."
},
"paymentFeeRate": {
"type": "number",
"minimum": 0,
"maximum": 100,
"description": "Payment fee as a percentage, e.g. 3 means 3%, not 0.03."
},
"refundRate": {
"type": "number",
"minimum": 0,
"maximum": 100,
"description": "Revenue reserved for refunds as a percentage; this is a simplified reserve."
},
"targetProfit": {
"type": "number",
"minimum": 0,
"maximum": 1000000000,
"description": "Desired contribution per order after advertising. Supply 0 for break-even only."
}
},
"required": [
"currency",
"price",
"productCost",
"shippingCost",
"paymentFeeRate",
"refundRate",
"targetProfit"
],
"additionalProperties": false
},
"metrics": {
"type": "object",
"properties": {
"revenue": {
"type": "number"
},
"paymentFee": {
"type": "number"
},
"refundReserve": {
"type": "number"
},
"totalVariableCost": {
"type": "number"
},
"contributionBeforeAds": {
"type": "number"
},
"breakEvenRoas": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
]
},
"targetProfitRoas": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
]
},
"maxCpa": {
"type": "number"
},
"targetCpa": {
"type": "number"
},
"marginBeforeAdsRate": {
"type": "number"
}
},
"required": [
"revenue",
"paymentFee",
"refundReserve",
"totalVariableCost",
"contributionBeforeAds",
"breakEvenRoas",
"targetProfitRoas",
"maxCpa",
"targetCpa",
"marginBeforeAdsRate"
],
"additionalProperties": false
},
"breakEvenFeasible": {
"type": "boolean"
},
"targetProfitFeasible": {
"type": "boolean"
},
"assumptions": {
"type": "array",
"items": {
"type": "string"
}
},
"unknowns": {
"type": "array",
"items": {
"type": "string"
}
},
"warnings": {
"type": "array",
"items": {
"type": "string"
}
}
},
"required": [
"currency",
"basis",
"inputs",
"metrics",
"breakEvenFeasible",
"targetProfitFeasible",
"assumptions",
"unknowns",
"warnings"
],
"additionalProperties": false
},
"missingInputs": {
"type": "object",
"properties": {
"fields": {
"type": "array",
"items": {
"type": "string",
"enum": [
"currency",
"price",
"productCost",
"shippingCost",
"paymentFeeRate",
"refundRate",
"targetProfit"
]
}
},
"questions": {
"type": "array",
"items": {
"type": "string"
}
}
},
"required": [
"fields",
"questions"
],
"additionalProperties": false
}
},
"required": [
"status"
],
"$schema": "https://json-schema.org/draft/2020-12/schema",
"additionalProperties": false
}🟢compare_profit_scenarios(scenarios)
Compare two to five user-supplied pricing or cost scenarios in one currency. Unknown inputs must be null, never guessed zeros or a default currency. If any scenario is incomplete, returns needs_input with labeled questions and no numeric comparison; ask for those inputs. Complete scenarios return contribution, maximum CPA and ROAS. Does not predict sales or change pricing or advertising.
Input Schema
{
"type": "object",
"properties": {
"scenarios": {
"minItems": 2,
"maxItems": 5,
"type": "array",
"items": {
"type": "object",
"properties": {
"label": {
"type": "string",
"minLength": 1,
"maxLength": 80
},
"inputs": {
"type": "object",
"properties": {
"currency": {
"anyOf": [
{
"type": "string",
"pattern": "^[A-Z]{3}$",
"description": "ISO 4217 currency code; all amounts must use this currency."
},
{
"type": "null"
}
],
"description": "User-supplied ISO 4217 currency code. Use null if unknown; never assume USD."
},
"price": {
"anyOf": [
{
"type": "number",
"exclusiveMinimum": 0,
"maximum": 1000000000,
"description": "Revenue per order after discounts, excluding collected taxes."
},
{
"type": "null"
}
],
"description": "User-supplied revenue per order after discounts and excluding collected taxes. Use null if unknown."
},
"productCost": {
"anyOf": [
{
"type": "number",
"minimum": 0,
"maximum": 1000000000,
"description": "Product cost per order, including any allocated costs you want to model."
},
{
"type": "null"
}
],
"description": "User-supplied product cost per order. Use null if unknown; use 0 only when the user explicitly supplied zero."
},
"shippingCost": {
"anyOf": [
{
"type": "number",
"minimum": 0,
"maximum": 1000000000,
"description": "Net shipping and fulfillment cost per order."
},
{
"type": "null"
}
],
"description": "User-supplied net shipping and fulfillment cost per order. Use null if unknown; do not substitute 0."
},
"paymentFeeRate": {
"anyOf": [
{
"type": "number",
"minimum": 0,
"maximum": 100,
"description": "Payment fee as a percentage, e.g. 3 means 3%, not 0.03."
},
{
"type": "null"
}
],
"description": "User-supplied payment fee percentage: 3 means 3%. Use null if unknown; do not substitute 0."
},
"refundRate": {
"anyOf": [
{
"type": "number",
"minimum": 0,
"maximum": 100,
"description": "Revenue reserved for refunds as a percentage; this is a simplified reserve."
},
{
"type": "null"
}
],
"description": "User-supplied refund reserve percentage. Use null if unknown; do not substitute 0."
},
"targetProfit": {
"anyOf": [
{
"type": "number",
"minimum": 0,
"maximum": 1000000000,
"description": "Desired contribution per order after advertising. Supply 0 for break-even only."
},
{
"type": "null"
}
],
"description": "User-supplied desired profit per order, or 0 when the user requests break-even only. Use null if unknown."
}
},
"required": [
"currency",
"price",
"productCost",
"shippingCost",
"paymentFeeRate",
"refundRate",
"targetProfit"
],
"additionalProperties": false
}
},
"required": [
"label",
"inputs"
],
"additionalProperties": false
}
}
},
"required": [
"scenarios"
],
"$schema": "https://json-schema.org/draft/2020-12/schema",
"additionalProperties": false
}Output Schema
{
"type": "object",
"properties": {
"status": {
"type": "string",
"enum": [
"complete",
"needs_input"
]
},
"scenarios": {
"type": "array",
"items": {
"type": "object",
"properties": {
"currency": {
"type": "string"
},
"basis": {
"type": "string",
"const": "user_supplied_estimates"
},
"inputs": {
"type": "object",
"properties": {
"currency": {
"type": "string",
"pattern": "^[A-Z]{3}$",
"description": "ISO 4217 currency code; all amounts must use this currency."
},
"price": {
"type": "number",
"exclusiveMinimum": 0,
"maximum": 1000000000,
"description": "Revenue per order after discounts, excluding collected taxes."
},
"productCost": {
"type": "number",
"minimum": 0,
"maximum": 1000000000,
"description": "Product cost per order, including any allocated costs you want to model."
},
"shippingCost": {
"type": "number",
"minimum": 0,
"maximum": 1000000000,
"description": "Net shipping and fulfillment cost per order."
},
"paymentFeeRate": {
"type": "number",
"minimum": 0,
"maximum": 100,
"description": "Payment fee as a percentage, e.g. 3 means 3%, not 0.03."
},
"refundRate": {
"type": "number",
"minimum": 0,
"maximum": 100,
"description": "Revenue reserved for refunds as a percentage; this is a simplified reserve."
},
"targetProfit": {
"type": "number",
"minimum": 0,
"maximum": 1000000000,
"description": "Desired contribution per order after advertising. Supply 0 for break-even only."
}
},
"required": [
"currency",
"price",
"productCost",
"shippingCost",
"paymentFeeRate",
"refundRate",
"targetProfit"
],
"additionalProperties": false
},
"metrics": {
"type": "object",
"properties": {
"revenue": {
"type": "number"
},
"paymentFee": {
"type": "number"
},
"refundReserve": {
"type": "number"
},
"totalVariableCost": {
"type": "number"
},
"contributionBeforeAds": {
"type": "number"
},
"breakEvenRoas": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
]
},
"targetProfitRoas": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
]
},
"maxCpa": {
"type": "number"
},
"targetCpa": {
"type": "number"
},
"marginBeforeAdsRate": {
"type": "number"
}
},
"required": [
"revenue",
"paymentFee",
"refundReserve",
"totalVariableCost",
"contributionBeforeAds",
"breakEvenRoas",
"targetProfitRoas",
"maxCpa",
"targetCpa",
"marginBeforeAdsRate"
],
"additionalProperties": false
},
"breakEvenFeasible": {
"type": "boolean"
},
"targetProfitFeasible": {
"type": "boolean"
},
"assumptions": {
"type": "array",
"items": {
"type": "string"
}
},
"unknowns": {
"type": "array",
"items": {
"type": "string"
}
},
"warnings": {
"type": "array",
"items": {
"type": "string"
}
},
"label": {
"type": "string"
}
},
"required": [
"currency",
"basis",
"inputs",
"metrics",
"breakEvenFeasible",
"targetProfitFeasible",
"assumptions",
"unknowns",
"warnings",
"label"
],
"additionalProperties": false
}
},
"missingInputs": {
"type": "array",
"items": {
"type": "object",
"properties": {
"fields": {
"type": "array",
"items": {
"type": "string",
"enum": [
"currency",
"price",
"productCost",
"shippingCost",
"paymentFeeRate",
"refundRate",
"targetProfit"
]
}
},
"questions": {
"type": "array",
"items": {
"type": "string"
}
},
"label": {
"type": "string"
}
},
"required": [
"fields",
"questions",
"label"
],
"additionalProperties": false
}
}
},
"required": [
"status"
],
"$schema": "https://json-schema.org/draft/2020-12/schema",
"additionalProperties": false
}🟢build_campaign_utm(url, source, medium, campaign, content, ...)
Format one HTTP(S) campaign URL with source, medium and campaign, plus optional content and term. Trims and lowercases UTM values and replaces whitespace with underscores. Returns naming warnings. Never visits the URL, sends a message, saves a campaign or changes tracking settings.
Input Schema
{
"type": "object",
"properties": {
"url": {
"type": "string",
"minLength": 1,
"maxLength": 2048,
"description": "Destination URL. This tool formats it locally and never fetches it."
},
"source": {
"type": "string",
"minLength": 1,
"maxLength": 120
},
"medium": {
"type": "string",
"minLength": 1,
"maxLength": 120
},
"campaign": {
"type": "string",
"minLength": 1,
"maxLength": 120
},
"content": {
"type": "string",
"minLength": 1,
"maxLength": 120
},
"term": {
"type": "string",
"minLength": 1,
"maxLength": 120
}
},
"required": [
"url",
"source",
"medium",
"campaign"
],
"$schema": "https://json-schema.org/draft/2020-12/schema",
"additionalProperties": false
}Output Schema
{
"type": "object",
"properties": {
"url": {
"type": "string"
},
"namingWarnings": {
"type": "array",
"items": {
"type": "object",
"properties": {
"code": {
"type": "string"
},
"field": {
"type": "string"
}
},
"required": [
"code",
"field"
],
"additionalProperties": false
}
},
"normalization": {
"type": "string"
},
"fetched": {
"type": "boolean",
"const": false
}
},
"required": [
"url",
"namingWarnings",
"normalization",
"fetched"
],
"$schema": "https://json-schema.org/draft/2020-12/schema",
"additionalProperties": false
}🟢search_ecommerce_resources(query, locale, limit)
Search Ecomwith published tutorial metadata, internal tool descriptions and public answer summaries in English or Chinese. Returns up to ten source links with content access labels. Does not search the wider web, fetch websites or return paid lesson bodies, drafts or customer data.
Input Schema
{
"type": "object",
"properties": {
"query": {
"type": "string",
"minLength": 2,
"maxLength": 160
},
"locale": {
"default": "en",
"type": "string",
"enum": [
"en",
"zh"
]
},
"limit": {
"default": 5,
"type": "integer",
"minimum": 1,
"maximum": 10
}
},
"required": [
"query"
],
"$schema": "https://json-schema.org/draft/2020-12/schema",
"additionalProperties": false
}Output Schema
{
"type": "object",
"properties": {
"items": {
"type": "array",
"items": {
"type": "object",
"properties": {
"kind": {
"type": "string",
"enum": [
"tutorial",
"tool",
"answer"
]
},
"title": {
"type": "string"
},
"summary": {
"type": "string"
},
"url": {
"type": "string"
},
"contentAccess": {
"type": "string"
}
},
"required": [
"kind",
"title",
"summary",
"url",
"contentAccess"
],
"additionalProperties": false
}
},
"scope": {
"type": "string"
},
"locale": {
"type": "string",
"enum": [
"en",
"zh"
]
}
},
"required": [
"items",
"scope",
"locale"
],
"$schema": "https://json-schema.org/draft/2020-12/schema",
"additionalProperties": false
}🟢list_public_weekly_reports(locale, limit)
List up to ten Ecomwith published or corrected ecommerce reports with public summaries and dates. Does not return drafts, withdrawn issues, member-only sections, subscriber data or unpublished research. These are dated editorial reports, not a live news feed.
Input Schema
{
"type": "object",
"properties": {
"locale": {
"default": "en",
"type": "string",
"enum": [
"en",
"zh"
]
},
"limit": {
"default": 5,
"type": "integer",
"minimum": 1,
"maximum": 10
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema",
"additionalProperties": false
}Output Schema
{
"type": "object",
"properties": {
"items": {
"type": "array",
"items": {
"type": "object",
"properties": {
"slug": {
"type": "string"
},
"title": {
"type": "string"
},
"summary": {
"type": "string"
},
"url": {
"type": "string"
},
"status": {
"type": "string",
"enum": [
"published",
"corrected"
]
},
"publishedAt": {
"type": "string"
},
"updatedAt": {
"type": "string"
}
},
"required": [
"slug",
"title",
"summary",
"url",
"status",
"publishedAt",
"updatedAt"
],
"additionalProperties": false
}
},
"locale": {
"type": "string",
"enum": [
"en",
"zh"
]
}
},
"required": [
"items",
"locale"
],
"$schema": "https://json-schema.org/draft/2020-12/schema",
"additionalProperties": false
}🟢get_public_weekly_report(slug, locale)
Read guest excerpts and cited source links for one published or corrected Ecomwith weekly report, using a slug returned by list_public_weekly_reports. Retain publication and correction dates and each cited source verificationStatus label; do not upgrade weaker evidence. Rechecks publication state each call. A withdrawn, unpublished, missing or unavailable-language report is not returned. No member content or private research notes are accessible.
Input Schema
{
"type": "object",
"properties": {
"slug": {
"type": "string",
"minLength": 1,
"maxLength": 160,
"pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
},
"locale": {
"default": "en",
"type": "string",
"enum": [
"en",
"zh"
]
}
},
"required": [
"slug"
],
"$schema": "https://json-schema.org/draft/2020-12/schema",
"additionalProperties": false
}Output Schema
{
"type": "object",
"properties": {
"report": {
"type": "object",
"properties": {
"slug": {
"type": "string"
},
"title": {
"type": "string"
},
"summary": {
"type": "string"
},
"url": {
"type": "string"
},
"status": {
"type": "string",
"enum": [
"published",
"corrected"
]
},
"publishedAt": {
"type": "string"
},
"updatedAt": {
"type": "string"
},
"sections": {
"type": "array",
"items": {
"type": "object",
"properties": {
"title": {
"type": "string"
},
"text": {
"type": "string"
}
},
"required": [
"title",
"text"
],
"additionalProperties": false
}
},
"sources": {
"type": "array",
"items": {
"type": "object",
"properties": {
"title": {
"type": "string"
},
"url": {
"type": "string"
},
"verificationStatus": {
"type": "string"
}
},
"required": [
"title",
"url",
"verificationStatus"
],
"additionalProperties": false
}
}
},
"required": [
"slug",
"title",
"summary",
"url",
"status",
"publishedAt",
"updatedAt",
"sections",
"sources"
],
"additionalProperties": false
}
},
"required": [
"report"
],
"$schema": "https://json-schema.org/draft/2020-12/schema",
"additionalProperties": false
}Community
Evidence