Dry Run

Monte Carlo cash-flow simulator for a small services business: odds of running short, and why.

사용해야 할까요

품질 및 안전성

A
설명 품질
100%
스키마 완전성
70%
이름 품질
87%
오염 위험
100%
권한 일치
100%
프로토콜 준수
100%

도구 정의와 프로토콜 준수에 대한 자동 분석을 기반으로 합니다.

컨텍스트 비용

~3,619토큰 (도구 정의)
~12.0 KB일반적인 응답 크기
상당한 주의 영향 (128k 컨텍스트의 2.83%)

이는 서버의 도구가 모델의 컨텍스트에 로드될 때마다 소비되는 대략적인 토큰 수입니다. 수치가 높을수록 다른 작업에 사용할 수 있는 주의가 줄어듭니다.

설치

원클릭 설치

`claude_desktop_config.json` 파일에 다음을 추가하세요:

{
  "mcpServers": {
    "dry-run": {
      "url": "https://mcp.modernmustardseed.com/dry-run"
    }
  }
}

원격 엔드포인트

https://mcp.modernmustardseed.com/dry-runstreamable-http

할 수 있는 일

도구 목록

도구 (3)

🟢 읽기 전용🟡 쓰기🔴 삭제⚪ 알 수 없음
🟢simulate_cash_year(preset, name, start_cash, credit_line, credit_drawn, ...)

Simulate the next 52 weeks of a small services business 10,000 times (Monte Carlo) and report the chance it runs short of money, the week that is most likely to happen, reachable money (bank balance plus unused credit) week by week at the 10th, 50th and 90th percentile, the drivers that separated the futures that ran short from the ones that survived, and the profit the business makes at its own averages. Start from a trade preset (excavation, plumbing, hvac, landscaping, roofing, or general) and override any input: cash, credit line, money owed to the business, work already sold, crews and their weekly cost, overhead, owner draw, monthly bills, enquiries, close rate, seasonality, job types with value, materials, deposit and payment terms, bad debt, tax, and random setbacks. Money is in dollars and rates are fractions (0.3 is 30 percent). The same inputs and seed always return the same answer. Pure arithmetic: no network access, nothing stored.

입력 스키마

{
  "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"
}
🟢rank_levers(preset, name, start_cash, credit_line, credit_drawn, ...)

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.

입력 스키마

{
  "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"
}
🟢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.

입력 스키마

{
  "type": "object",
  "properties": {},
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}

커뮤니티

이 서버 평가하기

증거

최근 관측

검증됨버전이 기록되지 않음도구 3개