{"name":"com.moltlinestudio/dropship","slug":"moltlinestudio-dropship","title":"Moltline Dropship Economics","description":"Margin, lead time, SKU mapping and price-ladder maths for dropshipping. 4 of 6 free.","url":"https://mcp.market/server/moltlinestudio-dropship","rating":null,"grade":"A","score":87,"certified":false,"status":"active","category":"sales","tags":["sales"],"presence":{"score":23,"stars":0,"forks":0,"downloads_week":null,"last_push_at":"2026-09-19T15:00:29.000Z","license":"MIT"},"uptime":{"percent":100,"checks":2,"ok":2,"last_checked_at":"2026-09-19T21:40:45.702Z","last_ok_at":"2026-09-19T21:40:45.702Z","latency_ms":315},"claimed":false,"transport":"remote","callable_via_gateway":true,"default_price_micros":0,"repository":"https://github.com/GarphenGate/moltline-mcp","website":"https://moltlinestudio.com/servers.html#dropship","version":"1.2.0","remotes":[{"type":"streamable-http","url":"https://mcp.moltlinestudio.com/dropship"}],"packages":[],"tools":[{"name":"lead_time","description":"Turn supplier and transit times into a date you can promise. FREE.\n\nAdds a buffer, because the number a supplier quotes is their best case and\nthe date you publish is a commitment. Typical input {\"supplier_days\": 3,\n\"transit_days\": 12, \"order_date\": \"2026-08-20\"} returns {\"total_days\": 17,\n\"delivery_date\": \"2026-09-06\", \"promise_date\": \"2026-09-09\",\n\"advice\": \"...\"}.\n\nUse when writing a shipping policy or answering \"when will it arrive\".\nNot 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.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"supplier_days":{"minimum":0,"type":"integer","description":"Days from your order to the supplier despatching it."},"transit_days":{"minimum":0,"type":"integer","description":"Days in transit from despatch to the customer."},"buffer_days":{"default":2,"minimum":0,"type":"integer","description":"Extra days added before the date you publish. Default 2."},"order_date":{"default":"","type":"string","description":"Start date as YYYY-MM-DD, e.g. \"2026-08-20\". Defaults to\ntoday when omitted."},"working_days_only":{"default":false,"type":"boolean","description":"When true, count supplier and transit days as\nMonday-Friday only. Default false."}},"required":["supplier_days","transit_days"],"additionalProperties":false}},{"name":"margin_check","description":"Show what one sale actually leaves after every cost. FREE.\n\nSubtracts supplier cost, shipping, payment fees, the ad spend that found\nthe buyer, and anything else — then reports the break-even price so you\nknow how much room there is. Typical input {\"sell_price\": 39.99,\n\"supplier_cost\": 12.4, \"shipping_cost\": 4.2, \"ad_cost_per_order\": 9}\nreturns {\"revenue\": 39.99, \"total_cost\": 27.06, \"profit\": 12.93,\n\"margin_pct\": 32.33, \"markup_pct\": 222.5, \"break_even_price\": 27.06,\n\"biggest_cost\": \"supplier_cost\"}.\n\nUse before listing a product. Not for a whole tiered price list — that is\nprice_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.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"sell_price":{"exclusiveMinimum":0,"type":"number","description":"What the customer pays, excluding tax. Must be above 0."},"supplier_cost":{"exclusiveMinimum":0,"type":"number","description":"What the supplier charges you per unit."},"shipping_cost":{"default":0,"minimum":0,"type":"number","description":"Shipping you absorb per order. Default 0."},"payment_fee_pct":{"default":2.9,"minimum":0,"type":"number","description":"Processor percentage fee. Default 2.9 — a common\npublished rate, not a statement about your account."},"payment_fee_fixed":{"default":0.3,"minimum":0,"type":"number","description":"Processor fixed fee per transaction. Default 0.30."},"ad_cost_per_order":{"default":0,"minimum":0,"type":"number","description":"Blended acquisition cost per order. Default 0,\nbut leaving it at 0 is the most common way this maths lies."},"other_cost":{"default":0,"minimum":0,"type":"number","description":"Anything else per order: packaging inserts, app fees,\nsupport time. Default 0."}},"required":["sell_price","supplier_cost"],"additionalProperties":false}},{"name":"moq_planner","description":"Decide how much to order against demand, lead time and the cash you have. PREMIUM (license).\n\nA minimum order quantity is a cash-flow decision disguised as a purchasing\none. Typical input {\"unit_cost\": 4.2, \"moq\": 500, \"monthly_demand\": 120,\n\"cash_available\": 3000, \"lead_time_days\": 45} returns {\"moq_cost\": 2100.0,\n\"months_of_cover\": 4.17, \"affordable\": true, \"cash_after\": 900.0,\n\"reorder_point_units\": 236, \"verdict\": \"...\"}.\n\nUse before committing to a supplier's minimum. Not for the margin each\nunit 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.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"unit_cost":{"exclusiveMinimum":0,"type":"number","description":"Cost per unit at the MOQ. Must be above 0."},"moq":{"minimum":1,"type":"integer","description":"The supplier's minimum order quantity, in units."},"monthly_demand":{"exclusiveMinimum":0,"type":"number","description":"Units you expect to sell per month. Must be above 0."},"cash_available":{"exclusiveMinimum":0,"type":"number","description":"Cash you can commit to stock right now."},"lead_time_days":{"default":30,"minimum":0,"type":"integer","description":"Days from placing the order to stock being sellable.\nDefault 30."},"safety_weeks":{"default":2,"minimum":0,"type":"number","description":"Weeks of demand held as buffer against a late delivery.\nDefault 2."}},"required":["unit_cost","moq","monthly_demand","cash_available"],"additionalProperties":false}},{"name":"price_ladder","description":"Work backwards from the margin you want to the price you must charge. FREE.\n\nSolves for price including the percentage fee, which is why it is not\nsimply cost divided by one minus margin. Typical input {\"supplier_cost\":\n12.4, \"target_margins_pct\": [30, 40, 50], \"shipping_cost\": 4.2} returns\n{\"rows\": [{\"target_margin_pct\": 30, \"price\": 25.99, \"total_cost\": 17.65,\n\"profit\": 8.34, \"actual_margin_pct\": 32.07}, ...]}.\n\nUse when setting a price list. Not for checking one price you already have\n— 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.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"supplier_cost":{"exclusiveMinimum":0,"type":"number","description":"Per-unit cost from the supplier. Must be above 0."},"target_margins_pct":{"items":{"type":"number"},"type":"array","description":"Margins to solve for, e.g. [30, 40, 50]. Each\nmust be above 0 and below 100."},"payment_fee_pct":{"default":2.9,"minimum":0,"type":"number","description":"Processor percentage fee. Default 2.9."},"payment_fee_fixed":{"default":0.3,"minimum":0,"type":"number","description":"Processor fixed fee. Default 0.30."},"shipping_cost":{"default":0,"minimum":0,"type":"number","description":"Shipping you absorb per order. Default 0."},"charm_ending":{"default":".99","type":"string","description":"Force prices to end in these cents, e.g. \".99\". Pass an\nempty string for exact prices. Default \".99\"."}},"required":["supplier_cost","target_margins_pct"],"additionalProperties":false}},{"name":"returns_impact","description":"Show what a return rate does to a margin that looked fine. PREMIUM (license).\n\nA 10% return rate does not cost 10% of profit. A returned order gives back\nthe refund, adds inbound shipping, and recovers only the goods — never the\nadvertising that found the buyer. Typical input {\"sell_price\": 39.99,\n\"unit_profit\": 13.23, \"unit_cost\": 12.4, \"return_rate_pct\": 8,\n\"restock_pct\": 70, \"return_shipping\": 6} returns {\"cost_per_return\":\n37.31, \"effective_profit\": 10.25, \"profit_lost_pct\": 22.56,\n\"break_even_return_rate_pct\": 35.46}.\n\nUse when a category's returns are high enough to argue about. Not for the\npre-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.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"sell_price":{"exclusiveMinimum":0,"type":"number","description":"Price the customer paid."},"unit_profit":{"type":"number","description":"Profit on one kept sale, from margin_check. May be\nnegative, which the result will make obvious."},"unit_cost":{"minimum":0,"type":"number","description":"What the goods themselves cost you — the only part a\nrestocked unit gives back. Advertising and fees do not return."},"return_rate_pct":{"maximum":100,"minimum":0,"type":"number","description":"Percentage of orders returned, e.g. 8."},"restock_pct":{"default":0,"maximum":100,"minimum":0,"type":"number","description":"Percentage of returned units resellable at full price.\nDefault 0, the conservative case."},"return_shipping":{"default":0,"minimum":0,"type":"number","description":"What an inbound return costs you. Default 0."},"refund_pct":{"default":100,"maximum":100,"minimum":0,"type":"number","description":"Percentage of the sale price refunded, e.g. 100 for a\nfull refund or 80 when a restocking fee is kept. Default 100."}},"required":["sell_price","unit_profit","unit_cost","return_rate_pct"],"additionalProperties":false}},{"name":"sku_map_check","description":"Find the breaks in a supplier-to-store SKU map before they ship. FREE.\n\nTwo store SKUs pointing at one supplier SKU is usually intentional; two\nsupplier SKUs claiming one store SKU is not, and it sends the wrong item.\nTypical input {\"mapping\": {\"STORE-1\": \"SUP-A\", \"STORE-2\": \"SUP-A\",\n\"STORE-3\": \"\"}} returns {\"ok\": false, \"count\": 3, \"empty_targets\":\n[\"STORE-3\"], \"shared_supplier_skus\": {\"SUP-A\": [\"STORE-1\", \"STORE-2\"]},\n\"whitespace_issues\": []}.\n\nUse before importing a mapping or handing one to a fulfilment app. Not for\nvalidating 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.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"mapping":{"additionalProperties":{"type":"string"},"type":"object","description":"Store SKU to supplier SKU, e.g. {\"STORE-1\": \"SUP-A\"}. At\nleast one entry."}},"required":["mapping"],"additionalProperties":false}}],"scan":{"score":87,"grade":"A","scanned_at":"2026-09-20T00:23:55.711Z","report":{"scannerVersion":"0.1.9","scannedAt":"2026-09-20T00:23:55.732Z","components":{"code":{"score":-1,"max":25,"notes":["remote-only server, no package to scan"]},"reliability":{"score":20,"max":20,"notes":["remote reachable in 376ms"]},"poisoning":{"score":15,"max":15,"notes":["6 tool descriptions checked"]},"auth":{"score":10,"max":15,"notes":["open endpoint, read-only tools"]},"maintenance":{"score":15,"max":15,"notes":["last push 0 days ago"]},"identity":{"score":5,"max":10,"notes":["namespace and repository owner differ","website matches verified namespace"]}},"findings":[],"inputs":{"probes":[{"url":"https://mcp.moltlinestudio.com/dropship","reachable":true,"authRequired":false,"latencyMs":376,"serverInfo":{"name":"moltline-dropship","version":"1.1.0"}}],"packages":[],"repo":{"found":true,"owner":"GarphenGate","repo":"moltline-mcp","archived":false,"pushedAt":"2026-09-19T15:00:29Z","stars":0,"forks":0,"openIssues":0,"ownerType":"User","ownerAvatarUrl":"https://avatars.githubusercontent.com/u/316633241?v=4","ownerCreatedAt":"2026-08-13T15:17:26Z","license":"MIT"},"icon":{"url":"https://moltlinestudio.com/icon-192.png","source":"registry","width":192,"height":192},"presence":{"stars":0,"forks":0,"downloadsWeek":null,"license":"MIT","lastPushAt":"2026-09-19T15:00:29.000Z","score":23}}}},"grade_history":[],"reviews":[]}