core.addLABSCO SUMMARY
The trace is what makes the answer usable, not just correct.
Every response carries the formula, the inputs it actually used, the unrounded intermediate value and the rounded output — so a tax figure can be shown to an accountant rather than asserted. Naming the rounding mode on every call is the second half of that: HALF_EVEN and HALF_UP disagree at exactly the boundaries where a filing gets rejected.
What it is
A calculation server with a Decimal-only kernel. Input JSON is parsed straight to Decimal so no float ever reaches a formula, the rounding mode is a required argument rather than a default, and every response carries a trace with the formula, the inputs, the intermediate steps and the output.
What you get
- core.add, core.sub, core.mul and core.calc — the arithmetic the model should not be doing itself
- core.batch runs independent calculations in parallel and re-sorts results by input id, so the same request gives the same order every time
- core.pipeline chains dependent steps as a DAG — annual salary into tax into net pay in one round trip — with core.pipeline_resume to pick up a stopped run
- finance.npv, finance.irr, finance.loan_schedule, finance.black_scholes, finance.bond_ytm and finance.bond_duration
- tax.kr_income, tax.progressive and tax.capital_gains_kr, plus payroll.kr_salary folding social insurance and local income tax into one trace
- accounting.vat_add and accounting.vat_extract, realestate.kr_acquisition_tax, realestate.kr_dsr and the rest of the Korean property set
- Probability and stats: distribution pdf/cdf/ppf, t-tests, ANOVA, regression and confidence intervals
- Engineering, science, medical, geometry, datetime, units, crypto and math domains alongside them
- sootool.skill_guide returns the trigger table and playbook, so the client can look up a tool's arguments without leaving the session
Requirements
Python 3.12 or newer, installed with uv. Numeric arguments are passed as decimal strings, and Korean tax and property tools require the year explicitly — the policy file for that year is checked against its SHA-256 before it loads. Binds to 127.0.0.1 by default; exposing it beyond localhost requires a bearer token. The ten policy-administration tools stay inert unless SOOTOOL_ADMIN_MODE is set.
Setup effort
One command — uvx sootool
USE CASES
Producing a number someone will have to defend
Run the calculation and keep the trace: formula, inputs, unrounded value, rounded result.
Running payroll for a whole team at once
Send one batch of independent calculations and get them back in input order rather than completion order.
Chaining a calculation that depends on the previous step
Describe the dependency as a DAG — monthly pay to annual to tax — and get the whole chain in one call.
Getting Korean tax right for a specific year
Pass the year explicitly and let the year's policy file, integrity-checked before loading, supply the brackets.
Reconciling VAT across a pile of invoices
Extract or add VAT with the rounding mode stated, so the totals match the ledger rather than nearly matching it.
Updating a rule when the law changes
Propose the new policy, activate it, and roll back if it turns out wrong — with the history kept.
101 tools
Listed in project docs. Your client may show a different list.
core.subcore.mulcore.divcore.calccore.batchcore.pipelinecore.pipeline_resumemath.integrate_simpsonmath.integrate_gauss_legendremath.diff_centralmath.diff_five_pointmath.interpolate_linearmath.interpolate_cubic_splinemath.polynomial_rootsmath.polynomial_hornermath.fftmath.ifftcrypto.gcdcrypto.lcmcrypto.hashcrypto.is_primecrypto.modinvcrypto.modpowcrypto.egcdcrypto.crtcrypto.euler_totientcrypto.carmichael_lambdapm.critical_pathpm.evmpm.pertpm.earned_schedulepm.monte_carlo_schedulepayroll.kr_net_monthlypayroll.kr_severance_paypayroll.kr_year_end_tax_settlementpayroll.kr_bonus_taxpayroll.hourly_to_monthly_netunits.convertunits.fx_convertunits.fx_triangulateunits.temperatureunits.energy_convertunits.pressure_convertunits.data_size_convertunits.time_small_convertmedical.bmimedical.bsamedical.dose_weight_basedmedical.egfrmedical.pregnancy_weeksmedical.cha2ds2_vascmedical.has_bledmedical.framingham_cvd_10ymedical.qtc_bazettscience.half_lifescience.ideal_gasscience.molar_massscience.stoichiometryscience.nernstscience.faraday_electrolysisscience.battery_capacityscience.snell_lawscience.thin_lensscience.braggscience.intensityaccounting.vat_extractaccounting.vat_addaccounting.balancefinance.pvfinance.fvfinance.npvfinance.irrfinance.loan_schedulefinance.bond_ytmfinance.bond_durationfinance.black_scholesfinance.var_parametricfinance.sharpetax.progressivetax.kr_incometax.kr_withholding_simpletax.capital_gains_krtax.kr_local_income_taxtax.kr_education_tax_addtax.kr_rural_special_taxrealestate.kr_ltvrealestate.kr_dtirealestate.kr_dsrrealestate.kr_acquisition_taxrealestate.kr_transfer_taxrealestate.rental_yieldstats.descriptivestats.chi_square_independencestats.ci_meanstats.regression_linearstats.anovastats.correlationengineering.fluid_reynoldsengineering.si_prefix_convertsootool.skill_guideBEFORE YOU INSTALL
What to know first
Tools you get
101 tools named in the project's documentation.
Requires
uvx on PATH
INSTALLATION
Connect your client
Add the block to your client, or run the command directly.
Server setup
Configuration file
{
"mcpServers": {
"sootool": {
"command": "uvx",
"args": [
"sootool"
]
}
}
}uvx
uvx sootool