MCP 서버

Moltline Dropship Economics

com.moltlinestudio/dropship
비즈니스 및 운영 커머스 및 리테일 공개 · 연결 가능 MCP 2025-11-25

이 MCP로 할 수 있는 일

Calculates dropshipping margins, pricing, lead times, order quantities, returns impact, and supplier-to-store SKU mapping issues.

lead_time
Lead Time
Turn supplier and transit times into a date you can promise. FREE. Adds a buffer, because the number a supplier quotes is their best case and the date you publish is a commitment. Typical input {"supplier_days": 3, "transit_days": 12, "order_date": "2026-08-20"} returns {"total_days": 17, "delivery_date": "2026-09-06", "promise_date": "2026-09-09", "advice": "..."}. Use when writing a shipping policy or answering "when will it arrive". Not for what the shipping costs — that is the shipping server. Errors: on invalid, missing, or malformed input this tool never raises a protocol error — it returns {"error": "<what is wrong and how to fix it>"} (for example {"error": "order_date must be YYYY-MM-DD, e.g. 2026-08-20"}). Every call is read-only and idempotent, so after correcting the input it is always safe to retry.
읽기 전용 멱등성
입력 스키마
{'type': 'object', 'required': ['supplier_days', 'transit_days'], 'properties': {'order_date': {'type': 'string', 'default': '', 'description': 'Start date as YYYY-MM-DD, e.g. "2026-08-20". Defaults to\ntoday when omitted.'}, 'buffer_days': {'type': 'integer', 'default': 2, 'minimum': 0, 'description': 'Extra days added before the date you publish. Default 2.'}, 'transit_days': {'type': 'integer', 'minimum': 0, 'description': 'Days in transit from despatch to the customer.'}, 'supplier_days': {'type': 'integer', 'minimum': 0, 'description': 'Days from your order to the supplier despatching it.'}, 'working_days_only': {'type': 'boolean', 'default': False, 'description': 'When true, count supplier and transit days as\nMonday-Friday only. Default false.'}}, 'additionalProperties': False}
출력 스키마
{'type': 'object', 'additionalProperties': True}
margin_check
Margin Check
Show what one sale actually leaves after every cost. FREE. Subtracts supplier cost, shipping, payment fees, the ad spend that found the buyer, and anything else — then reports the break-even price so you know how much room there is. Typical input {"sell_price": 39.99, "supplier_cost": 12.4, "shipping_cost": 4.2, "ad_cost_per_order": 9} returns {"revenue": 39.99, "total_cost": 27.06, "profit": 12.93, "margin_pct": 32.33, "markup_pct": 222.5, "break_even_price": 27.06, "biggest_cost": "supplier_cost"}. Use before listing a product. Not for a whole tiered price list — that is price_ladder — and not for the effect of returns, which is returns_impact. Errors: on invalid, missing, or malformed input this tool never raises a protocol error — it returns {"error": "<what is wrong and how to fix it>"}. Every call is read-only and idempotent, so after correcting the input it is always safe to retry.
읽기 전용 멱등성
입력 스키마
{'type': 'object', 'required': ['sell_price', 'supplier_cost'], 'properties': {'other_cost': {'type': 'number', 'default': 0, 'minimum': 0, 'description': 'Anything else per order: packaging inserts, app fees,\nsupport time. Default 0.'}, 'sell_price': {'type': 'number', 'description': 'What the customer pays, excluding tax. Must be above 0.', 'exclusiveMinimum': 0}, 'shipping_cost': {'type': 'number', 'default': 0, 'minimum': 0, 'description': 'Shipping you absorb per order. Default 0.'}, 'supplier_cost': {'type': 'number', 'description': 'What the supplier charges you per unit.', 'exclusiveMinimum': 0}, 'payment_fee_pct': {'type': 'number', 'default': 2.9, 'minimum': 0, 'description': 'Processor percentage fee. Default 2.9 — a common\npublished rate, not a statement about your account.'}, 'ad_cost_per_order': {'type': 'number', 'default': 0, 'minimum': 0, 'description': 'Blended acquisition cost per order. Default 0,\nbut leaving it at 0 is the most common way this maths lies.'}, 'payment_fee_fixed': {'type': 'number', 'default': 0.3, 'minimum': 0, 'description': 'Processor fixed fee per transaction. Default 0.30.'}}, 'additionalProperties': False}
출력 스키마
{'type': 'object', 'additionalProperties': True}
moq_planner
Moq Planner
Decide how much to order against demand, lead time and the cash you have. PREMIUM (license). A minimum order quantity is a cash-flow decision disguised as a purchasing one. Typical input {"unit_cost": 4.2, "moq": 500, "monthly_demand": 120, "cash_available": 3000, "lead_time_days": 45} returns {"moq_cost": 2100.0, "months_of_cover": 4.17, "affordable": true, "cash_after": 900.0, "reorder_point_units": 236, "verdict": "..."}. Use before committing to a supplier's minimum. Not for the margin each unit earns — that is margin_check. Errors: on invalid, missing, or malformed input this tool never raises a protocol error — it returns {"error": "<what is wrong and how to fix it>"}. Every call is read-only and idempotent, so after correcting the input it is always safe to retry.
읽기 전용 멱등성
입력 스키마
{'type': 'object', 'required': ['unit_cost', 'moq', 'monthly_demand', 'cash_available'], 'properties': {'moq': {'type': 'integer', 'minimum': 1, 'description': "The supplier's minimum order quantity, in units."}, 'unit_cost': {'type': 'number', 'description': 'Cost per unit at the MOQ. Must be above 0.', 'exclusiveMinimum': 0}, 'safety_weeks': {'type': 'number', 'default': 2, 'minimum': 0, 'description': 'Weeks of demand held as buffer against a late delivery.\nDefault 2.'}, 'cash_available': {'type': 'number', 'description': 'Cash you can commit to stock right now.', 'exclusiveMinimum': 0}, 'lead_time_days': {'type': 'integer', 'default': 30, 'minimum': 0, 'description': 'Days from placing the order to stock being sellable.\nDefault 30.'}, 'monthly_demand': {'type': 'number', 'description': 'Units you expect to sell per month. Must be above 0.', 'exclusiveMinimum': 0}}, 'additionalProperties': False}
출력 스키마
{'type': 'object', 'additionalProperties': True}
price_ladder
Price Ladder
Work backwards from the margin you want to the price you must charge. FREE. Solves for price including the percentage fee, which is why it is not simply cost divided by one minus margin. Typical input {"supplier_cost": 12.4, "target_margins_pct": [30, 40, 50], "shipping_cost": 4.2} returns {"rows": [{"target_margin_pct": 30, "price": 25.99, "total_cost": 17.65, "profit": 8.34, "actual_margin_pct": 32.07}, ...]}. Use when setting a price list. Not for checking one price you already have — that is margin_check. Errors: on invalid, missing, or malformed input this tool never raises a protocol error — it returns {"error": "<what is wrong and how to fix it>"} (for example {"error": "target_margins_pct must contain at least one margin"}). Every call is read-only and idempotent, so after correcting the input it is always safe to retry.
읽기 전용 멱등성
입력 스키마
{'type': 'object', 'required': ['supplier_cost', 'target_margins_pct'], 'properties': {'charm_ending': {'type': 'string', 'default': '.99', 'description': 'Force prices to end in these cents, e.g. ".99". Pass an\nempty string for exact prices. Default ".99".'}, 'shipping_cost': {'type': 'number', 'default': 0, 'minimum': 0, 'description': 'Shipping you absorb per order. Default 0.'}, 'supplier_cost': {'type': 'number', 'description': 'Per-unit cost from the supplier. Must be above 0.', 'exclusiveMinimum': 0}, 'payment_fee_pct': {'type': 'number', 'default': 2.9, 'minimum': 0, 'description': 'Processor percentage fee. Default 2.9.'}, 'payment_fee_fixed': {'type': 'number', 'default': 0.3, 'minimum': 0, 'description': 'Processor fixed fee. Default 0.30.'}, 'target_margins_pct': {'type': 'array', 'items': {'type': 'number'}, 'description': 'Margins to solve for, e.g. [30, 40, 50]. Each\nmust be above 0 and below 100.'}}, 'additionalProperties': False}
출력 스키마
{'type': 'object', 'additionalProperties': True}
returns_impact
Returns Impact
Show what a return rate does to a margin that looked fine. PREMIUM (license). A 10% return rate does not cost 10% of profit. A returned order gives back the refund, adds inbound shipping, and recovers only the goods — never the advertising that found the buyer. Typical input {"sell_price": 39.99, "unit_profit": 13.23, "unit_cost": 12.4, "return_rate_pct": 8, "restock_pct": 70, "return_shipping": 6} returns {"cost_per_return": 37.31, "effective_profit": 10.25, "profit_lost_pct": 22.56, "break_even_return_rate_pct": 35.46}. Use when a category's returns are high enough to argue about. Not for the pre-returns margin itself — that is margin_check. Errors: on invalid, missing, or malformed input this tool never raises a protocol error — it returns {"error": "<what is wrong and how to fix it>"}. Every call is read-only and idempotent, so after correcting the input it is always safe to retry.
읽기 전용 멱등성
입력 스키마
{'type': 'object', 'required': ['sell_price', 'unit_profit', 'unit_cost', 'return_rate_pct'], 'properties': {'unit_cost': {'type': 'number', 'minimum': 0, 'description': 'What the goods themselves cost you — the only part a\nrestocked unit gives back. Advertising and fees do not return.'}, 'refund_pct': {'type': 'number', 'default': 100, 'maximum': 100, 'minimum': 0, 'description': 'Percentage of the sale price refunded, e.g. 100 for a\nfull refund or 80 when a restocking fee is kept. Default 100.'}, 'sell_price': {'type': 'number', 'description': 'Price the customer paid.', 'exclusiveMinimum': 0}, 'restock_pct': {'type': 'number', 'default': 0, 'maximum': 100, 'minimum': 0, 'description': 'Percentage of returned units resellable at full price.\nDefault 0, the conservative case.'}, 'unit_profit': {'type': 'number', 'description': 'Profit on one kept sale, from margin_check. May be\nnegative, which the result will make obvious.'}, 'return_rate_pct': {'type': 'number', 'maximum': 100, 'minimum': 0, 'description': 'Percentage of orders returned, e.g. 8.'}, 'return_shipping': {'type': 'number', 'default': 0, 'minimum': 0, 'description': 'What an inbound return costs you. Default 0.'}}, 'additionalProperties': False}
출력 스키마
{'type': 'object', 'additionalProperties': True}
sku_map_check
Sku Map Check
Find the breaks in a supplier-to-store SKU map before they ship. FREE. Two store SKUs pointing at one supplier SKU is usually intentional; two supplier SKUs claiming one store SKU is not, and it sends the wrong item. Typical input {"mapping": {"STORE-1": "SUP-A", "STORE-2": "SUP-A", "STORE-3": ""}} returns {"ok": false, "count": 3, "empty_targets": ["STORE-3"], "shared_supplier_skus": {"SUP-A": ["STORE-1", "STORE-2"]}, "whitespace_issues": []}. Use before importing a mapping or handing one to a fulfilment app. Not for validating Shopify's CSV columns — that is the shopify server. Errors: on invalid, missing, or malformed input this tool never raises a protocol error — it returns {"error": "<what is wrong and how to fix it>"} (for example {"error": "mapping must contain at least one store SKU"}). Every call is read-only and idempotent, so after correcting the input it is always safe to retry.
읽기 전용 멱등성
입력 스키마
{'type': 'object', 'required': ['mapping'], 'properties': {'mapping': {'type': 'object', 'description': 'Store SKU to supplier SKU, e.g. {"STORE-1": "SUP-A"}. At\nleast one entry.', 'additionalProperties': {'type': 'string'}}}, 'additionalProperties': False}
출력 스키마
{'type': 'object', 'additionalProperties': True}
추가됨
returns_impact
2026년 9월 17일 12:36 PM
추가됨
moq_planner
2026년 9월 17일 12:36 PM
추가됨
price_ladder
2026년 9월 17일 12:36 PM
추가됨
sku_map_check
2026년 9월 17일 12:36 PM
추가됨
lead_time
2026년 9월 17일 12:36 PM
추가됨
margin_check
2026년 9월 17일 12:36 PM