mcpField
S
SooTool

SooTool

本地服务
github.com/JinHo-von-Choi金融数据83 天前更新

关于 SooTool

SooTool 是面向税务、金融、会计、统计、工程等领域的确定性计算 MCP 服务、命令行工具和 Python SDK。它使用 Decimal 运算,支持按生效日期选择政策数据,并返回计算轨迹和可验证凭证,便于 Agent 检查结果。

主要功能

  1. 01基于 Decimal 的确定性计算
  2. 02按生效日期选择政策
  3. 03返回计算轨迹与完整性凭证
  4. 04批量与管线计算
  5. 05286 个计算及管理工具
  6. 06支持 MCP、命令行和 Python SDK

适用场景

  1. 01计算韩国税务与薪资金额
  2. 02批量运行金融情景和敏感性分析
  3. 03检查并验证计算步骤
  4. 04通过 Agent 执行工程或统计计算

MCP 相关

通过 stdio、Streamable HTTP 和 Unix 套接字向 MCP 客户端提供计算工具。客户端可使用完整工具集,或选择精简的发现与调用配置。

配置

本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。

mcp.json · 通用配置
{
"mcpServers": {
"jinho-von-choi-sootool": {
"command": "uvx",
"args": [
"sootool"
]
}
}
}
启动命令uvx sootool

本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。

安装包
pypisootool0.3.1

工具

286

收录的工具列表 · 更新于 2 天前

参数类型必填说明
entriesarray是

详细介绍

SooTool 徽标

SooTool

供 LLM 工具调用使用的精密计算 MCP。

CI PyPI version Python 3.12+ License: MIT

一个替代 LLM 执行计算的 MCP 服务。它使用 Decimal 精确执行税务、薪资、金融、统计和工程计算,并返回计算依据。提供 18 个计算领域的 276 个基础工具、10 个 admin 策略工具、一次最多 500 项并行计算(core.batch)、分步串联计算(core.pipeline)以及 4 种传输方式(stdio/Streamable HTTP/Unix,弃用中的 SSE)。需要 Python 3.12 或更高版本。

为什么需要

LLM 不会计算数字,而是生成看似合理的数字。因此,它们经常在累进税档边界、舍入方向和各年度税率上出错。以下是对同样 20 道题的解答结果(测于 2026-04-24)。

解题方正确(精确)近似(误差在 0.01% 以内)错误
SooTool2000
gemini-3-pro-preview1244
claude-opus-4-7938
gpt-5.45312

不同模型的常见错误大同小异:所得税档位边界、资本利得税长期持有特别扣除、增值税舍入以及交流阻抗精度。题目构成和原始资料见 bench/。

SooTool 通过三种机制确保计算准确。

  • 仅使用 Decimal 计算。 输入数字以字符串或 Decimal 形式传入,不会产生浮点误差。
  • 将法规数值外置。 税率、扣除额和保险费率都保存在策略文件(YAML)中,并附有依据条文和生效日期。指定时点(as_of)后,将使用当日生效的数值进行计算。
  • 返回计算依据。 所有响应都包含 trace,其中记录公式、输入、中间值和结果,以及用于重新执行验证的收据(_meta.integrity)。

结构

 LLM 에이전트 / CLI / 파이썬 코드
        │
        │  MCP(stdio, HTTP, Unix)        sootool call ...        from sootool.sdk import tax
        ▼                                      ▼                          ▼
 ┌──────────────────────────────────────────────────────────────────────────────┐
 │ 경계 검사   인자 이름·타입·크기 검증, 숫자 문자열 → Decimal, 인증 범위 확인     │
 ├──────────────────────────────────────────────────────────────────────────────┤
 │ 레지스트리   도구 286개를 이름으로 찾아 실행 (core.batch / core.pipeline 포함)   │
 ├───────────────────────────────┬──────────────────────────────────────────────┤
 │ 도메인 도구                     │ 정책 로더                                      │
 │ tax · payroll · finance ·      │ policies/<도메인>/<이름>_<연도>.yaml           │
 │ realestate · stats · ...       │ 해시 검증 → as_of 시점의 시행 버전 선택         │
 └───────────────────────────────┴──────────────────────────────────────────────┘
        │
        ▼
 { 결과 필드, trace(공식·입력·단계·출력), 정책 출처와 근거 조문, _meta.integrity(영수증) }

三个入口(MCP、CLI、SDK)使用同一注册表。输入相同,无论通过哪个入口调用,结果和收据都相同。

快速开始

安装
pip install sootool                 # 기호 계산(symbolic.*)까지 쓰려면 pip install "sootool[symbolic]"
注册到 Claude Code
claude mcp add --scope user sootool -- uvx sootool

如果要获取仓库并使用开发中的代码启动,请按以下方式注册。

