🛠️ MCP-FreeCAD 集成
**注意:**此仓库正在大力开发中。预计每天都会有提交,并且可能会有重大变更。
该项目使用**模型上下文协议 (MCP)**实现了 AI 助手与 FreeCAD CAD 软件之间的强大集成。它允许外部应用程序通过标准化接口与 FreeCAD 交互,并提供多种连接方法和专用工具。
快速启动(推荐:AppImage + Launcher)
为了获得最可靠的设置,请按照以下步骤操作:
- 设置环境(一次性) :运行安装脚本。这会将存储库克隆到
~/.mcp-freecad
,创建一个 Python 虚拟环境,下载最新稳定的 FreeCAD AppImage,将其解压,并配置服务器以使用它。或者,克隆 repo 并手动运行./scripts/bin/setup_freecad_env.sh
。 - 运行 MCP 服务器:使用安装程序脚本(现在仅确保 venv 处于活动状态并运行服务器)或全局命令(如果已安装)。
这将使用推荐的launcher
方法以及下载并提取的 AppImage 来启动 MCP 服务器。
Docker 支持
您还可以在 Docker 容器中运行 MCP-FreeCAD,以便更轻松地部署和隔离。
使用 Docker Compose 运行
- 启动容器:
- 从头开始构建(如果您进行了更改):
Docker 容器公开以下端口:
- 8080:MCP 服务器
- 12345:FreeCAD 服务器
Docker 配置
Docker 设置包括:
Dockerfile
:使用 Python 3.12 定义容器,安装依赖项并设置环境docker-compose.yml
:配置服务、端口、卷和重启策略.dockerignore
:从容器中排除不必要的文件
此方法对于 CI/CD 管道或需要将 MCP-FreeCAD 环境与系统隔离时特别有用。
🔄 MCP 流程图
此流程图展示了主要组件,以及freecad_connection_manager.py
选择的不同连接方法如何导致在 FreeCAD 中执行各种命令。为了确保可靠性,建议使用launcher
方法,该方法通常与通过AppRun
提取的 AppImage 一起使用。
有关更详细的流程图,请参阅FLOWCHART.md 。
🔄 核心组件
1. FreeCAD MCP 服务器( freecad_mcp_server.py
)
- 描述:实现模型上下文协议 (MCP) 的主服务器。它充当 AI 助手或其他客户端通过 MCP 与 FreeCAD 通信的中央枢纽。
- 特征:
- 处理标准 MCP 请求(
mcp/listTools
、mcp/executeTool
)。 - 利用
FreeCADConnection
使用配置的方法与 FreeCAD 进行交互。 - 根据配置公开各种工具集(原语、操作、导出等)。
- 可通过
config.json
配置。
- 处理标准 MCP 请求(
- 用法:
2. FreeCAD 连接( src/mcp_freecad/freecad_connection_manager.py
)
- 描述:一个统一的 Python 接口,封装了连接 FreeCAD 的逻辑。由 MCP 服务器内部使用,可直接用于脚本编写。
- 特征:
- 根据配置和可用性智能地选择最佳连接方法。
- 方法:
- 启动器:(推荐)使用
freecad_connection_launcher.py
和AppRun
。 - 包装器:使用
freecad_connection_wrapper.py
和freecad_subprocess.py
。 - 服务器:通过套接字连接到正在运行的
freecad_socket_server.py
。 - Bridge :通过
freecad_connection_bridge.py
使用 FreeCAD CLI。 - 模拟:模拟 FreeCAD 进行测试。
- 自动:按推荐的顺序尝试方法(启动器 > 包装器 > 服务器 > 桥接器 > 模拟)。
- 启动器:(推荐)使用
- 用法(直接脚本示例) :
3. FreeCAD 启动器( freecad_connection_launcher.py
)
- 描述:处理 FreeCAD 环境的启动,通常使用从提取的 AppImage 中获取的
AppRun
。它在启动的环境中执行freecad_launcher_script.py
。 - 特征:
- 管理 FreeCAD/AppRun 的子进程执行。
- 将命令和参数传递给内部 FreeCAD 脚本。
- 从脚本的输出解析 JSON 结果。
- 用途:主要在选择
launcher
方法(在config.json
中配置)时由FreeCADConnection
内部使用。通常不由用户直接运行。
4. FreeCAD 包装器( freecad_connection_wrapper.py
)和子进程( freecad_subprocess.py
)
- 描述:
freecad_connection_wrapper.py
在单独的 Python 进程中启动freecad_subprocess.py
导入 FreeCAD 模块并通过 stdio 管道与包装freecad_subprocess.py
通信。 - 特征:
- 将 FreeCAD 模块导入隔离到专用进程中。
- 如果直接模块导入可行但 AppRun/launcher 有问题,则提供替代连接方法。
- 用法:当选择
wrapper
方法(在config.json
中配置)时,由FreeCADConnection
内部使用。需要子进程可以成功import FreeCAD
Python 环境。
5. FreeCAD 服务器( freecad_socket_server.py
)
- 描述:一个独立的套接字服务器,设计用于在 FreeCAD 实例内运行。监听来自
FreeCADConnection
的连接。 - 特征:
- 允许连接到可能持久的 FreeCAD 实例。
- 如果在
--connect
模式下运行,则可以与 GUI 交互。
- 使用方法(在 FreeCAD 中手动启动) :需要在
config.json
中配置connection_method: server
才能连接 MCP 服务器。 (请参阅docs/FREECAD_SERVER_SETUP.md
)
6.FreeCAD 桥( freecad_connection_bridge.py
)
- 描述:启用与 FreeCAD 可执行文件的命令行交互。绕过直接模块导入问题,但速度可能较慢。
- 特征:
- 通过对
freecad
可执行文件的子进程调用来执行 FreeCAD 命令。
- 通过对
- 用法:当选择
bridge
方法(在config.json
中配置)时,由FreeCADConnection
内部使用。要求freecad
位于系统 PATH 中或在配置中正确设置的path
。
7. FreeCAD 客户端( freecad_client.py
)
- 描述:用于直接与
FreeCADConnection
接口交互的命令行实用程序(用于测试/调试连接方法,而不是 MCP 服务器)。 - 特征:
- 允许从终端测试特定的
FreeCADConnection
命令(例如,创建原语、获取版本)。 - 使用
config.json
来确定连接设置。
- 允许从终端测试特定的
- 使用示例:
🔄 项目结构
MCP-FreeCAD 项目的目录结构如下:
有关脚本的更多详细信息,请参阅scripts/README.md 。
⚙️ 安装和设置详情
本节提供有关不同安装和设置选项的更多详细信息。
推荐设置:AppImage + Launcher(详细步骤)
这涉及两个主要脚本:
scripts/bin/setup_freecad_env.sh
:准备环境。- 将存储库克隆或更新至
~/.mcp-freecad
。 - 创建/更新 Python 虚拟环境(
.venv
)并安装要求。 - 运行
download_appimage.py
将最新稳定的 FreeCAD Linux AppImage 获取到~/.mcp-freecad
中。 - 运行
extract_appimage.py
:- 将下载的 AppImage 提取到
~/.mcp-freecad/squashfs-root
。 - 更新
~/.mcp-freecad/config.json
以使用connection_method: launcher
和use_apprun: true
以及正确的绝对路径。
- 将下载的 AppImage 提取到
- 如何运行:
curl -sSL <URL>/setup_freecad_env.sh | bash
或./scripts/bin/setup_freecad_env.sh
- 将存储库克隆或更新至
scripts/bin/mcp-freecad-installer.sh
:运行服务器。- 注意:尽管名称如此,此脚本不再执行完整安装。它主要确保存储库是最新的,激活虚拟环境,并启动
freecad_mcp_server.py
。 - 它假定环境(AppImage 下载/提取)已通过
setup_freecad_env.sh
或手动准备好。 - 如何运行:
~/.mcp-freecad/scripts/bin/mcp-freecad-installer.sh
或mcp-freecad
(全局命令)。
- 注意:尽管名称如此,此脚本不再执行完整安装。它主要确保存储库是最新的,激活虚拟环境,并启动
其他安装方法
全局安装( install-global.sh
)
- 在
/usr/local/bin
中创建一个符号链接mcp-freecad
指向 repo 中的mcp-freecad-installer.sh
。 - 允许从任何地方运行
mcp-freecad
。 - 如果您想使用推荐的启动器方法,则需要首先使用
setup_freecad_env.sh
设置环境。
手动安装
- 克隆 repo。
- 创建 venv,安装要求。
- 手动下载并提取 AppImage :自行运行
python download_appimage.py
和python extract_appimage.py /path/to/downloaded.AppImage
。 - 运行服务器:
python freecad_mcp_server.py
。
🚀 使用 MCP 服务器
这是使用 Claude 等 AI 助手与 FreeCAD 交互的主要方式。
启动 MCP 服务器
服务器将运行并监听来自 MCP 客户端的连接。
连接 MCP 客户端
使用任何兼容 MCP 的客户端。以下是使用参考mcp client
示例:
或者如果您有一个客户端脚本(如 MCP 文档中的脚本),则使用uv
:
替代方案:使用集成服务器启动 FreeCAD
您还可以使用集成服务器启动 FreeCAD:
这将启动 FreeCAD 并自动启动其中的服务器。
MCP 服务器配置( config.json
)
config.json
文件控制服务器的各个方面。以下示例反映了运行extract_appimage.py
后推荐的启动器设置:
注意:用实际的绝对路径替换示例路径。
有关集成选项的更多详细信息,请参阅FREECAD_INTEGRATION.md 。
🛠️ 可用的 MCP 工具
MCP 服务器目前提供以下核心工具。其他工具集正在计划中。
freecad.create_document
:创建一个新文档。freecad.list_documents
:列出所有打开的文档。freecad.list_objects
:列出特定文档(或活动文档)中的对象。freecad.create_box
:创建一个盒子图元。freecad.create_cylinder
:创建一个圆柱体图元。freecad.create_sphere
:创建一个球体图元。freecad.create_cone
:创建一个圆锥体图元。freecad.boolean_union
:在两个对象之间执行布尔联合(融合)。freecad.boolean_cut
:在两个对象之间执行布尔切割(差异)。freecad.boolean_intersection
:在两个对象之间执行布尔交集(常见)。freecad.move_object
:将对象移动到新的绝对位置。freecad.rotate_object
:按指定角度旋转对象。freecad.export_stl
:将指定对象(或全部)导出到 STL 文件。
(注意:MCP 请求中使用的工具名称可能略有不同,例如,使用下划线而不是点,具体取决于客户端和服务器的实现细节。请参阅服务器的mcp/listTools
输出以获取确切名称。)
📝 MCP 交互示例
以下是使用 MCP 服务器与 AI 助手的概念示例:
创建并导出盒子
🔍 故障排除
- MCP 服务器连接问题:
- 确保
python src/mcp_freecad/server/freecad_mcp_server.py
可以正常运行,不会立即出现错误。检查终端输出。 - 检查防火墙设置是否相关(对于
stdio
来说不太可能)。 - 验证
config.json
是否为有效的 JSON。
- 确保
- FreeCAD 连接问题(尤其是
launcher
方法) :- 运行
extract_appimage.py
:确保正确提取了 AppImage 并且更新了config.json
。 - 检查
config.json
路径:验证freecad
部分中的所有绝对路径是否适合您的系统。 - 检查权限:确保
squashfs-root/AppRun
具有执行权限(chmod +x
)。 - 检查日志:检查
mcp_freecad.log
(如果开始日志记录,则在项目根目录中创建)、freecad_server_stdout.log
和freecad_server_stderr.log
是否存在来自freecad_connection_launcher.py
、AppRun
或 FreeCAD 进程本身的错误。 - 环境变量:如果
AppRun
无法找到库,请确保正确设置LD_LIBRARY_PATH
和PYTHONPATH
。如果使用 Cursor,则可能在.cursor/mcp.json
中设置;如果在终端中测试,则需要extract_appimage.py
导出。extract_appimage.py 脚本旨在减少这方面的必要性,但它也可能是一个影响因素。 - 无头问题:FreeCAD 有时会在完全无头运行时出现问题(
QT_QPA_PLATFORM=offscreen
)。请检查日志中是否存在与 GUI 相关的错误。
- 运行
server
方法:确保freecad_socket_server.py
在活动的 FreeCAD 实例中运行,并监听config.json
中配置的正确主机/端口。bridge
方法:验证 FreeCAD 是否已在系统范围内安装,以及freecad
命令是否在终端中正常运行。检查config.json
中的freecad_path
。- 缺少 MCP SDK :通过
pip install modelcontextprotocol
安装。 - Python 路径问题:如果在不使用推荐的 AppImage 设置时找不到 FreeCAD 模块,请参阅PYTHON_INTERPRETER_SETUP.md 。
📄 许可证
该项目根据 MIT 许可证获得许可 - 有关详细信息,请参阅 LICENSE 文件。
🖥️ 光标集成
MCP 服务器设计用于与 Cursor IDE 等工具集成。
- 配置 Cursor :在 Cursor 的设置中添加 MCP 服务器(设置 > 功能 > MCP 服务器 > 添加新 MCP 服务器)。将其配置为直接运行 Python 脚本,并设置必要的环境变量和工作目录。.cursor
.cursor/mcp.json
中的示例配置如下:将/path/to/mcp-freecad
替换为项目的实际绝对路径。 如有需要,请确保LD_LIBRARY_PATH
和PYTHONPATH
与您的 AppImage 结构匹配。 - 重新启动 Cursor :完全重新启动 Cursor 以使配置更改生效。
- 服务器通信:服务器默认使用
stdio
传输(在config.json
的server.mcp.transport
下配置),该协议与 Cursor 的通信协议兼容。错误应通过 MCP 错误响应报告给 Cursor。
游标特定注意事项
freecad_mcp_server.py
脚本默认加载config.json
。请确保此文件包含正确的设置,尤其是由extract_appimage.py
更新的freecad
部分。.cursor/mcp.json
中设置的环境变量对于launcher
方法在 Cursor 提供的环境中正常工作至关重要。
📋 可用选项和用例
🔧 连接方法
- 启动器连接(推荐)
- 使用从提取的 AppImage 中获取的
AppRun
。非常可靠。 - 由
extract_appimage.py
自动配置。 - 配置(
config.json
):GXP19
- 使用从提取的 AppImage 中获取的
- 包装器连接
- 在单独的 Python 子进程中运行 FreeCAD 逻辑。如果 AppImage/AppRun 出现问题,这是一个不错的替代方案。
- 配置(
config.json
):GXP20
- 套接字服务器连接
- 需要在 FreeCAD 中运行
freecad_socket_server.py
。 - 当运行 FreeCAD 作为持久后台服务器时使用。
- 配置(
config.json
):GXP21
- 需要在 FreeCAD 中运行
- CLI 桥接连接
- 使用
freecad
命令行工具。速度可能较慢/可靠性较低。 - 配置(
config.json
):GXP22
- 使用
- 模拟连接
- 无需 FreeCAD 即可进行测试。
- 配置(
config.json
):GXP23
- 自动连接
- 自动选择最佳可用方法(启动器 > 包装器 > 服务器 > 桥接器 > 模拟)。
- 如果
connection_method
缺失或设置为"auto"
则为默认值。
🛠️ 工具类别和用例
- 基本 FreeCAD 操作
- 基本文件管理
- 用例:
- 创建新文档
- 保存和加载项目
- 导出为各种格式
- 管理文档结构
- 模型操作
- 变换和修改对象
- 用例:
- 精确旋转物体
- 在 3D 空间中移动物体
- 缩放模型
- 创建镜像和副本
- 布尔运算(并集、切集、交集)
- 测量工具
- 分析与验证
- 用例:
- 距离测量
- 角度计算
- 表面积分析
- 体积计算
- 质量特性
- 原始创造
- 基本形状生成
- 用例:
- 创建盒子和圆柱体
- 生成球体
- 制作圆锥体和圆环体
- 创建正多边形
- 绘制椭圆
- 出口/进口操作
- 文件格式转换
- 用例:
- STEP 文件导出/导入
- IGES 格式处理
- DXF文件处理
- STL 导出用于 3D 打印
- 代码生成
- 自动代码创建
- 用例:
- Python 脚本生成
- OpenSCAD 代码导出
- CNC 的 G 代码生成
- 3D打印机设置优化
💻 集成场景
- Cursor IDE 集成
- 开发环境集成
- 用例:
- 从 IDE 直接操作模型
- 实时反馈
- 调试日志记录
- 错误追踪
- AI助手集成
- 人工智能设计自动化
- 用例:
- 自然语言模型创建
- 自动化设计修改
- 参数优化
- 设计验证
- 命令行用法
- 脚本和自动化
- 用例:
- 批处理
- 自动化测试
- CI/CD 集成
- 命令行工具
🎯 常见用例示例
- 快速成型
- 自动化处理
⚙️ 配置选项
- 服务器配置
- 工具启用
- 调试配置
特征
- 通过 MCP 协议将 AI 助手连接到 FreeCAD
- 以编程方式创建和操作 3D 模型
- 支持原始形状(盒子、圆柱体、球体、圆锥体)
- 布尔运算(并集、交集、切集)
- 对象变换(移动、旋转)
- 将模型导出为 STL 格式
- 文档和对象管理
先决条件
- Python 3.8 或更高版本
- 推荐:FreeCAD AppImage(使用
scripts/bin/setup_freecad_env.sh
下载并提取)用于可靠的launcher
连接方法。 - 或者:FreeCAD 0.20+ 的系统安装(用于
bridge
或server
方法,可能不太可靠)。 - Git(用于克隆存储库)。
依赖项通过pyproject.toml
进行管理,并在设置期间安装到虚拟环境中。
可用工具
(本节重复上面的列表 - 为了清晰起见进行合并)
目前可通过 MCP 实现的工具有:
文档管理
freecad.create_document
freecad.list_documents
freecad.list_objects
3D基元
freecad.create_box
freecad.create_cylinder
freecad.create_sphere
freecad.create_cone
布尔运算
freecad.boolean_union
freecad.boolean_cut
freecad.boolean_intersection
变换
freecad.move_object
freecad.rotate_object
出口
freecad.export_stl
我们计划在未来的版本中推出涵盖测量、其他导入/导出格式和代码生成的附加工具。
测试
该项目包括端到端(E2E)测试以验证系统功能。
端到端测试
这些测试使用 MCP 协议从客户端的角度验证交互。
要运行所有 E2E 测试:
E2E 测试位于tests/e2e/
目录中,并按功能组织。
编写新的 E2E 测试
要添加新的 E2E 测试:
- 在
tests/e2e/
目录中创建一个新的测试文件 - 扩展适当的基测试类(
MCPClientTestBase
) - 添加使用 MCP 客户端与工具交互的测试方法
- 使用测试运行器运行测试
请参阅现有的测试文件以获取示例。
文档
该项目包括针对不同方面的几个文档文件:
- PYTHON_INTERPRETER_SETUP.md - 如何配置 Python 解释器
- FREECAD_SERVER_SETUP.md - 服务器设置指南
- FREECAD_INTEGRATION.md - FreeCAD 集成方法
- FLOWCHART.md - 详细流程图
- OPTIMIZATION_FEATURES.md - 性能优化指南
- scripts/README.md - 脚本文档
对于AI助手,请参阅AI_ASSISTANT_GUIDE.md以获取详细的使用说明和示例。
贡献
欢迎贡献代码!欢迎提交 Pull 请求。
致谢
- FreeCAD 开发团队打造了出色的 CAD 软件
- Anthropic 和 Claude 用于模型上下文协议 (MCP) SDK
This server cannot be installed
hybrid server
The server is able to function both locally and remotely, depending on the configuration or use case.
该项目使用模型上下文协议 (MCP),实现了 AI 助手与 FreeCAD CAD 软件之间的强大集成。它允许外部应用程序通过标准化接口与 FreeCAD 交互,并提供多种连接方法和专用工具。
- 快速启动(推荐:AppImage + Launcher)
- Docker 支持
- 🔄 MCP 流程图
- 🔄 核心组件
- FreeCAD MCP 服务器( freecad_mcp_server.py )
- FreeCAD 连接( src/mcp_freecad/freecad_connection_manager.py )
- FreeCAD 启动器( freecad_connection_launcher.py )
- FreeCAD 包装器( freecad_connection_wrapper.py )和子进程( freecad_subprocess.py )
- FreeCAD 服务器( freecad_socket_server.py )
- 6.FreeCAD 桥( freecad_connection_bridge.py )
- FreeCAD 客户端( freecad_client.py )
- 🔄 项目结构
- ⚙️ 安装和设置详情
- 🚀 使用 MCP 服务器
- 🛠️ 可用的 MCP 工具
- 📝 MCP 交互示例
- 🔍 故障排除
- 📄 许可证
- 🖥️ 光标集成
- 📋 可用选项和用例
- 特征
- 先决条件
- 可用工具
- 测试
- 文档
- 贡献
- 致谢
Related MCP Servers
- AsecurityAlicenseAqualityEnables integration with OpenAI models through the MCP protocol, supporting concise and detailed responses for use with Claude Desktop.Last updated -11PythonMIT License
- -securityAlicense-qualityConnects Blender to Claude AI through the Model Context Protocol (MCP), allowing Claude to directly interact with and control Blender for AI-assisted 3D modeling, scene manipulation, and rendering.Last updated -10,093PythonMIT License
- -securityAlicense-qualityA FreeCAD addon that implements the Model Context Protocol (MCP) to enable communication between FreeCAD and Claude AI through Claude Desktop.Last updated -17PythonMIT License
- AsecurityAlicenseAqualityAllows AI to interact with Autodesk Revit via the MCP protocol, enabling retrieval of project data and automation of tasks like creating, modifying, and deleting elements.Last updated -11109TypeScriptMIT License