状态: 活跃开发 - 清晰、组织良好的代码库,支持多种连接方式和全面的工具提供者。
该项目通过**模型上下文协议(MCP)**提供了AI助手与FreeCAD CAD软件之间的强大集成。它允许外部应用程序通过标准化接口与FreeCAD进行交互,提供多种连接方法和专业工具。
MCP-FreeCAD 集成支持多个AI提供者及其最新的2025年模型。选择适合您特定用例的模型:
gpt-4o - 默认多模态模型(文本、图像、音频)
gpt-4.1 - 下一代,具有1M标记上下文
gpt-4-turbo - 快速、成本效益高
o3 - 复杂CAD逻辑的高级推理
o4-mini / o4-mini-high - 成本效益高的推理
claude-opus-4 - 最先进的模型
claude-sonnet-4 - 平衡效率
claude-haiku-3.5 - 快速、轻量级
gemini-2.5-pro-preview-05-06 - 最先进的
gemini-2.5-flash-preview-04-17 - 性能优化
gemini-2.0-flash-001 - 生产就绪
gemini-2.0-flash-lite - 成本优化
OpenRouter 通过单一API提供对所有模型的访问:
provider/model-name流行模型:
anthropic/claude-sonnet-4 - 推荐通用用途openai/gpt-4o - OpenAI旗舰产品google/gemini-2.5-pro-preview - Google最新产品免费模型(每天50-1000次请求):
deepseek/deepseek-r1 - 高级推理deepseek/deepseek-v3 - 通用用途google/gemini-2.5-flash-preview - Google免费层| 用例 | 推荐模型 | 替代方案 |
|---|---|---|
| 通用CAD工作 | claude-sonnet-4 | gpt-4o, gemini-2.0-flash-001 |
| 复杂推理 | claude-opus-4 | o3, gemini-2.5-pro-preview-05-06 |
| 多模态任务 | gpt-4o | gpt-4.1, claude-opus-4 |
| 成本效益 | o4-mini | claude-haiku-3.5, gemini-2.0-flash-lite |
| 高容量 | gpt-4-turbo | claude-sonnet-4, gemini-2.0-flash-001 |
| 免费使用 | deepseek/deepseek-r1 | google/gemini-2.5-flash-preview |
{
"providers": {
"anthropic": {
"enabled": true,
"model": "claude-sonnet-4",
"thinking_mode": true,
"max_tokens": 64000
},
"openai": {
"enabled": true,
"model": "gpt-4o",
"max_tokens": 32000
},
"google": {
"enabled": true,
"model": "gemini-2.0-flash-001",
"thinking_mode": true
},
"openrouter": {
"enabled": true,
"model": "anthropic/claude-sonnet-4",
"free_models": ["deepseek/deepseek-r1"]
}
}
}
# 使用特定提供商
from freecad_ai import CADAssistant
# 初始化为Claude Sonnet 4
assistant = CADAssistant(provider="anthropic", model="claude-sonnet-4")
# 创建复杂几何图形
result = assistant.generate_cad_script(
"创建一个参数化齿轮,20齿,5毫米模数,20度压力角"
)
# 使用OpenRouter进行成本优化
assistant_free = CADAssistant(
provider="openrouter",
model="deepseek/deepseek-r1"
)
# 使用免费模型进行快速操作
result = assistant_free.create_primitive("box", length=10, width=5, height=3)
为了获得最佳的GUI集成用户体验:
# 克隆仓库
git clone https://github.com/jango-blockchained/mcp-freecad.git
cd mcp-freecad
# 安装依赖
pip install -r requirements.txt
# 启动MCP服务器
python mcp_server.py
# 或使用FastMCP模式(轻量级,适用于Cursor IDE)
python mcp_server.py --mode fastmcp
# 或使用自定义配置和调试日志
python mcp_server.py --config my_config.json --debug
python -m src.mcp_freecad.main --config my_config.json --debug
### 选项 3: FastMCP 服务器(Cursor IDE 和最新最佳实践)
**✨ 新功能: 更新至FastMCP 2.13.0.2** - 现代、声明式的MCP服务器实现。
```bash
# 为Cursor IDE启动FastMCP服务器
python cursor_mcp_server.py
# 或运行示例以查看可用工具
python example_fastmcp_usage.py --all
关键特性:
@mcp.tool()和@mcp.resource()装饰器可用工具:
test_connection - 测试FreeCAD连接性create_box - 创建盒状原始形状create_cylinder - 创建圆柱create_sphere - 创建球体create_document - 管理FreeCAD文档资源:
freecad://status - 获取服务器状态和FreeCAD可用性详细使用,请参阅FastMCP 实现指南。
src/mcp_freecad/
├── main.py # 主入口点
├── __init__.py # 包导出和注册
├── client/ # FreeCAD 连接管理
│ └── freecad_connection_manager.py
├── server/ # MCP 服务器实现
│ └── freecad_mcp_server.py
├── tools/ # 工具提供者
│ ├── base.py # 基础工具提供者类
│ ├── primitives.py # 原始形状(盒子、圆柱等)
│ ├── model_manipulation.py # 转换、布尔运算等
│ ├── export_import.py # 文件格式处理
│ ├── measurement.py # 分析工具
│ └── code_generator.py # 代码生成
├── core/ # 核心基础设施
│ ├── server.py # 基于FastAPI的服务器
│ ├── cache.py # 资源缓存
│ ├── diagnostics.py # 性能监控
│ └── recovery.py # 连接恢复
└── connections/ # 连接后端
系统支持多种连接到FreeCAD的方法:
create_box - 创建盒状原始形状create_cylinder - 创建圆柱create_sphere - 创建球体create_cone - 创建圆锥transform - 移动、旋转对象boolean_operation - 并集、差集、交集fillet_edge - 圆角边缘chamfer_edge - 倒角边缘mirror - 在平面上镜像对象scale - 均匀或非均匀缩放对象create_document - 创建新文档list_documents - 列出打开的文档list_objects - 列出文档中的对象export_stl - 导出为STL格式from src.mcp_freecad import FreeCADConnection, PrimitiveToolProvider
# 创建连接(自动选择最佳方法)
fc = FreeCADConnection(auto_connect=True)
if fc.is_connected():
print(f"通过以下方式连接: {fc.get_connection_type()}")
# 创建文档
doc_name = fc.create_document("MyProject")
# 创建对象
box = fc.create_box(length=20, width=10, height=5)
cylinder = fc.create_cylinder(radius=3, height=10)
# 导出
fc.export_stl(box, "my_box.stl")
from src.mcp_freecad.tools.primitives import PrimitiveToolProvider
# 初始化工具提供者
primitives = PrimitiveToolProvider()
# 执行工具
result = await primitives.execute_tool("create_box", {
"length": 10.0,
"width": 5.0,
"height": 3.0
})
print(f"已创建: {result.result['object_id']}")
from src.mcp_freecad.core.server import MCPServer
from src.mcp_freecad import TOOL_PROVIDERS
# 设置服务器
server = MCPServer()
# 注册工具提供者
server.register_tool("primitives", TOOL_PROVIDERS["primitives"]())
server.register_tool("model_manipulation", TOOL_PROVIDERS["model_manipulation"]())
# 初始化并运行
await server.initialize()
config.json){
"server": {
"name": "mcp-freecad-server",
"version": "0.7.11"
},
"freecad": {
"connection_method": "auto",
"host": "localhost",
"port": 12345,
"freecad_path": "freecad"
},
"tools": {
"enable_primitives": true,
"enable_model_manipulation": true,
"enable_export_import": true
}
}
{
"freecad": {
"connection_method": "launcher",
"use_apprun": true,
"apprun_path": "/path/to/squashfs-root/AppRun",
"script_path": "/path/to/freecad_launcher_script.py"
}
}
src/mcp_freecad/ - 主包freecad-ai/ - FreeCAD GUI 插件tests/ - 测试套件docs/ - 文档scripts/ - 设置和实用脚本src/mcp_freecad/tools/中创建新的工具提供者ToolProvider基础类tool_schema, execute_tool)__init__.py中的TOOL_PROVIDERS中注册from .base import ToolProvider, ToolResult, ToolSchema
class MyToolProvider(ToolProvider):
@property
def tool_schema(self) -> ToolSchema:
return ToolSchema(
name="my_tool",
description="我的自定义工具",
parameters={...},
returns={...}
)
async def execute_tool(self, tool_id: str, params: Dict[str, Any]) -> ToolResult:
# 实现
return self.format_result(status="success", result=result)
# 运行测试
python -m pytest tests/
# 运行覆盖率测试
python -m pytest tests/ --cov=src --cov-report=html
# 运行特定测试
python -m pytest tests/test_primitives.py -v
# 使用Docker Compose构建并运行
docker compose up
# 从零开始构建
docker compose build --no-cache
docker compose up
本项目采用MIT许可 - 详情见LICENSE文件。