一个基于 MCP (Model Context Protocol) 的算术表达式计算器服务器,支持自定义舍入规则和百分比处理。
- 🧮 完整的算术运算: 支持加、减、乘、除、括号和百分号
- 🎯 精确的舍入控制: 支持指定小数位数的四舍五入
- 📊 灵活的百分比处理: 两种舍入策略(先转换后舍入 vs 先舍入后转换)
- 🌍 多格式千分位支持: 美式 (1,234.56)、欧式 (1.234,56)、空格 (1 234.56)、撇号 (1'234.56)
- ✅ 表达式验证: 验证计算结果是否与预期值相符
- 🔧 标准 MCP 协议: 与任何支持 MCP 的客户端兼容
确保系统已安装:
- Rust 1.70+
- Node.js 18+ (用于测试)
# 克隆项目
git clone <your-repo-url>
cd acc_calc_mcp
# 构建项目
cargo build --release
# 运行测试
cargo test
# 启动 MCP 服务器
cargo run计算算术表达式并返回结果。
参数:
expression(string): 要计算的算术表达式(支持多种千分位格式)decimals(number): 要保留的小数位数rounding_strategy(string, 可选): 百分比舍入策略(仅当表达式包含百分数时有效)"convert_then_round"(默认): 先转换为小数后舍入"round_then_convert": 先舍入后转换为小数
示例:
# 基本计算
npx @modelcontextprotocol/inspector --cli ./target/release/acc_calc_mcp --method tools/call --tool-name calculate --tool-arg expression="1 + 2 * 3" --tool-arg decimals=0
# 小数计算
npx @modelcontextprotocol/inspector --cli ./target/release/acc_calc_mcp --method tools/call --tool-name calculate --tool-arg expression="1.234 + 2.567" --tool-arg decimals=2
# 百分比计算
npx @modelcontextprotocol/inspector --cli ./target/release/acc_calc_mcp --method tools/call --tool-name calculate --tool-arg expression="50.126%" --tool-arg decimals=2 --tool-arg rounding_strategy="convert_then_round"
# 千分位分隔符计算
npx @modelcontextprotocol/inspector --cli ./target/release/acc_calc_mcp --method tools/call --tool-name calculate --tool-arg expression="1,234.56 + 2,000.44" --tool-arg decimals=2
# 欧式格式
npx @modelcontextprotocol/inspector --cli ./target/release/acc_calc_mcp --method tools/call --tool-name calculate --tool-arg expression="1.234,56 + 2.000,44" --tool-arg decimals=2验证算术表达式的计算结果是否与预期值相符。
参数:
expression(string): 要验证的算术表达式(支持多种千分位格式)expected(string): 预期的结果值(支持百分数和千分位格式,如:50.5%, 1,234.56, 1.234,56)decimals(number): 要保留的小数位数rounding_strategy(string, 可选): 百分比舍入策略(仅当表达式或预期值包含百分数时有效)
示例:
# 验证计算结果
npx @modelcontextprotocol/inspector --cli ./target/release/acc_calc_mcp --method tools/call --tool-name validate --tool-arg expression="1 + 2" --tool-arg expected="3" --tool-arg decimals=0
# 验证百分比结果
npx @modelcontextprotocol/inspector --cli ./target/release/acc_calc_mcp --method tools/call --tool-name validate --tool-arg expression="25% + 25%" --tool-arg expected="50%" --tool-arg decimals=2
# 验证千分位结果
npx @modelcontextprotocol/inspector --cli ./target/release/acc_calc_mcp --method tools/call --tool-name validate --tool-arg expression="500 + 500" --tool-arg expected="1,000" --tool-arg decimals=0批量验证多个算术表达式的计算结果,提高验证效率。
参数:
expressions(array): 表达式列表,每项格式为"expression|expected"或"expression|expected|decimals"或"expression|expected|decimals|rounding_strategy"default_decimals(number, 可选): 默认小数位数,默认为2default_rounding_strategy(string, 可选): 默认百分比舍入策略(仅当表达式包含百分数时有效)
示例:
# 批量验证基本表达式
npx @modelcontextprotocol/inspector --cli ./target/release/acc_calc_mcp --method tools/call --tool-name batch_validate --tool-arg expressions='["1 + 2|3", "2 * 3|6", "10 / 2|5"]' --tool-arg default_decimals=0
# 批量验证带小数的表达式
npx @modelcontextprotocol/inspector --cli ./target/release/acc_calc_mcp --method tools/call --tool-name batch_validate --tool-arg expressions='["1.234 + 2.567|3.80|2", "50.126%|0.50|2"]'
# 批量验证混合格式
npx @modelcontextprotocol/inspector --cli ./target/release/acc_calc_mcp --method tools/call --tool-name batch_validate --tool-arg expressions='["1,234.56 + 1.000,44|2235.00|2", "1,000,000.00 + 500,000.00|1500000|0"]'运行包含的测试脚本来验证所有功能:
./test.sh测试脚本将验证:
- 基本算术运算
- 小数处理和���入
- 百分比计算(两种策略)
- 千分位分隔符(四种格式)
- 复杂表达式
- 单个验证功能
- 批量验证功能
- 错误处理
- 高级功能
npx @modelcontextprotocol/inspector --cli ./target/release/acc_calc_mcp --method tools/listnpx @modelcontextprotocol/inspector --cli ./target/release/acc_calc_mcp --method tools/call --tool-name calculate --tool-arg expression="(1.5 + 2.5) * 3 - 1" --tool-arg decimals=1npx @modelcontextprotocol/inspector --cli ./target/release/acc_calc_mcp --method tools/call --tool-name validate --tool-arg expression="1.234 + 2.567" --tool-arg expected=3.80 --tool-arg decimals=2npx @modelcontextprotocol/inspector --cli ./target/release/acc_calc_mcp --method tools/call --tool-name batch_validate --tool-arg expressions='["1 + 2|3", "2 * 3|6", "10 / 2|5"]' --tool-arg default_decimals=0- 输入舍入: 所有数字在参与运算前,根据指定小数位数进行四舍五入
- 计算过程: 使用完整精度进行计算
- 结果舍入: 最终结果按指定小数位数四舍五入
50.126% → 0.50126 → 0.50 (保留2位小数)
50.126% → 50.13 → 0.5013 (保留2位小数) → 0.50 (最终舍入)
+加法-减法和负号*乘法/除法()括号(支持嵌套)%百分号
- 美式格式:
1,234.56(逗号分隔千位,点号小数点) - 欧式格式:
1.234,56(点号分隔千位,逗号小数点) - 空格格式:
1 234.56(空格分隔千位) - 撇号格式:
1'234.56(撇号分隔千位)
- 自动检测数字格式,无需指定
- 支持大数字:
1,000,000或1.000.000,00 - 智能区分千分位分隔符和小数点
- 混合格式在同一表达式中使用
服务器会优雅地处理以下错误:
- 除零错误
- 无效表达式
- 括号不匹配
- 无效字符
- 表达式意外结束
acc_calc_mcp/
├── src/
│ ├── main.rs # 主入口
│ ├── cli.rs # 命令行参数
│ ├── server.rs # MCP 服务器设置
│ ├── handler.rs # 请求处理器
│ ├── error.rs # 错误类型
│ └── tools/
│ ├── mod.rs # 工具模块
│ └── calculator.rs # 计算器核心实现
├── test.sh # 测试脚本
├── Cargo.toml # 依赖配置
└── README.md # 项目文档
- 在
src/tools/mod.rs中定义新的工具结构体 - 使用
#[mcp_tool]属性宏标注 - 实现
run_tool方法 - 将工具添加到
tool_box!宏中
cargo testcargo build --release本项目基于 MIT 许可证开源。