MCP-CAN:虚拟CAN+MCP服务器
专用于将车辆CAN/OBD数据传输到LLM/SLM的MCP服务器。它在虚拟CAN总线上模拟ECU,通过DBC进行解码,并通过SSE公开MCP工具——默认情况下不需要硬件。
______________________________________________________________________
亮点
- CAN/OBD的MCP服务器→ LLM/SLM(工具+SSE上的DBC元数据)。
- 虚拟CAN后端(python CAN)开箱即用;Linux上的可选SocketCAN/vCAN。
- DBC驱动的编码/解码
cantools. - ECU模拟器,可流式传输多条消息以及演示OBD-II响应。
- MCP服务器(SSE)公开用于帧、过滤、监视和DBC信息的工具。
- 类型CLI:
mcp-can(模拟、服务器、帧、解码、监视、obd请求)。 - Dockerfile+docker组成服务器+模拟器。
- 单元测试、类型提示、lint配置(ruff、mypy)。
仓库布局
src/mcp_can/
- cli.py –打字机命令 - bus.py –python can助手 - dbc.py –DBC加载/解码 - config.py –环境设置(MCP_CAN_*) - models.py –简单的数据类 - simulator/runner.py –ECU模拟器+OBD应答器 - server/fastmcp_server.py –MCP工具(SSE) - obd.py –最小OBD-II请求/响应助手
vehicle.dbc–CAN数据库示例simulate-ecus.py,can-mcp.py–入口点docker/compose.yml,Dockerfiletests/–单元测试
先决条件
- Python 3.10+
- (可选)Docker/Docker Compose
- (可选)Ollama(如果您想要本地LLM后端)
安装(Python)
从repo根目录:
pip install -r requirements.txt
pip install -e .快速启动(模拟器+MCP服务器)
两个终端:
# Terminal A: start ECU simulator on virtual bus0
mcp-can simulate
# Terminal B: start MCP server (SSE on 6278)
mcp-can server --port 6278单个进程(如果虚拟后端不跨进程共享,则在Windows上会有所帮助):
mcp-can demo --port 6278交互示例:
mcp-can frames --seconds 2
mcp-can decode --id 0x100 --data "01 02 03 04 05 06 07 08"
mcp-can monitor --signal ENGINE_SPEED --seconds 3
mcp-can obd-request --service 0x01 --pid 0x0DMCP检查器(用于工具的GUI)
使用官方检查器探索和调用您的MCP工具,而无需编写主机:
npx @modelcontextprotocol/inspector出现提示时,连接到服务器:
- 网址:
http://localhost:6278/sse
然后,您可以:
- 列出工具和资源(
read_can_frames,decode_can_frame,filter_frames,monitor_signal,dbc_info). - 调用工具(例如监视器
ENGINE_SPEED5秒)并实时查看JSON输出。
与Ollama(当地LLM)一起使用
- 确保Olama正在运行:
ollama serve并拉取一个模型:ollama pull llama3 - 运行模拟器+MCP服务器(请参阅快速入门)。
- 将支持MCP的主机指向
http://localhost:6278/sse并将其模型端点配置为http://localhost:11434使用您的型号名称(例如。,llama3). - 提示主机:“监控ENGINE_SPEED 5秒”或“列出所有DBC消息”
如果你需要一个最小的主机,配对 @modelcontextprotocol/sdk 使用Ollama(请参阅SDK文档)或使用Inspector进行手动工具调用。
示例主机配置(本地Ollama的OpenAI兼容端点):
{
"model": {
"type": "openai-compatible",
"baseUrl": "http://localhost:11434/v1",
"model": "llama3"
},
"mcpServers": {
"can-mcp-server": {
"serverUrl": "http://localhost:6278/sse"
}
}
}CLI参考
mcp-can simulate–使用启动ECU模拟器vehicle.dbc.mcp-can server [--port 6278]–运行MCP SSE服务器。mcp-can frames --seconds 1.0将原始帧捕获为JSON格式。mcp-can decode --id --data–解码单个帧。mcp-can monitor --signal --seconds 2.0看一个信号。mcp-can obd-request --service [--pid ]–演示OBD-II请求。
配置
Env变量(前缀 MCP_CAN_):
CAN_INTERFACE(默认值virtual)CAN_CHANNEL(默认值bus0)DBC_PATH(默认值vehicle.dbc)MCP_PORT(默认值6278)
您可以在 .env 位于repo根目录的文件。
码头工人
构建:
docker build -t mcp-can .运行(组合服务器+模拟器):
docker run -d --name mcp-can -p 6278:6278 -p 5000:5000 -p 8080:8080 mcp-can作曲(从 docker/):
docker compose up -d --build开发与测试
pip install -r requirements.txt
pip install -e .
pip install pytest ruff mypy
ruff check .
mypy src
pytest -q故障排除
- 没有相框?确保模拟器和服务器使用相同的接口/通道(
virtual/bus0默认情况下)。 - DBC失踪?集
MCP_CAN_DBC_PATH或地点vehicle.dbc在repo根目录中。 - Docker网络:公开
6278因此,您的MCP主机可以连接到SSE。
许可证
麻省理工学院(见 LICENSE).仅用于教育/原型制作——使用经过认证的硬件进行实际的汽车工作。
