MCP-Server

Moltline Merchant Maths

com.moltlinestudio/merchant
Business & Betrieb Payments & Fintech Öffentlich und erreichbar MCP 2025-11-25

Was dieses MCP kann

Calculates payment processor fees, charge-to-net pricing, invoice totals, discounts, installment schedules, proration, and refunds.

charge_to_net
Charge To Net
Compute the gross price to charge so you net a target after fees. FREE. 'Charge X to receive Y' after percentage + fixed processor fees. Typical input {"net_target": 100, "pct_fee": 2.9, "fixed_fee": 0.30} returns {"charge": 103.4, "fee": 3.4, "net": 100.0}. The inverse of processor_fees - solves for gross from a target net. Use when the payout is the fixed requirement. Not when the price is already set. 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": "net_target > 0 and pct_fee < 100 required"}). Every call is read-only and idempotent, so after correcting the input it is always safe to retry.
Nur Lesen Idempotent
Eingabeschema
{'type': 'object', 'required': ['net_target'], 'properties': {'pct_fee': {'type': 'number', 'default': 2.9, 'description': 'Processor percentage fee, below 100, e.g. 2.9 for 2.9%.\nDefault 2.9.', 'exclusiveMaximum': 100}, 'fixed_fee': {'type': 'number', 'default': 0.3, 'description': 'Processor fixed fee per charge. Default 0.30.'}, 'net_target': {'type': 'number', 'description': 'The amount you want to receive after fees; must be\ngreater than 0.', 'exclusiveMinimum': 0}}, 'additionalProperties': False}
Ausgabeschema
{'type': 'object', 'additionalProperties': True}
discount_stack
Discount Stack
Stack discounts correctly: sequential vs additive comparison. PREMIUM (license). The two methods differ — this shows both, the final price, and the true total discount. Typical input {"price": 200, "discounts_pct": [20, 10]} returns {"original": 200, "sequential_price": 144.0, "sequential_total_discount_pct": 28.0, "additive_price": 140.0, "difference": 4.0, "note": "..."}. Use when more than one discount applies and the order changes the answer. Not for a single discount inside an invoice (invoice_total). 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": "price > 0 and at least one discount required"}). Every call is read-only and idempotent, so after correcting the input it is always safe to retry.
Nur Lesen Idempotent
Eingabeschema
{'type': 'object', 'required': ['price', 'discounts_pct'], 'properties': {'price': {'type': 'number', 'description': 'Original price before discounts; must be greater than 0.', 'exclusiveMinimum': 0}, 'discounts_pct': {'type': 'array', 'items': {'type': 'number'}, 'minItems': 1, 'description': 'Discount percentages in the order applied, at least\none, e.g. [20, 10] for 20% then 10%.'}}, 'additionalProperties': False}
Ausgabeschema
{'type': 'object', 'additionalProperties': True}
installment_plan
Installment Plan
Split a total into an installment schedule with optional deposit. PREMIUM (license). Rounding remainders land on the final payment so the schedule always sums exactly. Typical input {"total": 1000, "installments": 3, "deposit_pct": 10} returns {"deposit": 100.0, "payments": [300.0, 300.0, 300.0], "check_sum": 1000.0}. Use when one total is paid across scheduled dates. Not for partial-period adjustments (proration). 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": "total > 0 and 1-36 installments"}). Every call is read-only and idempotent, so after correcting the input it is always safe to retry.
Nur Lesen Idempotent
Eingabeschema
{'type': 'object', 'required': ['total', 'installments'], 'properties': {'total': {'type': 'number', 'description': 'Full amount to split; must be greater than 0.', 'exclusiveMinimum': 0}, 'deposit_pct': {'type': 'number', 'default': 0, 'description': 'Optional upfront deposit as a percentage of total,\ne.g. 10 for 10%. Default 0.'}, 'installments': {'type': 'integer', 'maximum': 36, 'minimum': 1, 'description': 'Number of payments after the deposit; 1 to 36.'}}, 'additionalProperties': False}
Ausgabeschema
{'type': 'object', 'additionalProperties': True}
invoice_total
Invoice Total
Total an invoice: per-line totals, subtotal, discount, tax, grand total. FREE. Typical input {"line_items": [{"desc": "Design", "qty": 2, "unit_price": 50}], "tax_pct": 8.5, "discount_pct": 10} returns {"lines": [{"desc": "Design", "qty": 2, "unit_price": 50, "line_total": 100.0}], "subtotal": 100.0, "discount": 10.0, "tax": 7.65, "total": 97.65}. Use when several line items roll up with discount and tax. Not for one transaction's fees (processor_fees) and not for spreading a total over time (installment_plan). 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": "line_items must contain at least one item,"}). Every call is read-only and idempotent, so after correcting the input it is always safe to retry.
Nur Lesen Idempotent
Eingabeschema
{'type': 'object', 'required': ['line_items'], 'properties': {'tax_pct': {'type': 'number', 'default': 0, 'description': 'Tax percentage applied after the discount, e.g. 8.5.\nDefault 0.'}, 'line_items': {'type': 'array', 'items': {'type': 'object', 'additionalProperties': True}, 'minItems': 1, 'description': 'At least one line item object {"desc": str, "qty":\nnumber, "unit_price": number}; the first 100 items are used.'}, 'discount_pct': {'type': 'number', 'default': 0, 'description': 'Discount percentage applied to the subtotal.\nDefault 0.'}}, 'additionalProperties': False}
Ausgabeschema
{'type': 'object', 'additionalProperties': True}
processor_fees
Processor Fees
Break down payment-processor fees: fee, net, and effective rate. FREE. Uses editable presets for stripe/paypal/square/shopify (verify current rates) or your own custom_pct + custom_fixed. Typical input {"amount": 1000, "processor": "stripe", "transactions": 10} returns {"gross": 1000, "fee": 32.0, "net": 968.0, "effective_rate_pct": 3.2, "note": "..."}. Use when the charge amount is known and the net payout is the question. Not for the reverse: the gross needed to net a target is charge_to_net. 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": "amount must be > 0, transactions >= 1"}). Every call is read-only and idempotent, so after correcting the input it is always safe to retry.
Nur Lesen Idempotent
Eingabeschema
{'type': 'object', 'required': ['amount'], 'properties': {'amount': {'type': 'number', 'description': 'Total gross amount processed; must be greater than 0.', 'exclusiveMinimum': 0}, 'processor': {'enum': ['stripe', 'paypal', 'square', 'shopify', 'custom'], 'type': 'string', 'default': 'stripe', 'description': 'One of "stripe", "paypal", "square", "shopify", or\n"custom". Default "stripe".'}, 'custom_pct': {'type': 'number', 'default': 0, 'description': 'Percentage fee used when processor is "custom",\ne.g. 2.5 for 2.5%.'}, 'custom_fixed': {'type': 'number', 'default': 0, 'description': 'Fixed per-transaction fee used when processor is\n"custom", e.g. 0.25.'}, 'transactions': {'type': 'integer', 'default': 1, 'minimum': 1, 'description': 'How many transactions the amount is spread across;\nat least 1. Default 1.'}}, 'additionalProperties': False}
Ausgabeschema
{'type': 'object', 'additionalProperties': True}
proration
Proration
Compute a prorated charge or refund for a partial billing period. PREMIUM (license). Typical input {"amount_per_period": 90, "days_used": 10, "days_in_period": 30} returns {"days_used": 10, "days_in_period": 30, "prorated_charge": 30.0, "prorated_refund": 60.0, "answer": 30.0}. Use when a plan starts, ends, or changes mid-period. Not for splitting a full amount into scheduled payments (installment_plan). 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": "need amount > 0 and 0 <= days_used <= days_in_period"}). Every call is read-only and idempotent, so after correcting the input it is always safe to retry.
Nur Lesen Idempotent
Eingabeschema
{'type': 'object', 'required': ['amount_per_period', 'days_used'], 'properties': {'days_used': {'type': 'integer', 'minimum': 0, 'description': 'Days of the period consumed; 0 to days_in_period.'}, 'refund_mode': {'type': 'boolean', 'default': False, 'description': 'If true, "answer" is the refund amount instead of the\ncharge. Default false.'}, 'days_in_period': {'type': 'integer', 'default': 30, 'minimum': 1, 'description': 'Length of the billing period in days; at least 1.\nDefault 30.'}, 'amount_per_period': {'type': 'number', 'description': 'Full-period price; must be greater than 0.', 'exclusiveMinimum': 0}}, 'additionalProperties': False}
Ausgabeschema
{'type': 'object', 'additionalProperties': True}
Hinzugefügt
installment_plan
17. September 2026 12:36
Hinzugefügt
proration
17. September 2026 12:36
Hinzugefügt
discount_stack
17. September 2026 12:36
Hinzugefügt
invoice_total
17. September 2026 12:36
Hinzugefügt
charge_to_net
17. September 2026 12:36
Hinzugefügt
processor_fees
17. September 2026 12:36