dbc-mcp-server

g1331/dbc-mcp-server

3.3

If you are the rightful owner of dbc-mcp-server and would like to certify it and/or have it hosted online, please leave a comment on the right or send an email to henry@mcphub.com.

The DBC MCP Server is a robust tool designed for managing DBC files, enabling users to create, edit, and delete signals, messages, and nodes efficiently.

Tools
  1. open_dbc

    Open or create a DBC file.

  2. get_dbc_info

    Retrieve DBC file information and statistics.

  3. list_signals

    List all signals.

  4. get_signal_info

    Get detailed information about a specific signal.

  5. search_signals

    Search and filter signals.

  6. create_signal

    Create a signal within a specified message.

  7. add_signal_to_message

    Convenience function to create a message and signal.

  8. update_signal

    Update signal properties.

  9. delete_signal

    Delete a signal.

  10. encode_signal

    Encode a physical value to a raw value.

  11. decode_signal

    Decode a raw value to a physical value.

  12. list_messages

    List all messages.

  13. create_message

    Create a new message.

  14. delete_message

    Delete a message.

  15. list_nodes

    List all nodes.

  16. create_node

    Create a new node.

  17. update_node

    Rename a node.

  18. delete_node

    Delete a node.

DBC MCP Server

基于 fastmcp 和 cantools 库的 MCP 服务器,用于创建、编辑和删除 DBC 文件中的信号、消息和节点。

Python Version Coverage

🚀 最新改进

本项目经过全面重构和功能扩展,主要改进包括:

✅ 核心功能扩展

  • 消息管理: 完整的消息CRUD操作
  • 信号搜索: 按名称、单位、长度等条件搜索信号
  • 信号编码/解码: 原始值和物理值转换
  • DBC文件信息: 获取文件统计信息和结构概览
  • 改进的信号创建: 重新设计了信号创建逻辑,移除不合理的默认消息

✅ 代码质量提升

  • 测试覆盖率: 从基础测试提升到60%覆盖率
  • 类型安全: 完整的mypy类型检查支持
  • 代码质量: 通过ruff格式和质量检查
  • CI/CD: 完整的GitHub Actions工作流

✅ 兼容性修复

  • cantools兼容: 修复了cantools导入问题
  • Python版本: 支持Python 3.10+

功能特性

核心功能

  • DBC文件操作:打开、创建、修改DBC文件
  • 消息管理:创建、删除、列出消息 (create_message, delete_message, list_messages)
  • 信号管理:创建、更新、删除、搜索信号
  • 节点管理:创建、更新、删除和列出节点

高级功能

  • 信号详细信息:获取特定信号的完整信息 (get_signal_info)
  • 信号搜索:按名称模式、单位、长度范围搜索信号 (search_signals)
  • 信号编码/解码:原始值与物理值转换 (encode_signal, decode_signal)
  • 文件信息:获取DBC文件统计信息 (get_dbc_info)
  • 便利函数:一步创建消息和信号 (add_signal_to_message)

技术特性

  • 内存缓存:提高文件操作性能
  • 类型安全:完整的类型提示和mypy检查支持
  • 全面测试:60%测试覆盖率,包含边界情况测试
  • 双重模式:支持作为 MCP 服务器或 Python 库使用
  • CI/CD:完整的GitHub Actions工作流

安装

从 PyPI 安装(推荐)

pip install dbc-mcp-server

从源码安装

# 克隆项目
git clone https://github.com/g1331/dbc-mcp-server.git
cd dbc-mcp-server

# 安装依赖
pip install -e .

# 或使用 uv(推荐)
uv sync

开发环境安装

# 安装开发依赖
pip install -e ".[dev]"


# 或使用 uv
uv sync --group dev

使用方法

1. 作为 MCP 服务器运行

MCP 服务器需要通过 MCP 客户端(如 Claude Desktop、Cline 等)来使用。你可以通过以下两种方式启动服务器:

# 使用命令行工具
dbc-mcp-server

# 或直接运行模块
python -m dbc_mcp_server.main
配置 MCP 客户端

在你的 MCP 客户端配置文件中添加以下配置:

{
  "mcpServers": {
    "dbc-server": {
      "command": "uv",
      "args": ["run", "python", "-m", "dbc_mcp_server.main"],
      "cwd": "/path/to/DBC-mcp-server"
    }
  }
}

或者使用 Python 直接运行:

