PartsBox MCP服务器
使用FastMCP的PartsBox API的模型上下文协议(MCP)服务器。该服务器使AI助手能够与您的电子元件PartsBox库存管理系统进行交互。
概述
零件箱 是电子元件的库存管理系统。此MCP服务器提供以下工具:
- 管理零件及其元数据
- 跟踪库存水平和位置
- 处理批次和库存条目
- 管理存储位置
- 处理项目和BOM(物料清单)
- 处理订单并接收库存
需求
- Python 3.10+
- uv包管理器
- PartsBox API密钥(在设置|数据中生成)
设置
1.安装依赖项
uv sync2.设置环境变量
创建一个 .env 项目根目录中的文件:
PARTSBOX_API_KEY=partsboxapi_your_api_key_here安全说明: 小心保护API密钥,因为它提供了对PartsBox数据库的完全访问。
环境变量
| 变量 | 默认值 | 描述 |
|---|---|---|
PARTSBOX_API_KEY | (必需) | 您的PartsBox API密钥 |
PARTSBOX_MCP_DEBUG | true | 启用定时/日志中间件 |
PARTSBOX_MCP_MASK_ERRORS | false | 向客户端隐藏内部错误详细信息 |
PARTSBOX_BLOB_STORAGE_ROOT | /mnt/blob-storage | 资源文件共享存储目录的路径 |
PARTSBOX_BLOB_STORAGE_MAX_SIZE_MB | 100 | blob存储的最大文件大小(MB) |
PARTSBOX_BLOB_STORAGE_TTL_HOURS | 24 | 存储Blob的默认生存时间(小时) |
3.运行服务器
uv run python partsbox_mcp_server.pyAPI概述
PartsBox API是面向操作的(而非REST),并提供:
零部件管理
- 创建、检索、更新和删除零件
- 管理替代品和元部件
- 处理自定义字段
库存管理
- 添加和删除库存
- 在不同地点之间移动库存
- 更新库存条目
- 按零件或存储位置检索库存
大量
- 获取并更新批次数据
- 跟踪批次信息
存储
- 管理存储位置
- 归档和恢复位置
- 按地点汇总库存
项目
- 创建和管理BOM
- 处理物料清单条目
- 跟踪项目构建
订单
- 创建和管理订单
- 添加订单条目
- 从订单中接收库存
- 管理订单生命周期
可用工具
零件API
| 工具 | 说明 |
|---|---|
list_parts | 使用分页和JMESPath查询列出所有部分 |
get_part | 获取特定零件的详细信息 |
create_part | 创建新零件 |
update_part | 更新现有零件 |
delete_part | 删除零件 |
add_meta_part_ids | 向元部件添加成员 |
remove_meta_part_ids | 从元部件中删除成员 |
add_substitute_ids | 向零件添加替代品 |
remove_substitute_ids | 从零件中删除替代品 |
get_part_storage | 按存储位置获取汇总库存 |
get_part_lots | 获取零件的单个批次条目 |
get_part_stock | 获取零件的总库存计数 |
API库存
| 工具 | 说明 |
|---|---|
add_stock | 将库存添加到库存 |
remove_stock | 从库存中删除库存 |
move_stock | 在不同地点之间移动库存 |
update_stock | 更新库存条目 |
大量API
| 工具 | 说明 |
|---|---|
list_lots | 列出所有批次 |
get_lot | 获取批次详细信息 |
update_lot | 更新批次信息 |
存储API
| 工具 | 说明 |
|---|---|
list_storage_locations | 列出所有存储位置 |
get_storage_location | 获取存储位置详细信息 |
update_storage_location | 更新存储位置元数据 |
rename_storage_location | 重命名存储位置 |
change_storage_settings | 修改存储设置(完整、单个零件、仅现有零件) |
archive_storage_location | 将存储位置存档 |
restore_storage_location | 恢复存档位置 |
list_storage_parts | 按零件列出某个位置的汇总库存 |
list_storage_lots | 列出某个地点的各个地块 |
API项目
| 工具 | 说明 |
|---|---|
list_projects | 列出所有项目/BOM |
get_project | 获取项目详细信息 |
create_project | 创建新项目 |
update_project | 更新项目元数据 |
delete_project | 删除项目 |
archive_project | 归档项目 |
restore_project | 还原已存档的项目 |
get_project_entries | 获取项目的BOM条目 |
add_project_entries | 向项目BOM添加条目 |
update_project_entries | 更新物料清单条目 |
delete_project_entries | 从BOM表中删除条目 |
get_project_builds | 获取项目的构建历史记录 |
get_build | 获取构建详细信息 |
update_build | 更新构建信息 |
订单API
| 工具 | 说明 |
|---|---|
list_orders | 列出所有订单 |
get_order | 获取订单详细信息 |
create_order | 创建新订单 |
get_order_entries | 获取订单中的行项目 |
add_order_entries | 向订单中添加项目 |
delete_order_entry | 从订单中删除项目 |
receive_order | 处理收到的库存 |
文件API
| 工具 | 说明 |
|---|---|
get_image | 下载零件图像进行显示(可选择调整大小) |
get_image_info | 无需下载即可获取图像的元数据 |
get_image_size_estimate | 调整大小后估计尺寸和大小 |
get_file | 下载文件(数据表、图像等) |
get_file_url | 获取文件的下载URL |
get_image_resource | 将图像存储在共享存储中并返回资源标识符 |
get_file_resource | 将文件存储在共享存储中并返回资源标识符 |
MCP资源
资源通过URI模板提供对文件和图像的只读访问:
| 资源URI | 描述 |
|---|---|
partsbox://image/{file_id} | 直接在Claude Desktop中下载和渲染零件图像 |
partsbox://file/{file_id} | 下载文件(数据表、PDF等) |
partsbox://file-url/{file_id} | 获取下载URL而不获取文件 |
这 file_id 从零件数据(例如 part/img-id 字段返回 get_part 或 list_parts).
共享资源存储
服务器提供基于资源的文件存储方法(get_image_resource 和 get_file_resource)它允许通过映射的Docker卷与其他MCP服务器共享文件。这对于需要在服务之间传递文件的多容器工作流非常有用。
运作原理
- 文件从PartsBox下载并存储在共享blob存储目录中
- 每个文件都有一个唯一的资源标识符(格式:
blob://TIMESTAMP-HASH.EXT) - 其他MCP服务器可以使用标识符直接从映射的卷访问这些文件
- 使用SHA256哈希自动对文件进行重复数据消除
- 文件在可配置的TTL后过期(默认值:24小时)
配置
使用环境变量配置共享存储:
| 变量 | 默认值 | 描述 |
|---|---|---|
PARTSBOX_BLOB_STORAGE_ROOT | /mnt/blob-storage | 共享存储目录的路径 |
PARTSBOX_BLOB_STORAGE_MAX_SIZE_MB | 100 | 最大文件大小(MB) |
PARTSBOX_BLOB_STORAGE_TTL_HOURS | 24 | 默认生存时间(小时) |
Docker卷设置
要启用MCP服务器之间的资源共享,请装载共享卷:
# docker-compose.yml
version: '3.8'
services:
partsbox-mcp:
image: partsbox-mcp:latest
volumes:
- blob-storage:/mnt/blob-storage
environment:
- PARTSBOX_BLOB_STORAGE_ROOT=/mnt/blob-storage
other-mcp-server:
image: other-mcp:latest
volumes:
- blob-storage:/mnt/blob-storage
volumes:
blob-storage:用法示例
# Store an image in shared storage
response = get_image_resource("img_resistor_10k")
# Returns: ResourceResponse(
# success=True,
# resource_id="blob://1733437200-a3f9d8c2b1e4f6a7.png",
# filename="img_resistor_10k.png",
# mime_type="image/png",
# size_bytes=65536,
# sha256="a3f9d8c2...",
# expires_at="2024-12-08T12:00:00Z"
# )
# Other MCP servers can now access the file at:
# /mnt/blob-storage/17/33/blob://1733437200-a3f9d8c2b1e4f6a7.pngJMESPath查询支持
所有列表操作都支持用于过滤和投影的JMESPath查询。此服务器通过自定义函数扩展了标准JMESPath,用于安全的null处理和数据转换:
自定义函数
| 功能 | 说明 | 示例 |
|---|---|---|
nvl(value, default) | 如果值为null,则返回默认值 | nvl("part/name", '') |
int(value) | 转换为整数(失败时为null) | int("custom-field/qty") |
str(value) | 将任何值转换为字符串 | str("part/id") |
regex_replace(pattern, repl, value) | 正则表达式查找和替换 | regex_replace('[^0-9]', '', "value") |
空安全查询
重要: 许多PartsBox字段都可以为空。使用 nvl() 为了防止在筛选这些字段时出错:
# UNSAFE - fails if "part/name" is null
query="[?contains(\"part/name\", 'resistor')]"
# SAFE - handles null values
query="[?contains(nvl(\"part/name\", ''), 'resistor')]"查询示例
# Search parts by name (null-safe)
query="[?contains(nvl(\"part/name\", ''), 'capacitor')]"
# Filter by manufacturer
query="[?nvl(\"part/manufacturer\", '') == 'Texas Instruments']"
# Combine conditions
query="[?contains(nvl(\"part/name\", ''), 'resistor') && \"stock/total\" > `0`]"
# Sort results
query="sort_by(@, &\"part/name\")"重要说明
认证
所有API请求都需要在授权标头中传递API密钥:
Authorization: APIKey partsboxapi_[your-key]时间戳
PartsBox将时间戳存储为64位UNIX UTC时间戳。时区转换是您的责任。
库存计算
PartsBox不存储总库存计数。库存盘点是通过遍历库存历史来计算的。
速率限制
可能会强制执行费率限制。为您的使用计划潜在的速率限制。
API限制
- 无法使用API创建用户界面应用程序(仅限自动化)
- 商业计划用户获得标准支持
- 免费帐户用户不应期望收到电子邮件回复
克劳德集成
此MCP服务器与Claude Desktop和Claude Code(CLI)配合使用。看 使用MCPServer.md 了解详细的配置说明。
相关资源
开发中
该项目旨在与vscode和devcontainers插件配合使用。我还建议运行claude——在devcontainer中危险地跳过权限一次,以获得最佳结果😁