git clone https://github.com/JinHo-von-Choi/SooTool.git
cd SooTool && uv sync
claude mcp add --scope user sootool -- uv run --directory "$PWD" python -m sootool
首次计算

在 MCP 客户端中询问“计税标准为 5,000 万韩元时,2026 年的所得税是多少?”,Agent 就会调用 tax.kr_income。也可以在终端直接运行同一工具。

sootool call tax.kr_income --arg taxable_income=50000000 --arg year=2026 --format raw
{
  "tax": "6240000",
  "effective_rate": "0.12480000",
  "marginal_rate": "0.15",
  "breakdown": [ ... 구간별 과세표준과 세액 ... ],
  "policy_effective_date": "2026-01-01",
  "policy_citations": [{"law": "소득세법", "article": "제55조제1항", "url": "https://www.law.go.kr/법령/소득세법/제55조"}]
}

如何阅读响应

以下是 finance.npv(rate="0.08", cashflows=["-1000","300","400","500","200"], rounding="HALF_EVEN", decimals=2) 的实际响应。

{
  "npv": "164.64",
  "trace": {
    "tool": "finance.npv",
    "formula": "NPV = sum(CF_t / (1+r)^t, t=0..n)",
    "inputs": {"rate": "0.08", "cashflows": ["-1000", "300", "400", "500", "200"], "rounding": "HALF_EVEN", "decimals": 2},
    "steps": [{"label": "npv_raw", "value": "164.63539696786661172171511042618089308126395968697"}],
    "output": "164.64"
  },
  "_meta": {
    "integrity": {
      "tool": "finance.npv",
      "input_hash": "00da5199...",
      "result_hash": "d7a0ecfe...",
      "tool_version": "1.0.0",
      "sootool_version": "0.3.1"
    },
    "engine": "decimal"
  }
}
字段含义
npv 等结果字段计算结果。所有数字均为字符串。
trace.steps包含舍入前数值的中间计算。供人工核对结果时查看。
policy_*仅策略工具会附带。记录所应用策略文件的生效日期、状态、依据条文和哈希。
_meta.integrity收据。包含输入和结果的哈希,可通过 sootool receipt verify 重新执行同一计算并进行比对。
_meta.engine计算引擎。decimal(精确)、mpmath(指定精度)、float64(近似)、composite、none。
_meta.hints建议后续调用的工具。不会影响结果值。

主要功能

舍入方式由调用方选择

金融和会计工具(如增值税、现金流、折旧、货币兑换等)的舍入惯例因场景而异,因此支持 rounding(HALF_EVEN、HALF_UP、DOWN、UP、FLOOR、CEIL)和 decimals。例如,增值税倒算时按元舍去(DOWN),一般会计则使用 HALF_EVEN,不同用途的规则各不相同。法规规定尾数处理方式的税费项目(健康保险费、长期护理保险费、月薪预扣地方所得税、汽车税和登记执照税按 10 韩元单位舍去)则遵循相应规则,并在工具说明中注明。所得税应纳税额和个人地方所得税应纳税额均舍去不足 1 韩元的部分。

指定时点进行策略计算

税法和保险费率即使在年中也可能变更。策略工具除 year 外,还支持 as_of(YYYY-MM-DD)和 include_proposed。

policies/payroll/kr_4insurance_2026.yaml             2026-01-01 ~ 2026-06-30
policies/payroll/[email protected]  2026-07-01 ~ 2026-10-31  ◀── as_of="2026-08-15"
policies/payroll/[email protected]  2026-11-01 ~ 2026-12-31

as_of가 속한 버전으로 계산하고, 응답에 그 버전의 시행일과 근거 조문을 싣는다.

如果未提供 as_of,则使用该年度已确认版本中生效日期最晚的版本。只有在 include_proposed=true 时,才会使用国会最终确认前的修订案(status: proposed)。无需重新部署服务即可修改策略文件,具体流程见 docs/policy_management.md。

一次处理多项:batch 和 pipeline
core.batch     독립 계산 N건을 병렬로             core.pipeline   앞 단계 결과를 다음 단계 입력으로
                                                 
 ┌ s1: finance.npv(rate=0.05) ┐                  annual = core.mul(3000000, 12)
 ├ s2: finance.npv(rate=0.08) ┼─▶ id 순서로 결과       │  ${annual.result.result}
 └ s3: finance.npv(rate=0.10) ┘                       ▼
                                                  tax = tax.kr_income(annual, 2026)
 최대 500건, 항목당 10초, 전체 60초              최대 50단계, 깊이 10, 단계당 2초, 전체 30초

core.batch 会分别记录每一项的成功、错误或超时状态,并按输入顺序返回结果。core.pipeline 在前一步失败时会将后续步骤标记为 skipped;也可以从失败处重新运行 core.pipeline_resume(保留 10 分钟)。

