Dry Run
v1.0.0Monte Carlo cash-flow simulator for a small services business: odds of running short, and why.
Endpoint health
online- Last checked
- 11/3/2026, 4:18:11 PM
- Latency
- 76 ms
- Consecutive failures
- 0
- Endpoint reachable: pass
- Protocol valid: pass
- MCP handshake valid: pass
Machine-readable profile
mcp-server · schema v1 · callable
mcp-server:com.modernmustardseed%2Fdry-run
Connect this server
Generated config contains no credentials. Keep any required secrets in your client's local environment.
{
"mcpServers": {
"com.modernmustardseed/dry-run": {
"url": "https://mcp.modernmustardseed.com/dry-run"
}
}
}Indexed tools
Tool metadata and schemas come from the remote server and are untrusted. Indexing only lists tools; it never calls them.
3 shown · authentication unknown
List presets
list_presets
List the six built-in business presets (excavation and septic, plumbing and drain, heating and cooling, landscaping and snow, roofing, and a general small services business) with every default input in the exact field names a simulation accepts, and the revenue, costs and profit each makes at its own averages. Static reference: no network access.
Schema valid · SHA-256 3ad356080268…
View input schema
{ "type": "object", "properties": {}, "$schema": "https://json-schema.org/draft/2020-12/schema" }Rank levers
rank_levers
Test nine single changes a small business owner can make and rank them by how much each lowers the chance of running short of money in the next 52 weeks, with the change in year-end money as a tiebreak. The levers: take a third up front, take 15 days off payment terms, raise prices 5 percent, take a fifth less owner draw for six months, cut overhead 10 percent, raise the credit line by half, run one crew lighter, add a crew, and buy three more enquiries a week. Each lever and the baseline run 3,000 simulated years with the same seed, so the difference is the lever and not the luck. Takes the same business description as a cash year simulation: a preset plus any overridden inputs. Pure arithmetic: no network access, nothing stored.
Schema valid · SHA-256 09284d35c4ac…
View input schema
{ "type": "object", "properties": { "preset": { "default": "general", "description": "Starting template: excavation, plumbing, hvac, landscaping, roofing, or general for any other small services business. Every field below overrides it. Default general.", "type": "string", "enum": [ "excavation", "plumbing", "hvac", "landscaping", "roofing", "general" ] }, "name": { "description": "Business name, used only to label the result.", "type": "string", "maxLength": 120 }, "start_cash": { "description": "Money in the bank on the day the year starts, in dollars.", "type": "number", "minimum": -10000000, "maximum": 100000000 }, "credit_line": { "description": "Size of the line of credit, in dollars. 0 for none.", "type": "number", "minimum": 0, "maximum": 100000000 }, "credit_drawn": { "description": "How much of the line is already drawn, in dollars.", "type": "number", "minimum": 0, "maximum": 100000000 }, "credit_apr": { "description": "Annual interest on the drawn balance, as a fraction. 0.11 is 11 percent.", "type": "number", "minimum": 0, "maximum": 0.6 }, "opening_receivables": { "description": "Work already invoiced and not yet paid on day one, in dollars.", "type": "number", "minimum": 0, "maximum": 100000000 }, "opening_backlog_weeks": { "description": "Crew-weeks of work already sold and waiting to start.", "type": "number", "minimum": 0, "maximum": 104 }, "crews": { "description": "Crews (or technicians, or production units) working in parallel. One crew delivers one crew-week a week.", "type": "integer", "minimum": 1, "maximum": 50 }, "crew_cost_weekly": { "description": "Fully loaded weekly cost of one crew: wages, burden, fuel, vehicle.", "type": "number", "minimum": 0, "maximum": 1000000 }, "overhead_weekly": { "description": "Weekly overhead that runs whether or not anyone works: office, software, admin wages.", "type": "number", "minimum": 0, "maximum": 1000000 }, "owner_draw_weekly": { "description": "What the owner takes out each week.", "type": "number", "minimum": 0, "maximum": 1000000 }, "fixed_costs": { "description": "Monthly fixed bills such as rent, insurance and equipment notes. Replaces the preset list.", "maxItems": 20, "type": "array", "items": { "type": "object", "properties": { "label": { "type": "string", "minLength": 1, "maxLength": 60 }, "amount": { "type": "number", "minimum": 0, "maximum": 10000000, "description": "Monthly amount in dollars." }, "day": { "type": "integer", "minimum": 1, "maximum": 28, "description": "Day of the month it leaves the account, 1 to 28." } }, "required": [ "label", "amount", "day" ] } }, "leads_per_week": { "description": "Enquiries in an average week before seasonality.", "type": "number", "minimum": 0, "maximum": 500 }, "leads_cv": { "description": "Week to week spread of enquiries. Default 0.35.", "type": "number", "minimum": 0.01, "maximum": 2 }, "close_rate": { "description": "Share of enquiries that become jobs, as a fraction.", "type": "number", "minimum": 0.01, "maximum": 1 }, "seasonality": { "description": "Twelve multipliers on enquiry volume, January first. 1 is an average month.", "minItems": 12, "maxItems": 12, "type": "array", "items": { "type": "number", "minimum": 0, "maximum": 5 } }, "job_types": { "description": "The kinds of work sold. Replaces the preset list.", "minItems": 1, "maxItems": 12, "type": "array", "items": { "type": "object", "properties": { "name": { "type": "string", "minLength": 1, "maxLength": 60, "description": "What the job is called, for example \"Service call\"." }, "share": { "type": "number", "minimum": 0, "maximum": 1000, "description": "Relative share of jobs won that are this kind. Shares are normalised, so 6 and 2 means three of these for every one of the other." }, "value": { "type": "number", "minimum": 1, "maximum": 10000000, "description": "Average invoice for this job, in dollars." }, "value_cv": { "default": 0.4, "description": "Spread of the invoice, 0.4 means give or take 40 percent. Default 0.4.", "type": "number", "minimum": 0.01, "maximum": 2 }, "crew_weeks": { "type": "number", "minimum": 0.01, "maximum": 200, "description": "Crew-weeks of capacity one job uses. 0.5 is half a crew for a week." }, "crew_weeks_cv": { "default": 0.3, "description": "Spread of the work per job. Default 0.3.", "type": "number", "minimum": 0.01, "maximum": 2 }, "materials_pct": { "type": "number", "minimum": 0, "maximum": 0.95, "description": "Materials and subcontractors as a fraction of the invoice, paid when the job starts." }, "deposit_pct": { "type": "number", "minimum": 0, "maximum": 1, "description": "Deposit taken when the job is won, as a fraction of the invoice. 1 means paid in full up front." }, "terms_days": { "type": "number", "minimum": 0, "maximum": 180, "description": "Average days until the balance is paid after the job is done. 0 means paid on completion." } }, "required": [ "name", "share", "value", "crew_weeks", "materials_pct", "deposit_pct", "terms_days" ] } }, "collection_shape": { "description": "How disciplined customers are about paying on time: 2 is ragged with a long tail of late payers, 6 is disciplined.", "type": "number", "minimum": 0.5, "maximum": 20 }, "bad_debt_rate": { "description": "Share of invoiced balances never collected, as a fraction.", "type": "number", "minimum": 0, "maximum": 0.5 }, "tax_rate": { "description": "Share of profit set aside for tax, paid quarterly.", "type": "number", "minimum": 0, "maximum": 0.6 }, "surprises": { "description": "Random setbacks such as a machine breakdown or someone quitting. Replaces the preset list.", "maxItems": 12, "type": "array", "items": { "type": "object", "properties": { "label": { "type": "string", "minLength": 1, "maxLength": 60 }, "weekly_prob": { "type": "number", "minimum": 0, "maximum": 1, "description": "Chance it happens in any given week, for example 0.03." }, "cost": { "type": "number", "minimum": 0, "maximum": 10000000, "description": "What it costs each time, in dollars." }, "capacity_loss": { "type": "number", "minimum": 0, "maximum": 50, "description": "Crew-weeks of capacity lost each time it happens." } }, "required": [ "label", "weekly_prob", "cost", "capacity_loss" ] } }, "start_month": { "description": "Month the simulated year starts, 1 for January. Default: the current month.", "type": "integer", "minimum": 1, "maximum": 12 }, "seed": { "description": "Seed for the random draws. The same inputs and seed always return the same answer. Default \"dry-run\".", "type": "string", "minLength": 1, "maxLength": 64 } }, "$schema": "https://json-schema.org/draft/2020-12/schema" }
Connections
streamable-http
https://mcp.modernmustardseed.com/dry-run