OpenSCAD 3D模型生成服务

一个基于OpenSCAD的MCP服务器,允许LLMs通过代码创建和操作3D模型,适用于参数化设计和3D打印。

  • by jkoets
  • Python
  • 本地部署
  • 1 星标
  • 更新于
在 GitHub 查看 jkoets/OpenSCAD-MCP

使用说明

OpenSCAD MCP服务器

MCP(模型上下文协议)服务器,使LLM能够使用OpenSCAD创建和操纵3D模型。

为什么选择OpenSCAD?

OpenSCAD基于代码的CSG(构造性实体几何)方法非常适合LLM集成:

  • 基于文本:模型是在代码中定义的,而不是GUI交互
  • 确定性的:相同的代码总是产生相同的几何图形
  • 可组合:CSG操作(联合、差异、船体)自然地映射到LLM如何描述形状
  • 参数化:易于创建可调整的设计

特性

工具 说明
openscad_create_model 创建新的.scad模型文件
openscad_update_model 更新现有模型代码
openscad_get_model 检索模型源代码
openscad_list_models 列出工作区中的所有模型
openscad_delete_model 删除模型
openscad_render_preview 生成PNG预览图像
openscad_render_code 直接渲染代码而不保存
openscad_export 导出到STL、3MF、AMF等。
openscad_get_info 获取OpenSCAD版本和配置

安装

先决条件

  1. OpenSCAD 必须安装。默认路径: C:\Program Files\OpenSCAD\openscad.exe

    • 下载地址:https://openscad.org/downloads.html
  2. Python 3.10+ 使用pip

安装MCP服务器

cd openscad-mcp
pip install -e .

配置Claude桌面

添加到您的Claude桌面配置(%APPDATA%\Claude\claude_desktop_config.json):

{
  "mcpServers": {
    "openscad": {
      "command": "openscad-mcp"
    }
  }
}

或者,如果您在开发模式下安装并希望指定路径:

{
  "mcpServers": {
    "openscad": {
      "command": "python",
      "args": ["-m", "openscad_mcp.server"]
    }
  }
}

使用示例

简单立方体

cube([20, 20, 20], center=true);

圆形盒子

$fn = 32;
minkowski() {
    cube([20, 20, 10], center=true);
    sphere(r=2);
}

空心圆柱体

$fn = 64;
difference() {
    cylinder(h=30, r=15);
    translate([0, 0, -1])
        cylinder(h=32, r=12);
}

参数化设计

// Parameters
wall_thickness = 2;
inner_diameter = 30;
height = 50;

$fn = 64;

difference() {
    cylinder(h=height, d=inner_diameter + wall_thickness*2);
    translate([0, 0, wall_thickness])
        cylinder(h=height, d=inner_diameter);
}

工作区

模型存储在 ./workspace/ 相对于服务器。首次运行时会自动创建工作区。

导出格式

  • 标准模板库:3D打印的标准格式
  • 3MF:现代3D打印格式,支持材料
  • 抽象消息格式:增材制造文件格式
  • 关闭:对象文件格式
  • DXF/SVG:用于激光切割等的2D导出。
  • 便携式网络图形:渲染图像

相机控制

预览渲染支持相机定位:

  • 旋转模式: translate_x,translate_y,translate_z,rot_x,rot_y,rot_z,distance

    • 例子: "0,0,0,45,0,30,200" -45°仰角,30°旋转视角
  • 眼睛/中心模式: eye_x,eye_y,eye_z,center_x,center_y,center_z

    • 例子: "100,100,100,0,0,0" -在(100100100)处观察原点的相机

发展

# Install dev dependencies
pip install -e ".[dev]"

# Run directly
python -m openscad_mcp.server

许可证

麻省理工学院