cad-mcp
cad-mcp
STEP 파일에 대한 CAD 형상 추론 기능을 LLM에 제공하는 MCP 서버입니다. STEP 파일을 넣고 자연어로 형상 관련 질문을 하면 검증 가능한 답변을 얻을 수 있습니다. build123d(OCCT 기반)와 MCP Python SDK를 기반으로 구축되었으며, Claude Code와 함께 로컬에서 실행됩니다.
설치
Python 3.12, arm64(Apple Silicon) 또는 x86-64가 필요합니다.
git clone https://github.com/your-org/cad-mcp.git
cd cad-mcp
python3.12 -m venv venv
venv/bin/pip install -r requirements.txt설치 스모크 테스트:
venv/bin/python smoke_test.py # loads bracket.step, checks bbox
venv/bin/python verify_server.py # connects over MCP stdio, calls all tools실행
Claude Code가 이 디렉토리를 열면 서버가 자동으로 시작됩니다(.mcp.json 포함). 수동으로 시작하려면 다음을 실행하세요:
venv/bin/python server.py다른 STEP 파일을 연결하려면 도구 호출 시 절대 경로를 전달하면 됩니다. 서버를 재시작할 필요가 없습니다.
도구
도구 | 반환값 |
| 트리 형태의 부품/어셈블리 계층 구조 |
| 바운딩 박스(mm) 및 부피(mm³) |
| 원통형 구멍: 위치, 지름, 깊이(mm) |
| 부품 참조 지점 간의 유클리드 거리(mm) |
| 질량(kg), 질량 중심(mm), 관성 모멘트(kg·mm²) |
데모
MCP 서버가 연결된 Claude Code에서 fixtures/bracket.step(100 × 60 × 10 mm 알루미늄 브래킷, 4개의 M5 클리어런스 홀)을 대상으로 질문한 5가지 예시입니다.
bracket.step은 단일 부품인가요, 아니면 어셈블리인가요?
도구: list_assembly_tree
{
"root": {
"type": "part",
"name": "part_root",
"part_id": "root",
"children": []
}
}단일 부품입니다. part_id: "root"가 다른 모든 도구에 전달됩니다.
전체 치수와 부피는 어떻게 되나요?
도구: get_part_dimensions
{
"part_id": "root",
"bbox_mm": { "x": 100.0, "y": 60.0, "z": 10.0 },
"volume_mm3": 59117.5266
}100 × 60 × 10 mm입니다. 부피는 순 부피(재료만 해당)이며, 전체 부피에서 4개의 구멍을 뺀 값입니다.
구멍은 몇 개이고 크기는 어떻게 되나요?
도구: find_holes
{
"holes": [
{ "center_x_mm": -42.0, "center_y_mm": -22.0, "center_z_mm": 0.0,
"diameter_mm": 5.3, "depth_mm": 10.0, "axis": [0.0, 0.0, 1.0] },
{ "center_x_mm": 42.0, "center_y_mm": -22.0, "center_z_mm": 0.0,
"diameter_mm": 5.3, "depth_mm": 10.0, "axis": [0.0, 0.0, 1.0] },
{ "center_x_mm": -42.0, "center_y_mm": 22.0, "center_z_mm": 0.0,
"diameter_mm": 5.3, "depth_mm": 10.0, "axis": [0.0, 0.0, 1.0] },
{ "center_x_mm": 42.0, "center_y_mm": 22.0, "center_z_mm": 0.0,
"diameter_mm": 5.3, "depth_mm": 10.0, "axis": [0.0, 0.0, 1.0] }
]
}모서리에 4개의 M5 클리어런스(5.3 mm) 관통 구멍이 있으며, 모두 XY 평면에 수직입니다.
모서리에서 모서리까지의 공간 대각선 거리는 얼마인가요?
도구: measure_distance (인자: selector_a: "bbox_min", selector_b: "bbox_max")
{
"distance_mm": 117.047,
"point_a": { "part_id": "root", "selector": "bbox_min",
"x_mm": -50.0, "y_mm": -30.0, "z_mm": 0.0 },
"point_b": { "part_id": "root", "selector": "bbox_max",
"x_mm": 50.0, "y_mm": 30.0, "z_mm": 10.0 }
}√(100² + 60² + 10²) = 117.047 mm. 추적 가능성을 위해 확인된 두 지점이 모두 포함됩니다.
알루미늄 재질일 때 질량과 질량 중심은 어떻게 되나요?
도구: get_mass_properties (인자: density_kg_m3: 2700.0)
{
"mass_kg": 0.159617,
"volume_mm3": 59117.5266,
"center_of_mass_mm": { "x_mm": 0.0, "y_mm": 0.0, "z_mm": 5.0 },
"moments_of_inertia_kg_mm2": {
"Ixx": 48.772745,
"Iyy": 132.122917,
"Izz": 178.235373
}
}≈ 160 g. 질량 중심은 기하학적 중심(0, 0, 5)에 위치하며, 이는 대칭적인 구멍을 가진 대칭 브래킷에서 예상되는 결과입니다.
This server cannot be installed
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Latest Blog Posts
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/hiromitsdm/cad-mcp0'
If you have feedback or need assistance with the MCP directory API, please join our Discord server