# Moltline Dropship Economics

> Margin, lead time, SKU mapping and price-ladder maths for dropshipping. 4 of 6 free.

- name: com.moltlinestudio/dropship
- version: 1.2.0
- connection class: R0 (autonomous)
- trust: 84/100 flags: duplicate-repo
- quality: 91/100 (strong)
- owner: not claimed
- descriptor: https://api.protogrid.dev/v1/servers/com.moltlinestudio%2Fdropship
- tools: https://api.protogrid.dev/v1/servers/com.moltlinestudio%2Fdropship/tools

**An agent can connect right now, no human step.** Remote endpoint, no authentication, reachable on the last probe.

## Connection (mcpServers)

```json
{
  "mcpServers": {
    "dropship": {
      "type": "http",
      "url": "https://mcp.moltlinestudio.com/dropship"
    }
  }
}
```


## Trust

- hygiene: 60
- liveness: 97
- freshness: 85
- provenance: 85
- drivers: +repository +dns-namespace +website +reachable +uptime-94% ~updated-42d-ago -duplicate-repo(22 names)
- Derived from observable signals (official registry feed and our own credential-free probes); no code audit performed.

## Quality 91/100 (strong)

### protocol: 75 (weight 25)

- warn `protocol.modern`: newest supported version is 2025-11-25; 2026-07-28 not supported, older versions are deprecated until 2027-07-28
- n/a `protocol.stateless`: only applies to 2026-07-28 servers
- pass `protocol.transport`: streamable HTTP
- n/a `protocol.list_ttl`: only applies to 2026-07-28 servers

### authorization: n/a (weight 15)

- n/a `auth.prm`, `auth.as_metadata`, `auth.cimd`: no remote uses OAuth
- n/a `auth.secret_in_url`: no templated URL

### tool hygiene: 100 (weight 30)

- pass `tools.descriptions`: every tool has a description
- pass `tools.description_length`: descriptions are concise
- pass `tools.schemas`: every tool has an object input schema
- pass `tools.annotations`: 6 of 6 tools declare readOnlyHint or destructiveHint
- pass `tools.directory_hints`: every tool declares readOnlyHint, destructiveHint, idempotentHint and openWorldHint
- pass `tools.token_cost`: about 2,734 tokens to load every tool
- pass `tools.api_dump`: tools are not a one-to-one API dump

### stability: 100 (weight 15)

- pass `stability.changes`: no tool changes in 30 days
- pass `stability.rug_pull`: no tool changed its meaning under the same name

### dependencies: n/a (weight 15)

- n/a `deps.known_vulns`, `deps.mcp_sdk_version`, `deps.resolvable`: no npm or PyPI package

- tools: 6, about 2,734 tokens to load them all
- tool set hash: 675463fec20bc4029210dc5c6300b422
- badge: [![protogrid quality](https://protogrid.dev/badge/com.moltlinestudio/dropship.svg)](https://protogrid.dev/servers/com.moltlinestudio/dropship)
- Checks run on what our credential-free, read-only probes observe; tools are never called and no code audit is performed.

### Tool changes

_No tool definition changes recorded._

## Remotes

- https://mcp.moltlinestudio.com/dropship (streamable-http, auth none, reachable true, uptime30d 0.9369369)

## Packages

_none_

## Tools (6)

- `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.
- `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.
- `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.
- `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.
- `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.
- `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.