{
  "mcpServers": {
    "dbc-server": {
      "command": "python",
      "args": ["-m", "dbc_mcp_server.main"],
      "cwd": "/path/to/DBC-mcp-server",
      "env": {
        "PYTHONPATH": "/path/to/DBC-mcp-server/src"
      }
    }
  }
}
可用的 MCP 工具

服务器提供以下 MCP 工具:

文件操作

  1. open_dbc - 打开或创建 DBC 文件
  2. get_dbc_info - 获取DBC文件信息和统计

信号操作 3. list_signals - 列出所有信号 4. get_signal_info - 获取特定信号详细信息 5. search_signals - 搜索和过滤信号 6. create_signal - 在指定消息中创建信号 7. add_signal_to_message - 便利函数:创建消息和信号 8. update_signal - 更新信号属性 9. delete_signal - 删除信号 10. encode_signal - 物理值编码为原始值 11. decode_signal - 原始值解码为物理值

消息操作 12. list_messages - 列出所有消息 13. create_message - 创建新消息 14. delete_message - 删除消息

节点操作 15. list_nodes - 列出所有节点 16. create_node - 创建新节点 17. update_node - 重命名节点 18. delete_node - 删除节点

2. 作为 Python 库使用

你可以在 Python 代码中直接使用这个库:

from dbc_mcp_server import (
    open_dbc, create_message, add_signal_to_message,
    get_dbc_info, search_signals, encode_signal, decode_signal
)

# 打开或创建 DBC 文件
result = open_dbc("vehicle.dbc")
print(f"打开结果: {result}")

# 创建消息
create_message("vehicle.dbc", "EngineData", 0x100, 8)

# 添加信号到消息(便利函数)
add_signal_to_message(
    path="vehicle.dbc",
    message_name="EngineData",
    message_id=0x100,
    message_length=8,
    signal_name="VehicleSpeed",
    start_bit=0,
    length=16,
    byte_order="little_endian",
    is_signed=False,
    scale=0.1,
    offset=0.0,
    minimum=0.0,
    maximum=250.0,
    unit="km/h",
    comment="车辆速度信号"
)

# 获取DBC文件信息
info = get_dbc_info("vehicle.dbc")
print(f"消息数: {info['total_messages']}, 信号数: {info['total_signals']}")

# 搜索信号
speed_signals = search_signals("vehicle.dbc", name_pattern="Speed")
print(f"速度相关信号: {speed_signals}")

# 信号编码/解码
encoded = encode_signal("vehicle.dbc", "VehicleSpeed", 100.5)  # 物理值 -> 原始值
decoded = decode_signal("vehicle.dbc", "VehicleSpeed", 1005)   # 原始值 -> 物理值
print(f"编码: {encoded}, 解码: {decoded}")

🧪 测试

运行测试

# 运行所有测试
pytest tests/ -v

# 运行测试并生成覆盖率报告
coverage run -m pytest tests/ -v --ignore=tests/test_performance.py
coverage report --show-missing

代码质量检查

# 类型检查
mypy src/dbc_mcp_server
mypy tests/

# 代码格式和质量检查
ruff check src/ tests/
ruff format src/ tests/

测试覆盖率

当前测试覆盖率: 60%

  • 核心功能: 完全覆盖
  • 边界情况: 全面测试
  • 错误处理: 完整验证

🔧 开发

项目结构

src/dbc_mcp_server/
├── __init__.py          # 包初始化和导出
├── main.py             # MCP服务器入口点
├── server.py           # 核心DBC操作功能
└── py.typed            # 类型检查标记

tests/
├── conftest.py         # 测试配置和fixtures
├── test_signal.py      # 信号操作测试
├── test_node.py        # 节点操作测试
├── test_new_features.py # 新功能测试
└── test_edge_cases.py  # 边界情况测试

贡献指南

  1. Fork项目
  2. 创建功能分支
  3. 添加测试用例
  4. 确保所有检查通过
  5. 提交Pull Request

📈 CI/CD

项目配置了完整的GitHub Actions工作流:

  • 多Python版本测试: Python 3.10, 3.11, 3.12
  • 代码质量检查: ruff, mypy
  • 测试覆盖率: 自动生成和上传
  • 安全扫描: safety, bandit
  • 包构建: 自动构建和验证

许可证

本项目基于 MIT 许可证开源 - 详见 文件。