计算器服务器-Go MCP服务器
全面 基于Go的MCP(模型上下文协议)服务器 用于数学计算,实现 13数学工具 具有先进的功能和高精度的计算。
所有者和维护者: 阿维纳什·桑格尔(avinash.sangle123@gmail.com)
](https://golang.org/)   
🧮 特性
核心数学工具(13个工具)
基础数学工具(6个工具)
- 基础数学运算 -具有可配置小数位数的精确算术
- 加法、减法、乘法、除法 - 多操作数支持 - 小数精度控制(0-15位)
- 高级数学函数 -科学计算
- 三角函数: sin, cos, tan, asin, acos, atan - 对数: log, log10, ln - 其他: sqrt, abs, factorial, exp, pow - 单位支持:三角函数的度数/弧度 - 具有基数和指数参数的幂函数
- 表达式求值 -复杂的数学表达式
- 变量替换支持 - 数学常数(π, e) - 带括号的嵌套表达式 - 表达式中的函数调用
- 统计分析 -综合数据分析
- 描述性统计:平均值、中位数、众数 - 变异性:标准差、方差 - 百分位数计算 - 数据验证和错误处理
- 单位转换 -多类别单位转换
- 长度:mm、cm、m、km、in、ft、yd、mi、mil、μm、nm - 重量:mg、g、kg、t、oz、lb、st(石)、ton(美吨) - 温度:°C、°F、K、R(朗肯) - 体积:ml、cl、dl、l、kl、fl_oz、杯、pt、qt、gal、tsp、tbsp、bbl - 区域:mm²、cm²、m²、km²、in²、ft²、yd²、mi²、英亩、公顷
- 财务计算 -综合财务建模
- 利息计算:简单和复合 - 贷款支付计算 - 投资回报率(ROI) - 当前/未来价值计算 - 净现值(NPV)和内部收益率(IRR)
高级专用工具(7种工具)
- 统计摘要 -数据集综合统计汇总
- 完整的统计概述,包括所有指标 - 带有第一个/最后一个元素的数据预览 - 常见百分位数(第25、50、75位)
- 百分位数计算 -计算特定百分位数(0-100)
- 0到100之间的任何百分位值 - 数据计数和预览信息 - 使用经验方法进行精确的百分位数计算
- 批量单位转换 -一次在单位之间转换多个值
- 批量转换操作 - 与单次转换相同的单位类别 - 高效的批处理
- 净现值(NPV) -使用现金流进行高级净现值计算
- 多个现金流期 - 贴现率计算 - 投资决策支持
- 内部收益率(IRR) -投资分析的内部收益率计算
- 现金流量分析 - 精确计算IRR的Newton-Raphson方法 - 投资业绩评价
- 贷款比较 -比较多种贷款方案
- 多种贷款选择分析 - 每种情况的付款计算 - 比较指标和建议
- 投资方案 -比较多种投资方案
- 多种投资选择分析 - 每种情景的未来价值计算 - 投资比较和建议
技术特性
- 高精度:用途
shopspring/decimal用于财务计算 - 科学计算:技术支持
gonum.org/v1/gonum - 表达式引擎:高级解析
govaluate - 综合测试:>95%的测试覆盖率
- 错误处理:详细的错误消息和验证
- MCP协议:完全符合MCP规范
- 构建自动化:完整的Makefile,支持CI/CD
- 可流式HTTP传输:支持SSE的MCP兼容HTTP传输
🚀 快速开始
先决条件
- 转到1.21+ (必填)
- Git (用于版本控制)
安装
# Clone the repository
git clone
cd calculator-server
# Install dependencies
make deps
# Build the server
make build
# Run the server
make run替代设置
# Initialize Go module
go mod init calculator-server
go mod tidy
# Build and run
go build -o calculator-server ./cmd/server
./calculator-server -transport=stdio📊 使用示例
基础数学
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "basic_math",
"arguments": {
"operation": "add",
"operands": [15.5, 20.3, 10.2],
"precision": 2
}
}
}答复:
{
"jsonrpc": "2.0",
"id": 1,
"result": {
"content": [
{
"type": "text",
"text": "{\"result\": 46.0}"
}
]
}
}高级数学函数
{
"jsonrpc": "2.0",
"id": 2,
"method": "tools/call",
"params": {
"name": "advanced_math",
"arguments": {
"function": "pow",
"value": 2,
"exponent": 8
}
}
}统计摘要
{
"jsonrpc": "2.0",
"id": 3,
"method": "tools/call",
"params": {
"name": "stats_summary",
"arguments": {
"data": [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
}
}
}百分位数计算
{
"jsonrpc": "2.0",
"id": 4,
"method": "tools/call",
"params": {
"name": "percentile",
"arguments": {
"data": [1, 2, 3, 4, 5, 6, 7, 8, 9, 10],
"percentile": 90
}
}
}净现值
{
"jsonrpc": "2.0",
"id": 5,
"method": "tools/call",
"params": {
"name": "npv",
"arguments": {
"cashFlows": [-50000, 15000, 20000, 25000, 30000],
"discountRate": 8
}
}
}批量单位转换
{
"jsonrpc": "2.0",
"id": 6,
"method": "tools/call",
"params": {
"name": "batch_conversion",
"arguments": {
"values": [100, 200, 300],
"fromUnit": "cm",
"toUnit": "m",
"category": "length"
}
}
}🌐 MCP流式HTTP传输
服务器实现 符合MCP标准的流式HTTP传输 根据官方MCP规范,提供与服务器发送事件(SSE)流媒体支持的实时通信。
MCP协议合规性
✅ 单端点: /mcp 仅限(根据MCP规范)\ ✅ 所需标题: MCP-Protocol-Version, Accept\ ✅ 会话管理:加密安全会话ID\ ✅ SSE流媒体:服务器发送实时响应事件\ ✅ CORS支持:源验证和安全标头
HTTP端点
单MCP端点(符合规范)
- POST/mcp -MCP JSON-RPC,可选SSE流
- GET/mcp -SSE流建立
- 选项/mcp -CORS飞行前处理
示例用法
# Start MCP-compliant HTTP server
./calculator-server -transport=http -port=8080
# Basic JSON-RPC request
curl -X POST http://localhost:8080/mcp \
-H "Content-Type: application/json" \
-H "Accept: application/json" \
-H "MCP-Protocol-Version: 2024-11-05" \
-d '{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "basic_math",
"arguments": {
"operation": "add",
"operands": [15, 25],
"precision": 2
}
}
}'
# SSE streaming request (for real-time responses)
curl -X POST http://localhost:8080/mcp \
-H "Content-Type: application/json" \
-H "Accept: text/event-stream" \
-H "MCP-Protocol-Version: 2024-11-05" \
-d '{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "stats_summary",
"arguments": {"data": [1,2,3,4,5]}
}
}'🏗️ 项目结构
calculator-server/
├── cmd/
│ └── server/
│ └── main.go # Main server entry point
├── internal/
│ ├── calculator/
│ │ ├── basic.go # Basic math operations
│ │ ├── advanced.go # Advanced mathematical functions
│ │ ├── expression.go # Expression evaluation
│ │ ├── statistics.go # Statistical analysis
│ │ ├── units.go # Unit conversion
│ │ └── financial.go # Financial calculations
│ ├── handlers/
│ │ ├── math_handler.go # Math operation handlers
│ │ ├── stats_handler.go # Statistics & specialized handlers
│ │ └── finance_handler.go # Financial handlers
│ ├── config/
│ │ ├── config.go # Configuration structures
│ │ ├── loader.go # Configuration loader
│ │ └── errors.go # Configuration errors
│ └── types/
│ └── requests.go # Request/response types
├── pkg/
│ └── mcp/
│ ├── protocol.go # MCP protocol handling
│ └── streamable_http_transport.go # HTTP transport
├── tests/
│ ├── basic_test.go # Basic math tests
│ ├── advanced_test.go # Advanced math tests
│ ├── expression_test.go # Expression evaluation tests
│ ├── integration_test.go # Integration tests
│ ├── config_test.go # Configuration tests
│ └── streamable_http_transport_test.go # HTTP transport tests
├── config.sample.yaml # Sample YAML configuration
├── config.sample.json # Sample JSON configuration
├── go.mod # Go module definition
├── go.sum # Go module checksums
├── Makefile # Build automation
└── README.md # Project documentation🛠️ 发展
建筑
# Build for current platform
make build
# Build for all platforms
make build-all
# Install to $GOPATH/bin
make install测试
# Run all tests
make test
# Run tests with coverage
make coverage
# Run tests with race detection
make test-race
# Run benchmarks
make benchmark质量保证
# Format code
make fmt
# Run linter
make lint
# Run vet
make vet
# Run all quality checks
make quality
# Pre-commit checks
make pre-commit
# CI pipeline
make ci发展模式
# Run without building (development)
make run-dev
# Run with rebuild
make run📋 可用工具
核心工具(6)
1. basic_math
目的: 具有精度控制的基本算术运算
参数:
operation(字符串):“加”、“减”、“乘”、“除”operands(数字数组):要操作的数字(至少2个)precision(整数,可选):小数位(0-15,默认值:2)
2. advanced_math
目的: 高级数学函数
参数:
function(string):函数名(sin、cos、tan、asin、acos、atan、log、log10、ln、sqrt、abs、阶乘、pow、exp)value(数字):输入值(pow函数的基础)exponent(数字,可选):pow函数的指数(pow需要)unit(字符串,可选):trig函数的“弧度”或“度”
3. expression_eval
目的: 计算带有变量的数学表达式
参数:
expression(string):要计算的数学表达式variables(对象,可选):变量名-值对
4. statistics
目的: 数据集的统计分析
参数:
data(数字数组):要分析的数据集operation(字符串):统计运算(平均值、中位数、众数、标准偏差、方差、百分位数)
5. unit_conversion
目的: 在测量单位之间转换
参数:
value(number):要转换的值fromUnit(string):源单位toUnit(string):目标单位category(字符串):单位类别(长度、重量、温度、体积、面积)
6. financial
目的: 财务计算和建模
参数:
operation(string):财务操作类型(复合利息、简单利息、贷款支付、投资回报率、当前值、未来值)principal(数字):本金金额rate(数字):利率(百分比)time(数字):时间段(年)periods(整数,可选):每年的复合期futureValue(数字,可选):某些计算的未来值
专用工具(7)
7. stats_summary
目的: 数据集综合统计汇总
参数:
data(数字数组):用于汇总统计的数据集
8. percentile
目的: 计算特定百分位数
参数:
data(数字数组):要分析的数据集percentile(数字):要计算的百分位数(0-100)
9. batch_conversion
目的: 在单位之间转换多个值
参数:
values(数字数组):要转换的值fromUnit(string):源单位toUnit(string):目标单位category(string):单位类别
10. npv
目的: 计算净现值
参数:
cashFlows(一系列数字):现金流(流出为负,流入为正)discountRate(数字):贴现率百分比
11. irr
目的: 计算内部收益率
参数:
cashFlows(数字数组):现金流(至少2个值)
12. loan_comparison
目的: 比较多种贷款方案
参数:
loans(对象数组):包含本金、利率和时间的贷款场景
13. investment_scenarios
目的: 比较多种投资方案
参数:
scenarios(对象数组):包含本金、利率和时间的投资场景
🔧 配置
命令行选项
./calculator-server [OPTIONS]
Options:
-transport string
Transport method (stdio, http) (default "stdio")
-port int
Port for HTTP transport (default 8080)
-host string
Host for HTTP transport (default "127.0.0.1")
-config string
Path to configuration file (YAML or JSON)
Examples:
./calculator-server # Run with stdio transport (default)
./calculator-server -transport=http # Run with HTTP transport on port 8080
./calculator-server -transport=http -port=9000 -host=localhost # Custom host/port
./calculator-server -config=config.yaml # Load configuration from file配置文件
服务器支持YAML和JSON格式的配置文件。在以下位置搜索配置文件:
- 当前目录(
./config.yaml,./config.json) ./config/目录/etc/calculator-server/$HOME/.calculator-server/
YAML配置示例
server:
transport: "http"
http:
host: "127.0.0.1" # Localhost for security
port: 8080
session_timeout: "5m"
max_connections: 100
cors:
enabled: true
origins: ["http://localhost:3000", "http://127.0.0.1:3000"] # Never use "*" in production
logging:
level: "info"
format: "json"
output: "stdout"
tools:
precision:
max_decimal_places: 15
default_decimal_places: 2
expression_eval:
timeout: "10s"
max_variables: 100
statistics:
max_data_points: 10000
financial:
currency_default: "USD"
security:
rate_limiting:
enabled: true
requests_per_minute: 100
request_size_limit: "1MB"环境变量
环境变量覆盖配置文件设置:
CALCULATOR_TRANSPORT:传输方法(stdio、http)CALCULATOR_HTTP_HOST:HTTP服务器主机CALCULATOR_HTTP_PORT:HTTP服务器端口CALCULATOR_LOG_LEVEL:设置日志记录级别(调试、信息、警告、错误)CALCULATOR_LOG_FORMAT:日志格式(json、文本)CALCULATOR_LOG_OUTPUT:日志输出(stdout、stderr)
📈 演出
基准测试
- 基本操作:每次操作约1-5μs
- 高级功能:每次操作约10-50μs
- 表达式求值:每次表达约100-500μs
- 统计操作:每个数据集约10-100μs(取决于大小)
- 单位转换:每次转换约1-10μs
- 财务计算:每次计算约50-200μs
内存使用
- 基本内存:约10-20mb
- 每操作:约1-10KB额外
- 大型数据集:随数据大小线性缩放
🧪 测试
该项目包括覆盖率>95%的综合测试:
- 单元测试:测试单个计算器和功能
- 集成测试:测试MCP协议集成
- 错误处理测试:验证错误条件
- 性能测试:基准关键业务
# Run specific test suites
go test ./tests/basic_test.go -v
go test ./tests/advanced_test.go -v
go test ./tests/integration_test.go -v
# Generate coverage report
make coverage🚢 部署
Docker部署
# Build Docker image
make docker-build
# Run in Docker
make docker-run
# Push to registry
make docker-push二进制发布
# Create release build
make release
# Binaries will be in ./dist/release/
ls -la ./dist/release/📝 api参考
MCP协议支持
服务器实现了完整的MCP(模型上下文协议)规范:
- 初始化:服务器初始化和能力协商
- 工具列表:动态工具发现
- 工具调用:工具执行与参数验证
- 错误处理:全面的错误响应
工具架构
所有工具都包括用于参数验证和文档的全面JSON模式定义。模式是自动生成的,包括:
- 参数类型和验证规则
- 必需参数与可选参数
- 默认值和约束
- 文档字符串
📏 单位转换参考
长度单位
| 单位 | 缩写 | 换算为米 |
|---|---|---|
| 毫米 | mm | 0.001 |
| 厘米 | cm | 0.01 |
| 仪表 | m | 1.0 |
| 公里 | km | 1000.0 |
| 英寸 | in | 0.0254 |
| 脚 | ft | 0.3048 |
| 庭院 | yd | 0.9144 |
| 英里 | mi | 1609.344 |
| 米尔 | mil | 0.0000254 |
| 千分尺 | μm | 0.000001 |
| 纳米级 | nm | 0.000000001 |
重量/质量单位
| 单位 | 缩写 | 转换为克 |
|---|---|---|
| 毫克 | mg | 0.001 |
| 克 | g | 1.0 |
| 千克 | kg | 1000.0 |
| 公吨 | t | 1000000.0 |
| 盎司 | oz | 28.3495 |
| 英镑 | lb | 453.592 |
| 石头 | st | 6350.29 |
| 美国吨 | ton | 907185 |
温度单位
| 单位 | 缩写 | 描述 |
|---|---|---|
| 摄氏度 | C | 摄氏度 |
| 华氏温度 | F | 华氏度 |
| 开尔文 | K | 开尔文(绝对) |
| 兰金 | R | 兰金学位 |
体积单位
| 单位 | 缩写 | 转换为升 |
|---|---|---|
| 毫升 | ml | 0.001 |
| Centiliter | cl | 0.01 |
| 分升 | dl | 0.1 |
| 升 | l | 1.0 |
| 千升 | kl | 1000.0 |
| 美国流体盎司 | fl_oz | 0.0295735 |
| 美国杯 | cup | 0.236588 |
| 美国Pint | pt | 0.473176 |
美国四分之一。 qt | 0.946353 | |
| 美国加仑 | gal | 3.78541 |
| 茶匙 | tsp | 0.00492892 |
| 汤匙 | tbsp | 0.0147868 |
| 桶 | bbl | 158.987 |
面积单位
| 单位 | 缩写 | 换算为m² |
|---|---|---|
| 平方毫米 | mm2 | 0.000001 |
| 平方厘米 | cm2 | 0.0001 |
| 平方米 | m2 | 1.0 |
| 平方公里 | km2 | 1000000.0 |
| 平方英寸 | in2 | 0.00064516 |
| 平方英尺 | ft2 | 0.092903 |
| 广场庭院 | yd2 | 0.836127 |
| 平方英里 | mi2 | 2589988.11 |
| 英亩 | acre | 4046.86 |
| 赫克托 | ha | 10000.0 |
🔢 数学函数参考
三角函数
| 函数 | 语法 | 描述 | 示例 |
|---|---|---|---|
| Sine | sin(x) | x正弦(弧度) | sin(pi/2) → 1.0 |
| Cosine | cos(x) | x的余弦(弧度) | cos(0) → 1.0 |
| 切线 | tan(x) | x切线(弧度) | tan(pi/4) → 1.0 |
| Arcsine | asin(x) | 反正弦 | asin(1) → 1.5708 |
| 反正弦 | acos(x) | 反余弦 | acos(1) → 0.0 |
| 反正切 | atan(x) | 反切线 | atan(1) → 0.7854 |
对数函数
| 函数 | 语法 | 描述 | 示例 |
|---|---|---|---|
| 通用日志 | log(x) | 以10为底的对数 | log(100) → 2.0 |
| 天然原木 | ln(x) | 自然对数(以e为底) | ln(e) → 1.0 |
电源和根功能
| 函数 | 语法 | 描述 | 示例 |
|---|---|---|---|
| 平方根 | sqrt(x) | x的平方根 | sqrt(16) → 4.0 |
| 电源 | pow(x, y) | x升至y的幂 | pow(2, 3) → 8.0 |
| 指数型 | exp(x) | e上升到权力x | exp(1) → 2.7183 |
其他功能
| 函数 | 语法 | 描述 | 示例 |
|---|---|---|---|
| 绝对值 | abs(x) | x的绝对值 | abs(-5) → 5.0 |
| 保理 | factorial(x) | x的因式分解 | factorial(5) → 120.0 |
数学常量
| 常数 | 值 | 描述 |
|---|---|---|
pi | 3.14159… | Pi(π) |
e | 2.71828… | 欧拉数 |
🤝 贡献
- 分叉 存储库
- 创建 特征分支(
git checkout -b feature/amazing-feature) - 提交 变化(
git commit -m 'Add amazing feature') - 推 分支机构(
git push origin feature/amazing-feature) - 创建 拉取请求
开发指南
- 遵循Go最佳实践和惯例
- 保持>95%的测试覆盖率
- 添加全面的文档
- 使用有意义的提交消息
- 跑
make quality提交前
📄 许可证
此项目根据Apache许可证2.0获得许可-请参阅 许可证 文件以获取详细信息。
🙏 致谢
- Go团队:优秀的编程语言
- MCP协议:模型上下文协议规范
- 外部库:
- shopspring/decimal:精确的十进制算术 - Knetic/govaluate:表达式评估 - gonum:科学计算 - gopkg.in/yaml.v3:YAML配置支持
📞 支持与联系
主要联系人:
- 维护者:阿维纳什·桑格尔
- 电子邮件: avinash.sangle123@gmail.com
- GitHub:
- 网站:
项目资源:
- 问题:
- 文档:此README和内联代码文档
- 例子:参见
make example-*命令
获取帮助:
- 查看此README以获取全面的文档
- 查看测试文件以获取使用示例
- 提交带有详细错误信息的问题
- 联系维护人员获得直接支持
______________________________________________________________________
内置于❤️ 由Avinash Sangle为IBM MCP Context Forge项目撰写
与作者联系:
- 🌐 网站:
- 💻 github:
- 📧 电子邮件:avinash.sangle123@gmail.com
有关MCP服务器和Context Forge项目的更多信息,请访问 IBM MCP Context Forge存储库.
