- ํ๋ก์ ํธ ์๊ฐ
- ์์ํ๊ธฐ
- ์ฌ์ฉ๋ฒ
- ์ํคํ ์ฒ
- ์ค์
- ๋ก๋๋งต
- ์๋ ค์ง ์ ์ฝ์ฌํญ
- ๊ธฐ์ฌํ๊ธฐ
- ๋ผ์ด์ ์ค
- ์ฐ๋ฝ์ฒ
- ๊ฐ์ฌ์ ๊ธ
CANoe MCP Advanced ํ๋ก์ ํธ์ ์ค์ ๊ฒ์ ํ์ํฉ๋๋ค. ์ด ํ๋ก์ ํธ๋ ๋ง์คํฐ ์ ์ด ํ๋ก๊ทธ๋จ(MCP)์ ์ ์ ์ ๋ด์, ๊ณ ๊ธ AI ๊ธฐ๋ฅ์ ํตํด ๋ณต์กํ ์์คํ ์ ์ง๋ฅ์ ์ผ๋ก ๊ฐ๋ , ๊ด๋ฆฌ ๋ฐ ์ต์ ํํ๋๋ก ์ค๊ณ๋์์ต๋๋ค. ๋ฐ์ดํฐ ์ฒ๋ฆฌ, ์์จ์ ์ธ ์์ฌ ๊ฒฐ์ , ๋ค์ํ ํตํฉ ๊ตฌ์ฑ ์์ ์ ๋ฐ์ ์์ ์ ์กฐ์ ํ์ฌ ํ์ํ ํจ์จ์ฑ๊ณผ ์ ํ์ฑ์ผ๋ก ์ฌ์ ์ ์๋ ๋ชฉํ๋ฅผ ๋ฌ์ฑํ๋ ์ค์ ์ ๊ฒฝ๊ณ ์ญํ ์ ํฉ๋๋ค.
์ด AI ์ ์ด ์์คํ ์ ๋ค์์ ์ ๊ณตํ๋๋ก ์ค๊ณ๋์์ต๋๋ค:
- ์ง๋ฅํ ์๋ํ: ์ ์ํ ์๊ณ ๋ฆฌ์ฆ์ผ๋ก ์ผ์์ ์ด๊ณ ๋ณต์กํ ์์ ์ ์๋ํํฉ๋๋ค.
- ์ค์๊ฐ ๋ชจ๋ํฐ๋ง: ์์คํ ์ํ๋ฅผ ์ง์์ ์ผ๋ก ๊ฐ์ํ๊ณ ๋ถ์ํฉ๋๋ค.
- ์์ธก ๋ถ์: ์ ์ฌ์ ๋ฌธ์ ๋ฅผ ์์ธกํ๊ณ ๋ฆฌ์์ค ํ ๋น์ ์ต์ ํํฉ๋๋ค.
- ์ ์ํ ์ ์ด: ํ๊ฒฝ ํผ๋๋ฐฑ ๋ฐ ์ฑ๋ฅ ์งํ์ ๋ฐ๋ผ ์์คํ ๋งค๊ฐ๋ณ์๋ฅผ ๋์ ์ผ๋ก ์กฐ์ ํฉ๋๋ค.
- ๋ณด์ ๋ฐ ๋ณต์๋ ฅ ์๋ ์ด์: ์ค์ํ ์ธํ๋ผ์ ๋ํ ๊ฐ๋ ฅํ๊ณ ๋ด๊ฒฐํจ์ฑ ์๋ ์ ์ด๋ฅผ ๋ณด์ฅํฉ๋๋ค.
Connection & Configuration (4)
- CANoe ์ฐ๊ฒฐ (Configuration ์์ด๋ ๊ฐ๋ฅ)
- Configuration ๋ก๋/์ ์ฅ
- CAPL ์ปดํ์ผ
Measurement Control (4)
- Measurement ์์/์ค์ง/๋ฆฌ์
- ์ํ ํ์ธ
Signal Operations (2) โญ
- CAN ์ ํธ ์ฝ๊ธฐ/์ฐ๊ธฐ
- Raw value ์ง์
Status & Info (4)
- CAN Bus ํต๊ณ
- Database/Node ์ ๋ณด
- Logging blocks
Variables (4)
- Environment ๋ณ์ ์ฝ๊ธฐ/์ฐ๊ธฐ
- System ๋ณ์ ์ฝ๊ธฐ/์ฐ๊ธฐ
Test Execution (5)
- Test environment/module ์กฐํ
- Test ์คํ
Logging & Replay (4)
- Logging block ๊ด๋ฆฌ
- Replay block ์ ์ด
Diagnostics (5)
- ์ง๋จ ์์ฒญ ์ ์ก
- CAPL ํจ์ ํธ์ถ
- Symbols/Messages ์กฐํ
์ด ํ๋ก์ ํธ๋ ๊ณ ๊ธ ๊ธฐ๋ฅ์ ์ ๊ณตํ๊ธฐ ์ํด ๊ฐ๋ ฅํ ๊ธฐ์ ์คํ์ ํ์ฉํฉ๋๋ค.
Python- FastMCP - MCP ์๋ฒ ํ๋ ์์ํฌ
- py-canoe - CANoe COM API ๋ํผ
- asyncio - ๋น๋๊ธฐ ์ฒ๋ฆฌ
- pydantic - ๋ฐ์ดํฐ ๊ฒ์ฆ
- pywin32 - Windows COM ์ธํฐํ์ด์ค
CANoe MCP Advanced์ ๋ก์ปฌ ๋ณต์ฌ๋ณธ์ ์ค์ ํ๊ณ ์คํํ๋ ค๋ฉด ๋ค์์ ๊ฐ๋จํ ๋จ๊ณ๋ฅผ ๋ฐ๋ฅด์ญ์์ค.
์์คํ ์ ๋ค์ ์ํํธ์จ์ด๊ฐ ์ค์น๋์ด ์๋์ง ํ์ธํ์ญ์์ค:
Python 3.8+pipVector CANoe 19.4+py-canoe ๋ผ์ด๋ธ๋ฌ๋ฆฌWindows 10/11Claude Code (MCP ํด๋ผ์ด์ธํธ)
- ์ ์ฅ์ ํด๋ก :
git clone https://github.com/VectorCANoe/CANoe-mcp.git cd CANoe-mcp - ๊ฐ๋ฐ ๋ชจ๋ ์ค์น:
pip install -e . - Claude Code์ MCP ์๋ฒ ๋ฑ๋ก:
~/.mcp.json์ ๋ค์์ ์ถ๊ฐํ์ญ์์ค:{ "mcpServers": { "canoe-advanced": { "command": "python", "args": ["-m", "canoe_mcp_advanced"], "env": {"PYTHONIOENCODING": "utf-8"} } } } - Claude Code ์ฌ์์.
์ค์น๋๋ฉด CANoe MCP Advanced๋ฅผ ํ์ฑํํ๊ณ ์์คํ ์ ๊ด๋ฆฌํ๋๋ก ๊ตฌ์ฑํ ์ ์์ต๋๋ค.
# CANoe ์ฐ๊ฒฐ
attach_canoe(allow_no_config=True)
# Configuration ๋ก๋
open_configuration("path/to/config.cfg")
# Measurement ์์
start_measurement()
# Signal ์ฝ๊ธฐ
get_signal_value(
bus="CAN",
channel=1,
message="EngineState",
signal="EngineSpeed"
)
# Signal ์ฐ๊ธฐ
set_signal_value(
bus="CAN",
channel=1,
message="EngineState",
signal="EngineSpeed",
value=3000.0
)
# Measurement ์ค์ง
stop_measurement()# 1. CANoe ์ฐ๊ฒฐ
attach_canoe()
# 2. CAPL ์ปดํ์ผ
compile_capl_nodes()
# 3. Measurement ์์
start_measurement()
# 4. ์ ํธ ๋ชจ๋ํฐ๋ง & ์ ์ด
while running:
speed = get_signal_value(...)
if speed > threshold:
set_signal_value(...)
# 5. Test ์คํ
execute_test_module(test_env="TestEnv", test_module="TestModule")
# 6. ํต๊ณ ํ์ธ
stats = get_can_bus_statistics(channel=1)
# 7. Measurement ์ค์ง
stop_measurement()โ 27๊ฐ ๋๊ตฌ ์๋ ํ์ธ
- CANBasic ์ํ Configuration์ผ๋ก ๊ฒ์ฆ
- ํต์ฌ ์ํฌํ๋ก์ฐ ์๋ฒฝ ์๋
- Signal ์ฝ๊ธฐ/์ฐ๊ธฐ ์ฑ๊ณต (0 โ 3000 rpm)
CANoe MCP Advanced๋ ๋ค์ํ ์ ์ด ์๊ตฌ ์ฌํญ์ ์ฒ๋ฆฌํ๋๋ก ๋ชจ๋์ ๋ฐ ํ์ฅ ๊ฐ๋ฅํ ์ํคํ ์ฒ๋ก ์ค๊ณ๋์์ต๋๋ค.
canoe-mcp-advanced/
โโโ canoe_mcp_advanced/
โ โโโ server.py # FastMCP ์๋ฒ (32 tools)
โ โโโ canoe_controller.py # CANoe ์ ์ด ๋ก์ง (31 methods)
โ โโโ tools/ # 11๊ฐ ๋๊ตฌ ๋ชจ๋
โ โ โโโ connection.py
โ โ โโโ configuration.py
โ โ โโโ measurement.py
โ โ โโโ signals.py # โญ ํต์ฌ
โ โ โโโ tests.py
โ โ โโโ environment.py
โ โ โโโ status.py
โ โ โโโ logging.py
โ โ โโโ replay.py
โ โ โโโ diagnostics.py
โ โ โโโ database.py
โ โโโ utils/
โ โโโ error_handler.py # ์๋ฌ ์ฒ๋ฆฌ
โโโ pyproject.toml
CANoe MCP Advanced์ ๋์์ ํน์ ์ด์ ํ๊ฒฝ์ ๋ง๊ฒ ๊ด๋ฒ์ํ๊ฒ ๊ตฌ์ฑํ ์ ์์ต๋๋ค.
๋ชจ๋ ๊ธฐ๋ณธ ์ค์ ์ config.yaml (๋๋ config.json, .env ํ์ผ ๋ฑ)์ ํตํด ๊ด๋ฆฌ๋ฉ๋๋ค.
# Example config.yaml
system:
name: "CanoeAlphaControlUnit"
log_level: "INFO"
environment: "development"
ai_engine:
model_path: "models/mcp_model.pkl"
decision_threshold: 0.7
learning_rate: 0.001
data_sources:
sensor_feed:
type: "local_file"
path: "data/sensor_logs.csv"
database:
type: "sqlite"
path: "data/mcp_database.db"- ํ๊ฒฝ ๋ณ์: API ํค ๋ฐ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋น๋ฐ๋ฒํธ์ ๊ฐ์ ๋ฏผ๊ฐํ ์ ๋ณด๋ ํ๊ฒฝ ๋ณ์๋ฅผ ํตํด ๊ด๋ฆฌํด์ผ ํฉ๋๋ค.
- ๋ชจ๋๋ณ ์ค์ : ๊ฐ AI ๋ชจ๋ ๋๋ ๊ตฌ์ฑ ์์๋ ๊ธฐ๋ณธ ๊ตฌ์ฑ ๋ด์ ์์ฒด ๊ตฌ์ฑ ํ์ผ ๋๋ ์น์ ์ ๊ฐ์ง ์ ์์ต๋๋ค.
- ์ฐธ๊ณ : ์ผ๋ถ ๋๊ตฌ ๋ฐ ๊ธฐ๋ฅ์ ํน์ CANoe Configuration ์ค์ ์ ๋ฐ๋ผ ๋ฌ๋ผ์ง๋๋ค.
์ ์๋ ๊ธฐ๋ฅ ๋ฐ ์๋ ค์ง ๋ฌธ์ ๋ชฉ๋ก์ ์ด์๋ฅผ ์ฐธ์กฐํ์ญ์์ค.
- API ๋ฌธ์ (์์ )
- ์์ (์์ )
- [๋ ์์ธํ ๊ธฐ๋ฅ ๋ก๋๋งต ํญ๋ชฉ ์ถ๊ฐ ๊ณ ๋ ค]
- Windows ์ ์ฉ: COM API ์ฌ์ฉ์ผ๋ก Windows์์๋ง ์๋
- CANoe ๋ผ์ด์ ์ค: Vector CANoe ์ ์ ๋ผ์ด์ ์ค ํ์
- Configuration ์์กด์ฑ: ์ผ๋ถ ๋๊ตฌ๋ CANoe Configuration์ด ํ์ํฉ๋๋ค (Configuration ์น์ ์์ ์ธ๊ธ)
๊ธฐ์ฌ๋ ์คํ ์์ค ์ปค๋ฎค๋ํฐ๋ฅผ ๋ฐฐ์ฐ๊ณ , ์๊ฐ์ ์ฃผ๊ณ , ์ฐฝ์กฐํ๋ ๋๋ผ์ด ๊ณต๊ฐ์ผ๋ก ๋ง๋ญ๋๋ค. ๊ทํ์ ๋ชจ๋ ๊ธฐ์ฌ๋ ๋งค์ฐ ๊ฐ์ฌํฉ๋๋ค.
๋ ๋์ ์ ์์ด ์๋ค๋ฉด, ๋ฆฌํฌ์งํ ๋ฆฌ๋ฅผ ํฌํฌํ๊ณ ํ ๋ฆฌํ์คํธ๋ฅผ ์์ฑํ์ญ์์ค. ๋๋ ๋จ์ํ "enhancement" ํ๊ทธ๋ก ์ด์๋ฅผ ์ด ์๋ ์์ต๋๋ค. ํ๋ก์ ํธ์ ๋ณ์ ์ฃผ๋ ๊ฒ์ ์์ง ๋ง์ญ์์ค! ๋ค์ ํ๋ฒ ๊ฐ์ฌํฉ๋๋ค!
- ํ๋ก์ ํธ ํฌํฌ
- ๊ธฐ๋ฅ ๋ธ๋์น ์์ฑ (
git checkout -b feature/AmazingFeature) - ๋ณ๊ฒฝ ์ฌํญ ์ปค๋ฐ (
git commit -m 'Add some AmazingFeature') - ๋ธ๋์น์ ํธ์ (
git push origin feature/AmazingFeature) - ํ ๋ฆฌํ์คํธ ์ด๊ธฐ
MIT ๋ผ์ด์ ์ค์ ๋ฐ๋ผ ๋ฐฐํฌ๋ฉ๋๋ค. ์์ธํ ๋ด์ฉ์ LICENSE ํ์ผ์ ์ฐธ์กฐํ์ญ์์ค.
Juns - junexi0828@gmail.com GitHub: @junexi0828 ํ๋ก์ ํธ ๋งํฌ: https://github.com/VectorCANoe/CANoe-mcp
- py-canoe - CANoe Python ๋ํผ
- FastMCP - MCP ์๋ฒ ํ๋ ์์ํฌ
- Model Context Protocol - MCP ํ์ค
- canoe-mcp - CANoe MCP ์๋ฒ ํตํฉ์ ์ํ ๊ธฐ๋ฐ
v1.0.0 - Production Ready ๐