{
  "name": "core.pipeline",
  "arguments": {
    "steps": [
      {"id": "annual", "tool": "core.mul",      "args": {"operands": ["3000000", "12"]}},
      {"id": "tax",    "tool": "tax.kr_income", "args": {"taxable_income": "${annual.result.result}", "year": 2026}}
    ]
  }
}

实际使用示例:

任务规模组合
薪资结算500 名员工core.batch + payroll.kr_salary
投资敏感性分析9 种折现率 × 5 种现金流方案core.batch + finance.npv、finance.irr
交易明细单拆分增值税数百项core.batch + accounting.vat_extract
从月薪计算到手收入4 步core.pipeline
倒算、比较和说明
  • core.solve_for:查找能得出目标结果的输入值。例如,求到手收入为 300 万韩元时的税前月薪。
  • core.compare:以基准方案为参照,以表格列出各情景的数值和差异。
  • core.explain:用韩语或英语句子说明计算过程和所应用的策略,不会更改数值。
重新运行验证收据
sootool receipt verify --tool finance.fv \
  --arguments '{"present_value":"1000","rate":"0.05","periods":10}' \
  --receipt receipt.json

重新运行同一工具,对比工具名称、输入哈希、结果哈希、工具版本和策略哈希。在 SOOTOOL_RECEIPT_KEY_FILE 中指定 ed25519 私钥文件后,收据会附带签名。

工具目录(276 个基础工具 + 10 个 admin 工具,18 个计算领域 + 运维工具)

命名空间数量代表工具
core11add、sub、mul、div、calc(公式)、batch、pipeline、pipeline_resume、solve_for、compare、explain
accounting12vat_extract、vat_add、balance、3 种折旧、2 种 dupont、ratios、income_statement、cashflow_operating、break_even
finance18pv、fv、npv、irr、roi、cagr、payback_period、loan_schedule、bond_ytm、bond_duration、black_scholes、2 种 var、sharpe、sortino
tax17kr_income、kr_comprehensive_income_tax、kr_withholding_simple、capital_gains_kr、kr_gift、kr_inheritance、kr_corporate、kr_eitc、3 种地方税附加
tax_us4federal_income、capital_gains、state_tax、fica
payroll15kr_salary、kr_gross_from_net、kr_severance_pay、kr_year_end_tax_settlement、kr_overtime_pay、kr_minimum_wage_check、4 种扣除
realestate10kr_acquisition_tax、kr_transfer_tax、kr_property_tax、kr_comprehensive、kr_ltv、kr_dti、kr_dsr、kr_subscription_score
stats14descriptive、3 种 t 检验、anova_oneway、regression_linear、ci_mean、bootstrap_ci、非参数检验
probability30正态、二项、泊松、伽马、贝塔、指数、对数正态、卡方、F 分布的 pdf·cdf·ppf、bayes、nCr、nPr
datetime14工作日计算、day_count、age、diff、tz_convert、阴阳历转换、24 节气、会计年度、所得税纳税期间
math102 种数值积分、2 种数值微分、2 种插值、polynomial_roots、polynomial_horner、fft、ifft
geometry157 种面积·体积、3 种向量、4 种矩阵、haversine
engineering56电气·交流电路、流体、热传递、材料力学、控制、可靠性、SI 前缀转换
units8convert、fx_convert、fx_triangulate、temperature、能量·压力·数据大小·时间转换
medical12bmi、bsa、egfr、dose_weight_based、pregnancy_weeks、cha2ds2_vasc、has_bled、framingham_cvd_10y、4 种 QTc
science11half_life、ideal_gas、molar_mass、stoichiometry、nernst、snell_law、thin_lens、bragg 等
crypto10gcd、lcm、egcd、modinv、modpow、crt、is_prime、euler_totient、carmichael_lambda、hash
pm5critical_path、pert、evm、earned_schedule、monte_carlo_schedule
symbolic2solve、diff(安装 sootool[symbolic] 后可用)
sootool2+10skill_guide、verify_receipt、10 种策略管理工具(其中 4 种写入工具仅限管理员模式)

各工具的版本、准确度等级和说明见 docs/tool_catalog.md。此文件由注册表自动生成。

启动服务器

sootool                                                    # stdio (MCP 클라이언트 기본)
sootool --transport http --http-port 10535                 # Streamable HTTP
sootool --transport unix --socket /tmp/sootool.sock        # Unix 소켓
sootool --transport stdio,http --socket /tmp/sootool.sock  # 여러 전송 동시 기동
传输方式用途备注
stdioClaude Code、Claude Desktop 等本地客户端默认值
http远程访问(Streamable HTTP)无状态,可置于负载均衡器后。默认端口为 10535
unix同一主机上的其他进程通过套接字文件权限(默认为 0600)控制访问
sse-legacy兼容 MCP 2024-11 客户端计划弃用。仅通过 --enable-sse-legacy 启用。默认端口为 10536

