Labsco
MCP SERVER

Arithmetic a model cannot fudge: decimal-exact calculation across 18 domains, with the rounding mode named on every call and a trace showing how the number was reached.

Time, Dates & Calculation
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