模型上下文协议服务器

Labamu MCP Server是一个安全、生产就绪的模型上下文协议服务器,为Claude Desktop提供访问Labamu业务API的能力,包括材料库存管理、供应商管理、批次跟踪、客户数据和发票操作。

  • by baguskto
  • TypeScript
  • 本地部署
  • 更新于
在 GitHub 查看 baguskto/labamu-mcp

使用说明

多个MCP服务器

一个安全的、生产就绪的模型上下文协议(MCP)服务器,为Claude Desktop提供对Labamu业务API的访问,用于物料库存管理、供应商管理、批次跟踪、客户数据和发票操作。

概述

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 install

2.部署

# Build and deploy to Cloudflare Workers
npm run build
npm run deploy

3.配置

复制模板并配置您的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

添加新工具

  1. 创建工具类扩展 BaseTool
  2. 添加到服务器中的工具注册表
  3. 在中配置功能标志 wrangler.toml
  4. 编写全面的测试
  5. 更新文档

看 Developpent.md 详细指南。

安全

认证流程

  1. 存储在Claude Desktop环境变量中的JWT令牌
  2. 令牌通过以下方式传输 Authorization: Bearer 头球
  3. 服务器验证JWT格式和结构
  4. 令牌转发到上游Labamu API
  5. 在记录之前对响应数据进行清理

安全特性

  • 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:coverage

API 参考

物料管理

获取材料

{
  "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 指南:

  • 开发设置
  • 编码标准
  • 测试要求
  • 安全指南

拉取请求流程

  1. 分叉存储库
  2. 创建要素分支
  3. 通过测试实施更改
  4. 更新文档
  5. 提交拉取请求

文档

部署

生产检查清单

  • []所有测试均通过
  • []TypeScript编译成功
  • []已配置功能标志
  • []可访问健康端点
  • []克劳德桌面配置已更新
  • []安全审查已完成

回滚程序

# Quick feature disable
# Set feature flag to "false" in wrangler.toml
npm run deploy

# Full rollback
git revert HEAD
npm run deploy

许可证

此项目根据ISC许可证获得许可-请参阅 许可证 文件以获取详细信息。

支持

对于问题和疑问:

  1. 检查 故障排除部分
  2. 审查 安全指南
  3. 打开一个包含详细信息的问题

更新日志

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和安全最佳实践构建。