网络传输的安全规则如下。

  • 默认绑定地址为 127.0.0.1。如需通过 --host 0.0.0.0 对外开放,启动时必须提供 --auth-token(或 SOOTOOL_AUTH_TOKEN)。
  • 修改策略的 4 种写入工具仅通过 stdio 和 Unix 套接字公开。如需通过网络使用,必须同时提供 --admin --remote-admin --admin-token <토큰>,且只有通过管理员令牌认证的请求才能执行写入操作。
公开配置
sootool --profile full   # 기본값. 도구 286개를 모두 노출
sootool --profile lean   # sootool.search, describe, call, skill_guide 4개만 노출

lean 不会将完整的工具定义加载到上下文中。Agent 使用 sootool.search 查找工具,再用 sootool.describe 查看参数,随后通过 sootool.call 执行。结果和回执与直接调用相同。sootool.call 仅执行只读工具。

命令行

提供子命令即可直接执行工具,无需启动服务器。

sootool call core.add --arg 'operands=["1.5","2.5"]'
sootool call finance.npv --arg-json '{"rate":"0.1","cashflows":["-100","50","60","70"]}'
sootool call payroll.kr_gross_from_net --arg net_monthly=3000000 --arg year=2026 --format raw
sootool tools list --search 양도세        # 줄임말과 일상 표현으로 검색
sootool tools describe tax.kr_income     # 인자와 정책 인자 확인
sootool batch -f items.json              # -f - 는 표준입력
sootool policy show --arg domain=tax --arg name=kr_income --arg year=2026
sootool skill-guide --section triggers
sootool version
项目内容
参数重复使用 --arg 名称=值,或通过 --arg-json 一次性传入。字符串参数直接填写值;整数、布尔值、列表和对象按 JSON 解析。
输出格式--format pretty(默认)、json(完整)、raw(不含 trace 和 _meta)、trace
输出位置结果以 JSON 输出到标准输出,错误以 JSON 输出到标准错误。
退出代码0 表示成功,1 表示工具错误,2 表示输入错误,3 表示需要管理员模式(SOOTOOL_ADMIN_MODE=1),70 表示内部错误

作为 Python 库使用

无需 MCP 服务,即可将相同工具作为函数调用。结果、回执和 as_of 处理方式与 MCP 相同;结果类型已声明,因此类型检查器可以检查字段。

from sootool.sdk import tax

out = tax.kr_income(taxable_income=50_000_000, year=2026)
out["tax"]                                # "6240000"
out["_meta"]["integrity"]["input_hash"]   # 재실행 검증용 영수증

有关在沙盒中配置 Agent 执行 Python 的说明,请参阅 docs/sdk.md。

告知 Agent 使用规则

即使注册了工具,Agent 有时仍会直接心算。可通过以下任一方式加入“数字计算请使用 SooTool”这一规则。

  • 在会话开始时调用 sootool.skill_guide。它会返回触发条件表、示例、禁止模式和操作手册,说明何时调用哪些工具(section:triggers、examples、anti_patterns、playbooks、all / lang:ko、en)。
  • 可粘贴到客户端配置文件中的规则:Claude Code、Cursor、AGENTS.md

문서

문서내용
사용자 가이드도메인별 도구 개요, 공통 인자, 응답 규칙
도구 카탈로그도구 286개의 버전, 정확도 등급, 설명
정책 관리정책 파일 구조, 시점 선택, 갱신·롤백 절차, 감사 로그
SDK파이썬 라이브러리 사용법과 샌드박스 구성
외부 정책 팩서명된 정책 묶음의 생성, 검증, 설치
안정성 계약호환을 약속하는 범위와 폐기 절차
쿡북세무, 금융, 전기 공학 시나리오별 호출 예시
아키텍처 결정 기록설계 결정과 근거(ADR)
릴리스 절차버전 올리기부터 PyPI 게시까지

개발

uv sync --extra symbolic
make test        # pytest와 커버리지
make lint        # ruff
make typecheck   # mypy
uv run python scripts/mcp_smoke_test.py   # stdio 연결 점검 (http, sse, unix 스크립트도 있다)

새 도구는 src/sootool/modules/<도메인>/에 함수를 만들고 @REGISTRY.tool(namespace, name, description, version)을 붙인 뒤 도메인 __init__.py에서 불러오면 등록된다. 도구 설명이나 타입을 바꾸면 scripts/gen_tool_catalog.py와 scripts/gen_sdk_stubs.py로 생성 문서를 다시 만든다. 정책 파일을 고치면 scripts/policy_stamp.py로 해시를 갱신한다.

라이선스

MIT. LICENSE 참조.

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。