多个MCP服务器
一个安全的、生产就绪的模型上下文协议(MCP)服务器,为Claude Desktop提供对Labamu业务API的访问,用于物料库存管理、供应商管理、批次跟踪、客户数据和发票操作。
](./package.json)  
概述
Labamu MCP服务器使Claude等AI助手能够通过模型上下文协议与Labamu的物料资源计划(MRP)和业务API安全交互。基于Cloudflare Workers构建,用于具有企业级安全性的全球边缘部署。
主要特点
- 🔒 安全第一:JWT身份验证、输入验证、净化日志
- ⚡ 高性能:全球边缘部署,响应时间\<100ms
- 🔧 开发者友好:干净的架构,全面的文档
- 📊 生产就绪:监控、错误处理、功能标志
- 🚀 可扩展的:具有自动扩展功能的无服务器架构
快速开始
先决条件
- Node.js 18+
- Cloudflare帐户
- Labamu API证书
- 克劳德桌面
1.安装
git clone https://github.com/your-org/labamu-mcp
cd labamu-mcp
npm install2.部署
# Build and deploy to Cloudflare Workers
npm run build
npm run deploy3.配置
复制模板并配置您的Claude桌面:
cp claude-desktop-config-template.json claude-desktop-config.json
# Edit claude-desktop-config.json with your JWT token添加到您的Claude Desktop配置中:
{
"mcpServers": {
"labamu": {
"command": "npx",
"args": [
"-y",
"mcp-remote@latest",
"https://labamu-mcp.your-subdomain.workers.dev/sse",
"--header",
"Authorization:Bearer ${LABAMU_API_KEY}"
],
"env": {
"LABAMU_API_KEY": "your-jwt-token-here"
}
}
}
}可用工具
物料管理
| 工具 | 描述 | 状态 |
|---|---|---|
get_materials | 列出具有过滤和分页功能的材料 | ✅ 活动 |
get_material_by_id | 按UUID检索特定材料 | ✅ 活动 |
update_material | 更新材料属性 | ✅ 活动 |
delete_material | 从库存中删除物料 | ✅ 活动 |
bulk_create_materials | 从CSV/JSON创建多种材质 | ✅ 活动 |
供应商管理
| 工具 | 描述 | 状态 |
|---|---|---|
get_vendors | 列出具有过滤和分页功能的供应商 | ✅ 活动 |
bulk_create_vendors | 批量创建多个供应商 | ✅ 活动 |
bulk_delete_vendors | 按ID删除多个供应商 | ✅ 活动 |
update_vendor | 更新供应商信息 | ✅ 活动 |
批次管理
| 工具 | 描述 | 状态 |
|---|---|---|
get_batches | 列出经过过滤的物料批次 | ✅ 活动 |
bulk_create_batches | 创建多个具有供应商跟踪功能的批次 | ✅ 活动 |
bulk_update_batches | 更新多个批次(部分更新) | ✅ 活动 |
bulk_delete_batches | 按ID删除批次 | ✅ 活动 |
产品管理
| 工具 | 描述 | 状态 |
|---|---|---|
get_products | 列出产品类别、物料清单和定价 | ✅ 活动 |
create_product | 创建具有定价和类别的新产品 | ✅ 活动 |
bulk_create_products | 批量创建多个产品 | ✅ 活动 |
get_products_with_bom | 列出附有物料清单的产品 | ✅ 活动 |
get_product_by_id | 按UUID获取产品详细信息 | ✅ 活动 |
update_product | 更新产品信息 | ✅ 活动 |
delete_product | 按ID删除产品 | ✅ 活动 |
get_categories | 列出产品类别 | ✅ 活动 |
create_category | 创建新类别 | ✅ 活动 |
get_category_by_id | 按UUID获取类别详细信息 | ✅ 活动 |
update_category | 更新类别信息 | ✅ 活动 |
delete_category | 按ID删除类别 | ✅ 活动 |
get_boms | 列出物料清单,包括路线和成本 | ✅ 活动 |
create_bom | 使用材料和工艺路线创建新的BOM表 | ✅ 活动 |
get_bom_cogs_breakdown | 获取BOM的COGS细分 | ✅ 活动 |
get_bom_suggested_price | 从BOM成本中获取建议定价 | ✅ 活动 |
get_bom_by_id | 按UUID获取BOM详细信息 | ✅ 活动 |
update_bom | 更新物料清单信息 | ✅ 活动 |
delete_bom | 按ID删除BOM表 | ✅ 活动 |
check_bom_usage | 检查产品中是否使用BOM | ✅ 活动 |
get_material_usages | 列出物料使用情况并进行过滤 | ✅ 活动 |
create_material_usage | 为BOM创建材料使用情况 | ✅ 活动 |
bulk_create_material_usages | 创建多种材料用途 | ✅ 活动 |
get_material_usage_by_id | 按UUID获取材料使用情况 | ✅ 活动 |
update_material_usage | 更新材料使用情况 | ✅ 活动 |
delete_material_usage | 按ID删除物料使用情况 | ✅ 活动 |
传统工具(已禁用)
| 工具 | 描述 | 状态 |
|---|---|---|
get_merchant | 获取商家资料 | 🚫 残疾人 |
list_customers | 列出客户数据 | 🚫 残疾人 |
create_invoice | 生成发票 | 🚫 残疾人 |
search | 常规搜索功能 | 🚫 残疾人 |
fetch | HTTP获取实用程序 | 🚫 残疾人 |
建筑
┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐
│ Claude │ │ MCP Server │ │ Labamu APIs │
│ Desktop │◄──►│ (CF Workers) │◄──►│ (MRP/Business)│
│ │ │ │ │ │
│ - Authentication│ │ - Validation │ │ - Business Logic│
│ - Tool Calls │ │ - Security │ │ - Data Storage │
│ - Responses │ │ - Logging │ │ - Processing │
└─────────────────┘ └─────────────────┘ └─────────────────┘安全模型
- 客户端身份验证:安全存储在Claude Desktop中的JWT令牌
- 基于标头的传输:通过授权标头进行安全令牌传输
- 输入验证:对所有输入进行全面的模式验证
- 山宁泰测井:自动编辑敏感数据
- CORS保护:限制性跨来源资源共享
发展
地方发展
# Start development server
npm run dev
# Run tests
npm run test
# Watch mode
npm run test:watch
# Type checking
npm run build项目结构
src/
├── config/ # Security and configuration
├── core/ # Base classes and MCP server
├── tools/ # Tool implementations
│ └── materials/ # Material management tools
├── types/ # TypeScript definitions
├── utils/ # Shared utilities
└── index.ts # Worker entry point添加新工具
- 创建工具类扩展
BaseTool - 添加到服务器中的工具注册表
- 在中配置功能标志
wrangler.toml - 编写全面的测试
- 更新文档
看 Developpent.md 详细指南。
安全
认证流程
- 存储在Claude Desktop环境变量中的JWT令牌
- 令牌通过以下方式传输
Authorization: Bearer头球 - 服务器验证JWT格式和结构
- 令牌转发到上游Labamu API
- 在记录之前对响应数据进行清理
安全特性
- JWT格式验证
- 输入模式验证
- 请求净化
- 错误消息清理
- 所有响应上的安全标头
- 无敏感数据记录
看 安全.md 获取全面的安全文档。
配置
功能标志
可以通过环境变量启用/禁用工具:
# wrangler.toml
FEATURE_GET_MATERIALS_ENABLED = "true"
FEATURE_UPDATE_MATERIAL_ENABLED = "true"
FEATURE_DELETE_MATERIAL_ENABLED = "true"环境变量
| 变量 | 描述 | 默认值 |
|---|---|---|
LABAMU_MRP_API_BASE | MRP API基础URL | https://mrp-api-dev.cashenable.com |
LABAMU_API_BASE | 商务API基础URL | https://openapi-stg.cashenable.com |
监控
健康检查
curl https://labamu-mcp.your-subdomain.workers.dev/healthz返回服务器状态和启用的工具:
{
"status": "ok",
"version": "2.4.0",
"timestamp": "2025-09-30T12:00:00.000Z",
"tools": ["get_materials", "get_material_by_id", "update_material", "delete_material", "bulk_create_materials"],
"auth_mode": "client_provided"
}日志记录
# Monitor live logs
wrangler tail --format pretty
# Filter specific events
wrangler tail | grep ERROR测试
测试覆盖率
- 单元测试:工具逻辑和验证
- 集成测试:端到端MCP协议
- 安全测试:身份验证和输入验证
# Run all tests
npm test
# Coverage report
npm run test:coverageAPI 参考
物料管理
获取材料
{
"tool": "get_materials",
"arguments": {
"page": 1,
"size": 10,
"category_id": "uuid",
"sku": "MAT-001",
"name": "Steel Rod",
"classification": "A",
"type": "RAW",
"is_stockable": true,
"keyword": "search term"
}
}按ID获取材料
{
"tool": "get_material_by_id",
"arguments": {
"id": "20858588-ef10-4629-b01c-5b3fa6bfef6d"
}
}更新材料
{
"tool": "update_material",
"arguments": {
"id": "20858588-ef10-4629-b01c-5b3fa6bfef6d",
"name": "Updated Steel Rod",
"classification": "A",
"status": "ACTIVE"
}
}产品管理
获取产品
{
"tool": "get_products",
"arguments": {
"page": 1,
"size": 10,
"name": "Meja",
"sku": "PROD-001",
"category_id": "uuid",
"status": "ACTIVE",
"keyword": "furniture",
"sort": "updated_at:desc"
}
}获取类别
{
"tool": "get_categories",
"arguments": {
"page": 1,
"size": 10,
"name": "Rak Besi",
"status": "ACTIVE",
"keyword": "metal",
"sort": "name:asc"
}
}获取物料清单
{
"tool": "get_boms",
"arguments": {
"page": 1,
"size": 10,
"name": "Pembuatan",
"product_id": "uuid",
"status": "ACTIVE",
"without_product": false,
"sort": "created_at:desc"
}
}有关完整的API文档,请参阅各个工具文件。
故障排除
常见问题
身份验证错误
Failed to retrieve materials: Invalid token provided解决方案:验证Claude Desktop配置中的JWT令牌格式和过期时间。
工具不可用
Unknown tool: get_materials解决方案:检查功能标志是否在中启用 wrangler.toml.
CORS错误
解决方案:确保请求包含正确的标头和来源。
调试模式
通过检查Cloudflare Workers日志启用详细日志记录:
wrangler tail --format pretty贡献
我们欢迎捐款!请查看我们的 Developpent.md 指南:
- 开发设置
- 编码标准
- 测试要求
- 安全指南
拉取请求流程
- 分叉存储库
- 创建要素分支
- 通过测试实施更改
- 更新文档
- 提交拉取请求
文档
部署
生产检查清单
- \[\]所有测试均通过
- \[\]TypeScript编译成功
- \[\]已配置功能标志
- \[\]可访问健康端点
- \[\]克劳德桌面配置已更新
- \[\]安全审查已完成
回滚程序
# Quick feature disable
# Set feature flag to "false" in wrangler.toml
npm run deploy
# Full rollback
git revert HEAD
npm run deploy许可证
此项目根据ISC许可证获得许可-请参阅 许可证 文件以获取详细信息。
支持
对于问题和疑问:
更新日志
v2.9.0(当前)
- 主要发布:新增23个产品管理工具(CRUD操作)
- 产品:完整CRUD+批量操作+BOM过滤查询
- 分类:完成类别管理(创建、读取、更新、删除)
- 物料清单:完整的BOM生命周期+COGS细分+定价建议+使用情况跟踪
- 材料用途:完成BOM的材料使用管理
- 所有工具都遵循TDD,并进行全面的单元测试(通过80多项测试)
- 活动工具总数: 39工具 (从16上升)
v2.8.0
- 添加了产品管理工具(get_products、get_categories、get_boms)
- 支持具有BOM和路线的复杂产品结构
- 类别过滤和管理
- 物料清单中的销货成本(COGS)计算
- 所有产品工具的全面单元测试
v2.7.0
- 添加了批次管理和供应商跟踪
- 批量操作(创建、更新、删除)
- 增强的过滤功能
v2.4.0
- 新增物料管理工具(按ID获取、更新、删除)
- 通过净化日志记录提高安全性
- 添加了全面的错误处理
- 增强的身份验证
v2.3.0
- 添加了带过滤的get_materials工具
- 固定身份验证标头处理
- 改进文档
v2.2.0版本
- 添加散装材料创建
- 增强的错误处理
______________________________________________________________________
使用TypeScript、Cloudflare Workers和安全最佳实践构建。
