mcp-freecad

local-only server

The server can only run on the client’s local machine because it depends on local resources.

Integrations

  • Enables interaction with FreeCAD CAD software through a standardized interface, offering tools for 3D model creation, manipulation, measurement, and export. Includes specialized smithery tools for blacksmithing designs, primitive shape generation, boolean operations, and model transformation capabilities.

🛠️ Integración MCP-FreeCAD

Nota: Este repositorio se encuentra en desarrollo intensivo. Se esperan confirmaciones diarias y posibles cambios importantes.

Este proyecto proporciona una sólida integración entre los asistentes de IA y el software CAD FreeCAD mediante el Protocolo de Contexto de Modelo (MCP) . Permite que las aplicaciones externas interactúen con FreeCAD a través de una interfaz estandarizada, ofreciendo múltiples métodos de conexión y herramientas especializadas.

Inicio rápido (recomendado: AppImage + Launcher)

Para una configuración más confiable, siga estos pasos:

  1. Configuración del entorno (única) : Ejecute el script de configuración. Esto clona el repositorio en ~/.mcp-freecad , crea un entorno virtual de Python, descarga la última versión estable de FreeCAD AppImage, la extrae y configura el servidor para usarla.
    curl -sSL https://raw.githubusercontent.com/jango-blockchained/mcp-freecad/main/scripts/bin/setup_freecad_env.sh | bash
    Alternativamente, clone el repositorio y ejecute ./scripts/bin/setup_freecad_env.sh manualmente.
  2. Ejecutar el servidor MCP : use el script de instalación (que ahora solo garantiza que venv esté activo y ejecute el servidor) o el comando global si está instalado.
    # Option A: Run via the installer script in the default location ~/.mcp-freecad/scripts/bin/mcp-freecad-installer.sh # Option B: Run the global command (if installed via install-global.sh) mcp-freecad

Esto inicia el servidor MCP usando el método launcher recomendado con la AppImage descargada y extraída.

Soporte de Docker

También puede ejecutar MCP-FreeCAD en un contenedor Docker para facilitar la implementación y el aislamiento.

Ejecutar con Docker Compose

  1. Iniciar el contenedor :
    docker compose up
  2. Construya desde cero (si ha realizado cambios):
    docker compose build --no-cache docker compose up

El contenedor Docker expone los siguientes puertos:

  • 8080: Servidor MCP
  • 12345: Servidor FreeCAD

Configuración de Docker

La configuración de Docker consta de:

  • Dockerfile : define el contenedor con Python 3.12, instala dependencias y configura el entorno.
  • docker-compose.yml : configura el servicio, los puertos, los volúmenes y las políticas de reinicio
  • .dockerignore : excluye archivos innecesarios del contenedor

Este enfoque es especialmente útil para las canalizaciones CI/CD o cuando necesita aislar el entorno MCP-FreeCAD de su sistema.

Diagrama de flujo MCP

Este diagrama de flujo muestra los componentes principales y cómo los diferentes métodos de conexión seleccionados por freecad_connection_manager.py permiten ejecutar comandos de diversas maneras en FreeCAD. El método launcher , que suele usarse con AppImages extraídas mediante AppRun , es el enfoque recomendado para mayor fiabilidad.

Para obtener diagramas de flujo más detallados, consulte FLOWCHART.md .

🔄 Componentes principales

1. Servidor MCP de FreeCAD ( freecad_mcp_server.py )

  • Descripción : El servidor principal que implementa el Protocolo de Contexto de Modelo. Actúa como el centro de conexión para que los asistentes de IA u otros clientes se comuniquen con FreeCAD mediante MCP.
  • Características :
    • Maneja solicitudes MCP estándar ( mcp/listTools , mcp/executeTool ).
    • Utiliza FreeCADConnection para interactuar con FreeCAD utilizando el método configurado.
    • Expone varios conjuntos de herramientas (primitivas, manipulación, exportación, etc.) según la configuración.
    • Configurable a través de config.json .
  • Uso :
    # Start the server (uses config.json by default) python src/mcp_freecad/server/freecad_mcp_server.py # Start with a specific config python src/mcp_freecad/server/freecad_mcp_server.py --config my_config.json

2. Conexión a FreeCAD ( freecad_connection_manager.py )

  • Descripción : Una interfaz unificada de Python que encapsula la lógica para la conexión a FreeCAD. Utilizada internamente por el servidor MCP y disponible para scripting directo.
  • Características :
    • Selecciona inteligentemente el mejor método de conexión según la configuración y la disponibilidad.
  • Métodos :
    • Lanzador : (recomendado) utiliza freecad_connection_launcher.py y AppRun .
    • Envoltorio : utiliza freecad_connection_wrapper.py y freecad_subprocess.py .
    • Servidor : se conecta a un freecad_socket_server.py en ejecución a través de sockets.
    • Puente : utiliza la CLI de FreeCAD a través de freecad_connection_bridge.py .
    • Mock : simula FreeCAD para pruebas.
    • Automático : prueba los métodos en el orden recomendado (lanzador > contenedor > servidor > puente > simulacro).
  • Uso (ejemplo de scripting directo) :
    from freecad_connection_manager import FreeCADConnection # Auto-connect using settings potentially from config.json # (Ensure config.json is present or provide args) fc = FreeCADConnection(auto_connect=True) if fc.is_connected(): print(f"Connected via: {fc.get_connection_type()}") version_info = fc.get_version() print(f"FreeCAD Version: {version_info}") fc.create_document("TestDocFromScript") else: print("Failed to connect to FreeCAD.")

3. Lanzador de FreeCAD ( freecad_connection_launcher.py )

  • Descripción : Gestiona el inicio del entorno de FreeCAD, generalmente mediante AppRun desde una AppImage extraída. Ejecuta freecad_launcher_script.py dentro del entorno iniciado.
  • Características :
    • Gestiona la ejecución del subproceso de FreeCAD/AppRun.
    • Pasa comandos y parámetros al script interno de FreeCAD.
    • Analiza los resultados JSON de la salida del script.
  • Uso : FreeCADConnection lo utiliza principalmente internamente al seleccionar el método launcher (configurado en config.json ). Normalmente, el usuario no lo ejecuta directamente.

4. Envoltorio de FreeCAD ( freecad_connection_wrapper.py ) y subproceso ( freecad_subprocess.py )

  • Descripción : freecad_connection_wrapper.py inicia freecad_subprocess.py en un proceso de Python separado. freecad_subprocess.py importa módulos de FreeCAD y se comunica con el contenedor a través de tuberías stdio.
  • Características :
    • Aísla las importaciones del módulo FreeCAD en un proceso dedicado.
    • Proporciona un método de conexión alternativo si las importaciones directas de módulos son posibles pero AppRun/launcher es problemático.
  • Uso : FreeCADConnection lo utiliza internamente cuando se selecciona el método wrapper (configurado en config.json ). Requiere un entorno Python donde el subproceso pueda import FreeCAD correctamente.

5. Servidor FreeCAD ( freecad_socket_server.py )

  • Descripción : Un servidor de sockets independiente diseñado para ejecutarse dentro de una instancia de FreeCAD. Escucha las conexiones de FreeCADConnection .
  • Características :
    • Permite la conexión a una instancia de FreeCAD potencialmente persistente.
    • Puede interactuar con la GUI si se ejecuta en modo --connect .
  • Uso (Inicio manual dentro de FreeCAD) :
    # Inside FreeCAD Python Console: exec(open("/path/to/mcp-freecad/freecad_socket_server.py").read())
    Requiere connection_method: server en config.json para que el servidor MCP se conecte. (Consulte docs/FREECAD_SERVER_SETUP.md )

6. Puente de FreeCAD ( freecad_connection_bridge.py )

  • Descripción : Permite la interacción mediante la línea de comandos con el ejecutable de FreeCAD. Evita los problemas de importación directa de módulos, pero puede ser más lento.
  • Características :
    • Ejecuta comandos de FreeCAD mediante llamadas de subproceso al ejecutable de freecad .
  • Uso : FreeCADConnection lo utiliza internamente cuando se selecciona el método bridge (configurado en config.json ). Requiere que freecad esté en la ruta del sistema o que la path esté configurada correctamente en la configuración.

7. Cliente de FreeCAD ( freecad_client.py )

  • Descripción : Una utilidad de línea de comandos para interactuar directamente con la interfaz FreeCADConnection (para probar/depurar métodos de conexión, no el servidor MCP).
  • Características :
    • Permite probar comandos específicos FreeCADConnection (por ejemplo, crear primitivos, obtener versión) desde la terminal.
    • Utiliza config.json para determinar la configuración de conexión.
  • Ejemplos de uso :
    # Test connection and get version python freecad_client.py version # Create a box using the configured connection method python freecad_client.py create-box --length 20 --width 10

🔄 Estructura del proyecto

El proyecto MCP-FreeCAD está organizado con la siguiente estructura de directorios:

mcp-freecad/ ├── assets/ # 3D model assets (STL, STEP files) ├── backups/ # Backup files ├── config.json # Main configuration file ├── docs/ # Documentation files │ ├── FLOWCHART.md # Detailed flow diagrams │ ├── FREECAD_INTEGRATION.md # FreeCAD integration guide │ ├── FREECAD_SERVER_SETUP.md # Server setup instructions │ ├── OPTIMIZATION_FEATURES.md # Performance optimization guide │ └── PYTHON_INTERPRETER_SETUP.md # Python interpreter configuration ├── examples/ # Example scripts showing API usage ├── freecad_connection_bridge.py # Bridge for CLI interaction with FreeCAD ├── freecad_client.py # Command-line client ├── freecad_connection_manager.py # Unified connection interface ├── freecad_mcp.py # Entry point script ├── freecad_mcp_server.py # MCP server implementation ├── freecad_socket_server.py # Socket-based server for FreeCAD ├── scripts/ # Shell scripts for installation and execution │ ├── README.md # Scripts documentation │ ├── bin/ # Executable scripts │ │ ├── install-global.sh # Global installation script │ │ ├── mcp-freecad-installer.sh # Installer script │ │ ├── mcp-freecad.sh # Simple wrapper script │ │ └── run-freecad-server.sh # Server runner script │ ├── start_freecad_with_server.sh # FreeCAD starter with server │ └── start_server.py # Python script for server startup ├── src/ # Source code ├── tests/ # Test files └── tmp/ # Temporary files

Para obtener más detalles sobre los scripts, consulte scripts/README.md .

⚙️ Detalles de instalación y configuración

Esta sección proporciona más detalles sobre las diferentes opciones de instalación y configuración.

Configuración recomendada: AppImage + Launcher (pasos detallados)

Esto implica dos scripts principales:

  1. scripts/bin/setup_freecad_env.sh : prepara el entorno.
    • Clona o actualiza el repositorio a ~/.mcp-freecad .
    • Crea/actualiza un entorno virtual de Python ( .venv ) e instala los requisitos.
    • Ejecuta download_appimage.py para obtener la última AppImage estable de FreeCAD Linux en ~/.mcp-freecad .
    • Ejecuta extract_appimage.py que:
      • Extrae la AppImage descargada a ~/.mcp-freecad/squashfs-root .
      • Actualiza ~/.mcp-freecad/config.json para usar connection_method: launcher y use_apprun: true con rutas absolutas correctas.
    • Cómo ejecutar : curl -sSL <URL>/setup_freecad_env.sh | bash o ./scripts/bin/setup_freecad_env.sh
  2. scripts/bin/mcp-freecad-installer.sh : ejecuta el servidor.
    • Nota : A pesar del nombre, este script ya no realiza la instalación completa . Principalmente, garantiza la actualización del repositorio, activa el entorno virtual e inicia freecad_mcp_server.py .
    • Se asume que el entorno (descarga/extracción de AppImage) ha sido preparado por setup_freecad_env.sh o manualmente.
    • Cómo ejecutar : ~/.mcp-freecad/scripts/bin/mcp-freecad-installer.sh o mcp-freecad (comando global).

Otros métodos de instalación

Instalación global ( install-global.sh )

  • Crea un enlace simbólico mcp-freecad en /usr/local/bin que apunta a mcp-freecad-installer.sh en el repositorio.
  • Permite ejecutar mcp-freecad desde cualquier lugar.
  • Requiere que el entorno se configure primero usando setup_freecad_env.sh si desea utilizar el método de inicio recomendado.
# Navigate to the repository (e.g., ~/.mcp-freecad) cd ~/.mcp-freecad # Run the setup script first ./scripts/bin/setup_freecad_env.sh # Then run the global installation script sudo ./scripts/bin/install-global.sh # Needs sudo for /usr/local/bin # Now you can run the server from anywhere mcp-freecad

Instalación manual

  • Clonar el repositorio.
  • Crear venv, instalar requisitos.
  • Descargue y extraiga AppImage manualmente : ejecute python download_appimage.py y python extract_appimage.py /path/to/downloaded.AppImage usted mismo.
  • Ejecute el servidor: python freecad_mcp_server.py .

🚀 Uso del servidor MCP

Esta es la forma principal de interactuar con FreeCAD utilizando asistentes de IA como Claude.

Iniciando el servidor MCP

# Start the server using the default config.json python src/mcp_freecad/server/freecad_mcp_server.py # Start with a specific configuration file python src/mcp_freecad/server/freecad_mcp_server.py --config /path/to/your/config.json # Enable debug logging python src/mcp_freecad/server/freecad_mcp_server.py --debug

El servidor se ejecutará y escuchará las conexiones de los clientes MCP.

Conexión de un cliente MCP

Utilice cualquier cliente compatible con MCP. Ejemplo con el mcp client de referencia:

# Replace 'mcp client' with the actual client command if different mcp client connect stdio --command "python src/mcp_freecad/server/freecad_mcp_server.py"

O usar uv si tienes un script de cliente como el que se encuentra en los documentos de MCP:

uv run path/to/your/mcp_client.py python src/mcp_freecad/server/freecad_mcp_server.py

Alternativa: iniciar FreeCAD con el servidor integrado

También puedes iniciar FreeCAD con el servidor integrado usando:

./scripts/start_freecad_with_server.sh

Esto iniciará FreeCAD y automáticamente iniciará el servidor dentro de él.

Configuración del servidor MCP ( config.json )

El archivo config.json controla varios aspectos del servidor. A continuación, se muestra un ejemplo que refleja la configuración recomendada del lanzador tras ejecutar extract_appimage.py :

{ "auth": { // Optional authentication settings "api_key": "development", "enabled": false }, "server": { // MCP server settings "host": "0.0.0.0", "port": 8000, "debug": true, "workers": 1, "name": "mcp-freecad", "version": "0.3.1", // Example version "mcp": { "transport": "stdio", // Use stdio for Cursor/local clients "protocol_version": "0.1.0" // ... other MCP settings } }, "freecad": { // FreeCAD connection settings // Paths are set automatically by extract_appimage.py for launcher mode "path": "/home/user/mcp-freecad/squashfs-root/usr/bin/freecad", // Example path "python_path": "/home/user/mcp-freecad/squashfs-root/usr/bin/python", // Example path "module_path": "/home/user/mcp-freecad/squashfs-root/usr/lib/", // Example path "host": "localhost", // Not used by launcher "port": 12345, // Not used by launcher "auto_connect": false, // Connection handled internally "reconnect_on_failure": true, "use_mock": false, "connection_method": "launcher", // *** KEY: Use the launcher method *** "script_path": "/home/user/mcp-freecad/freecad_launcher_script.py", // Script run inside FreeCAD "launcher_path": "/home/user/mcp-freecad/freecad_connection_launcher.py", // Script that starts AppRun "use_apprun": true, // *** KEY: Tells launcher to use AppRun *** "apprun_path": "/home/user/mcp-freecad/squashfs-root/AppRun" // Path to AppRun executable }, "logging": { // Logging configuration "level": "INFO", "file": "mcp_freecad.log", "max_size": 10485760, "backup_count": 3 }, "tools": { // Optional: control which tool groups are enabled "enable_smithery": true, "enable_primitives": true, "enable_model_manipulation": true, "enable_export_import": true, "enable_measurement": true, "enable_code_generator": true // ... other tool settings } // ... other sections like cache, recovery, cors, performance ... }

Nota: reemplace las rutas de ejemplo con sus rutas absolutas reales.

Consulte FREECAD_INTEGRATION.md para obtener más detalles sobre las opciones de integración.

🛠️ Herramientas MCP disponibles

El servidor MCP expone varios grupos de herramientas. Aquí están todas las herramientas disponibles:

📐 Herramientas básicas de FreeCAD ( freecad.* )

  • freecad.create_document : Crea un nuevo documento
  • freecad.export_stl : Exportar el modelo u objetos específicos a STL
  • freecad.import_stl : Importa archivos STL al documento actual
  • freecad.save_document : Guardar el documento actual
  • freecad.load_document : Cargar un documento existente

🔧 Herramientas de manipulación de modelos ( model_manipulation.* )

  • model_manipulation.rotate : rota objetos alrededor de ejes especificados
  • model_manipulation.translate : Mover objetos en el espacio 3D
  • model_manipulation.scale : Escala objetos de manera uniforme o no uniforme
  • model_manipulation.mirror : Refleja objetos en planos específicos
  • model_manipulation.union : combina varios objetos mediante la unión booleana
  • model_manipulation.cut : Corta objetos usando diferencia booleana
  • model_manipulation.intersect : Crea una intersección de múltiples objetos

📏 Herramientas de medición ( measurement.* )

  • measurement.distance : Mide la distancia entre dos puntos
  • measurement.angle : mide el ángulo entre tres puntos
  • measurement.area : Calcula el área de superficie de los objetos
  • measurement.volume : Calcula el volumen de objetos sólidos
  • measurement.mass : Calcula la masa de objetos (requiere propiedades del material)

📦 Herramientas primitivas ( primitives.* )

  • primitives.create_box : Crea un cuadro rectangular
  • primitives.create_cylinder : Crea un cilindro
  • primitives.create_sphere : Crea una esfera
  • primitives.create_cone : Crea un cono
  • primitives.create_torus : Crea un toro
  • primitives.create_polygon : Crea un polígono regular
  • primitives.create_ellipse : Crea una elipse

🔄 Herramientas de exportación/importación ( export_import.* )

  • export_import.export_step : Exportar al formato STEP
  • export_import.import_step : Importar desde formato STEP
  • export_import.export_iges : Exportar a formato IGES
  • export_import.import_iges : Importar desde formato IGES
  • export_import.export_dxf : Exportar a formato DXF
  • export_import.import_dxf : Importar desde formato DXF

💻 Herramientas de generación de código ( code_generator.* )

  • code_generator.generate_python : Genera código Python para el modelo actual
  • code_generator.generate_openscad : Generar código OpenSCAD para el modelo actual
  • code_generator.generate_gcode : Genera código G para mecanizado CNC
  • code_generator.generate_3d_print : Genera configuraciones de impresión 3D optimizadas

📝 Ejemplos de interacciones MCP

A continuación se muestran ejemplos conceptuales del uso del servidor MCP con un asistente de IA:

Creación y exportación de un cuadro

User: Create a box 50mm long, 30mm wide, and 20mm high. Assistant: Okay, I can create that box. [Tool Call: primitives.create_box (arguments: {"length": 50.0, "width": 30.0, "height": 20.0})] [Tool Result: {"object_name": "Box", "message": "Created box...", "success": true}] User: Now export it as box.stl Assistant: Sure, exporting the model to box.stl. [Tool Call: export_import.export_stl (arguments: {"file_path": "box.stl", "object_names": ["Box"]})] [Tool Result: {"file_path": "box.stl", "message": "Exported successfully...", "success": true}] Assistant: I've exported the box model to `box.stl`.

🔍 Solución de problemas

  • Problemas de conexión al servidor MCP :
    • Asegúrese de que python src/mcp_freecad/server/freecad_mcp_server.py pueda ejecutarse sin errores inmediatos. Verifique la salida de la terminal.
    • Verifique la configuración del firewall si es relevante (poco probable para stdio ).
    • Verifique que config.json sea JSON válido.
  • Problemas de conexión de FreeCAD (especialmente con el método launcher ) :
    • Ejecutar extract_appimage.py : asegúrese de que AppImage se haya extraído correctamente y de config.json se haya actualizado.
    • Verificar las rutas config.json : verifique que todas las rutas absolutas en la sección freecad sean correctas para su sistema.
    • Comprobar permisos : asegúrese de que squashfs-root/AppRun tenga permisos de ejecución ( chmod +x ).
    • Verificar registros : examine mcp_freecad.log (creado en la raíz del proyecto si se inicia el registro), freecad_server_stdout.log y freecad_server_stderr.log en busca de errores de freecad_connection_launcher.py , AppRun o el propio proceso de FreeCAD.
    • Variables de entorno : Si AppRun no encuentra bibliotecas, asegúrese de que LD_LIBRARY_PATH y PYTHONPATH estén correctamente configuradas, posiblemente dentro de .cursor/mcp.json si usa Cursor, o exportadas manualmente si prueba en la terminal. El script extract_appimage.py intenta que esto sea menos necesario, pero puede ser un factor.
    • Problemas de funcionamiento sin interfaz gráfica : FreeCAD a veces presenta problemas al ejecutarse completamente sin interfaz gráfica ( QT_QPA_PLATFORM=offscreen ). Revise los registros para detectar errores relacionados con la interfaz gráfica.
  • Método server : asegúrese de que freecad_socket_server.py se esté ejecutando dentro de una instancia activa de FreeCAD, escuchando en el host/puerto correcto configurado en config.json .
  • Método bridge : Verifique que FreeCAD esté instalado en todo el sistema y que el comando freecad funcione en su terminal. Verifique freecad_path en config.json .
  • SDK de MCP faltante : instalar mediante pip install modelcontextprotocol .
  • Problemas de ruta de Python : si no se encuentran los módulos de FreeCAD cuando no se utiliza la configuración recomendada de AppImage, consulte PYTHON_INTERPRETER_SETUP.md .

📄 Licencia

Este proyecto está licenciado bajo la licencia MIT: consulte el archivo de LICENCIA para obtener más detalles.

🖥️ Integración del cursor

El servidor MCP está diseñado para la integración con herramientas como Cursor IDE.

  1. Configurar Cursor : Agregue el servidor MCP en la configuración de Cursor (Configuración > Características > Servidores MCP > Agregar nuevo servidor MCP). Configúrelo para que ejecute el script de Python directamente, configurando las variables de entorno y el directorio de trabajo necesarios. Un ejemplo de configuración en .cursor/mcp.json sería el siguiente:
    { "mcpServers": { "mcp-freecad": { "command": "python3", // Command to run python "args": [ "src/mcp_freecad/server/freecad_mcp_server.py" // Script to run ], "env": { // Environment variables needed for headless AppRun "QT_QPA_PLATFORM": "offscreen", "DISPLAY": "", "FREECAD_CONSOLE": "1", "PYTHONNOUSERSITE": "1", // These might be needed if AppRun doesn't set them automatically "LD_LIBRARY_PATH": "/path/to/mcp-freecad/squashfs-root/usr/lib:/path/to/mcp-freecad/squashfs-root/usr/Ext:...", "PYTHONPATH": "/path/to/mcp-freecad/squashfs-root/usr/lib/python3.11/site-packages:..." }, "cwd": "/path/to/mcp-freecad" // Set working directory to project root } // ... other servers like memory ... } }
    Reemplace /path/to/mcp-freecad con la ruta absoluta de su proyecto. Asegúrese de que LD_LIBRARY_PATH y PYTHONPATH coincidan con la estructura de AppImage si es necesario.
  2. Reiniciar el cursor : reinicie completamente el cursor para que los cambios de configuración surtan efecto.
  3. Comunicación con el servidor : El servidor utiliza el transporte stdio por defecto (configurado en config.json , en server.mcp.transport ), compatible con el protocolo de comunicación de Cursor. Los errores deben reportarse a Cursor mediante respuestas de error de MCP.

Consideraciones específicas del cursor

  • El script freecad_mcp_server.py carga config.json por defecto. Asegúrese de que este archivo contenga la configuración correcta, especialmente la sección freecad actualizada por extract_appimage.py .
  • Las variables de entorno establecidas en .cursor/mcp.json son cruciales para permitir que el método launcher funcione correctamente dentro del entorno que proporciona Cursor.

📋 Opciones disponibles y casos de uso

🔧 Métodos de conexión

  1. Conexión del lanzador (recomendado)
    • Utiliza AppRun desde una AppImage extraída. Es la opción más fiable.
    • Configurado automáticamente por extract_appimage.py .
    • Configuración ( config.json ): GXP19
  2. Conexión de envoltura
    • Ejecuta la lógica de FreeCAD en un subproceso independiente de Python. Una buena alternativa si AppImage/AppRun causa problemas.
    • Configuración ( config.json ): GXP20
  3. Conexión al servidor de sockets
    • Requiere ejecutar freecad_socket_server.py dentro de FreeCAD.
    • Úselo cuando se ejecuta FreeCAD como un servidor en segundo plano persistente.
    • Configuración ( config.json ): GXP21
  4. Conexión de puente CLI
    • Utiliza la herramienta de línea de comandos freecad . Puede ser más lento o menos fiable.
    • Configuración ( config.json ): GXP22
  5. Conexión simulada
    • Para probar sin FreeCAD.
    • Configuración ( config.json ): GXP23
  6. Conexión automática
    • Selecciona automáticamente el mejor método disponible (lanzador > contenedor > servidor > puente > simulacro).
    • Predeterminado si falta connection_method o está configurado en "auto" .

🛠️ Categorías de herramientas y casos de uso

  1. Operaciones básicas de FreeCAD
    • Gestión esencial de documentos
    • Casos de uso:
      • Creación de nuevos documentos
      • Guardar y cargar proyectos
      • Exportación a varios formatos
      • Gestión de la estructura del documento
  2. Manipulación de modelos
    • Transformar y modificar objetos
    • Casos de uso:
      • Rotar objetos con precisión
      • Objetos en movimiento en el espacio 3D
      • Modelos de escala
      • Creación de espejos y copias
      • Operaciones booleanas (unión, corte, intersección)
  3. Herramientas de medición
    • Análisis y verificación
    • Casos de uso:
      • Mediciones de distancia
      • Cálculos de ángulos
      • Análisis del área de superficie
      • Cálculos de volumen
      • Propiedades de la masa
  4. Creación primitiva
    • Generación de formas básicas
    • Casos de uso:
      • Creación de cajas y cilindros
      • Generando esferas
      • Fabricación de conos y toros
      • Creación de polígonos regulares
      • Dibujar elipses
  5. Operaciones de Exportación/Importación
    • Conversión de formatos de archivo
    • Casos de uso:
      • Exportación/importación de archivos STEP
      • Manejo del formato IGES
      • Procesamiento de archivos DXF
      • Exportación STL para impresión 3D
  6. Generación de código
    • Creación automatizada de código
    • Casos de uso:
      • Generación de scripts de Python
      • Exportación de código OpenSCAD
      • Generación de código G para CNC
      • Optimización de la configuración de la impresora 3D

💻 Escenarios de integración

  1. Integración de Cursor IDE
    • Integración del entorno de desarrollo
    • Casos de uso:
      • Manipulación directa del modelo desde el IDE
      • Retroalimentación en tiempo real
      • Registro de depuración
      • Seguimiento de errores
  2. Integración del asistente de IA
    • Automatización del diseño impulsada por IA
    • Casos de uso:
      • Creación de modelos de lenguaje natural
      • Modificaciones de diseño automatizadas
      • Optimización de parámetros
      • Validación del diseño
  3. Uso de la línea de comandos
    • Scripting y automatización
    • Casos de uso:
      • Procesamiento por lotes
      • Pruebas automatizadas
      • Integración CI/CD
      • Herramientas de línea de comandos

Ejemplos de casos de uso comunes

  1. Prototipado rápido
# Create a new document freecad.create_document("Prototype") # Add basic shapes primitives.create_box(length=100, width=50, height=20) # Export for 3D printing export_import.export_stl("prototype.stl")
  1. Procesamiento automatizado
# Import and modify multiple files for file in files: import_step(file) model_manipulation.scale(1.5) export_stl(f"{file}_scaled.stl")

⚙️ Opciones de configuración

  1. Configuración del servidor
{ "server": { "name": "custom-server-name", "version": "1.0.0", "description": "Custom description" } }
  1. Habilitación de herramientas
{ "tools": { "enable_smithery": true, "enable_primitives": true, "enable_model_manipulation": true, "enable_export_import": true, "enable_measurement": true, "enable_code_generator": true } }
  1. Configuración de depuración
{ "cursor": { "debug": true, "log_level": "DEBUG", "stdio_transport": true } }

Características

  • Conecte asistentes de IA a FreeCAD a través del protocolo MCP
  • Crear y manipular modelos 3D mediante programación
  • Soporte para formas primitivas (caja, cilindro, esfera, cono)
  • Operaciones booleanas (unión, intersección, corte)
  • Transformaciones de objetos (mover, rotar)
  • Exportar modelos a formato STL
  • Gestión de documentos y objetos

Prerrequisitos

  • Python 3.8 o más reciente
  • SDK de MCP ( pip install modelcontextprotocol )
  • Recomendado : una AppImage de FreeCAD (descargada y extraída usando extract_appimage.py ) para el método de conexión launcher confiable.
  • Alternativamente : una instalación del sistema de FreeCAD 0.20+ (para métodos bridge o server , potencialmente menos confiable).

Herramientas disponibles

Gestión de documentos

  1. freecad.create_document - Crea un nuevo documento de FreeCAD
  2. freecad.list_documents - Lista todos los documentos abiertos
  3. freecad.list_objects - Lista todos los objetos en un documento

Primitivas 3D

  1. freecad.create_box - Crea una primitiva de caja
  2. freecad.create_cylinder - Crea un cilindro primitivo
  3. freecad.create_sphere - Crea una primitiva de esfera
  4. freecad.create_cone - Crea un cono primitivo

Operaciones booleanas

  1. freecad.boolean_union - Crea una unión de dos objetos (agregar)
  2. freecad.boolean_cut - Corta el segundo objeto del primero (restar)
  3. freecad.boolean_intersection - Crea la intersección de dos objetos (volumen común)

Transformaciones

  1. freecad.move_object - Mover un objeto a una nueva posición
  2. freecad.rotate_object - Rotar un objeto

Exportar

  1. freecad.export_stl - Exportar el modelo a un archivo STL

Pruebas

El proyecto incluye pruebas unitarias y pruebas de extremo a extremo (E2E) para garantizar la calidad y la confiabilidad.

Pruebas unitarias

Para ejecutar las pruebas unitarias básicas:

python test_mcp_tools.py python test_mcp_client.py

Pruebas de extremo a extremo

Las pruebas integrales verifican el correcto funcionamiento de todo el sistema desde la perspectiva del cliente. Prueban escenarios reales y las interacciones entre los diferentes componentes.

Para ejecutar todas las pruebas E2E:

# Run with mock FreeCAD (default, doesn't require actual FreeCAD installation) ./tests/e2e/run_tests.py # Run with verbose output ./tests/e2e/run_tests.py --verbose # Run with real FreeCAD connection (requires FreeCAD to be installed) ./tests/e2e/run_tests.py --real # Run a specific test file ./tests/e2e/run_tests.py --single test_primitives.py

Las pruebas E2E están organizadas por funcionalidad:

  • test_primitives.py - Pruebas para la creación y manipulación de formas básicas
  • test_smithery.py - Pruebas para operaciones con herramientas de herrería

Escritura de nuevas pruebas E2E

Para agregar nuevas pruebas E2E:

  1. Cree un nuevo archivo de prueba en el directorio tests/e2e/
  2. Amplíe la clase de prueba base adecuada ( MCPClientTestBase )
  3. Agregue métodos de prueba que utilicen el cliente MCP para interactuar con las herramientas
  4. Ejecute sus pruebas con el ejecutor de pruebas

Consulte los archivos de prueba existentes para ver ejemplos.

Documentación

El proyecto incluye varios archivos de documentación para diferentes aspectos:

Para los asistentes de IA, consulte AI_ASSISTANT_GUIDE.md para obtener instrucciones de uso detalladas y ejemplos.

Contribuyendo

¡Agradecemos sus contribuciones! No dude en enviar una solicitud de incorporación de cambios.

Expresiones de gratitud

  • Equipo de desarrollo de FreeCAD para el increíble software CAD
  • Anthropic y Claude para el SDK del Protocolo de Contexto de Modelo (MCP)
-
security - not tested
A
license - permissive license
-
quality - not tested

Este proyecto proporciona una sólida integración entre los asistentes de IA y el software CAD FreeCAD mediante el Protocolo de Contexto de Modelo (MCP). Permite que las aplicaciones externas interactúen con FreeCAD a través de una interfaz estandarizada, ofreciendo múltiples métodos de conexión y herramientas especializadas.

  1. Quick Start (Recommended: AppImage + Launcher)
    1. Docker Support
      1. Running with Docker Compose
      2. Docker Configuration
    2. 🔄 MCP Flow Chart
      1. 🔄 Core Components
        1. 1. FreeCAD MCP Server (freecad_mcp_server.py)
        2. 2. FreeCAD Connection (freecad_connection_manager.py)
        3. 3. FreeCAD Launcher (freecad_connection_launcher.py)
        4. 4. FreeCAD Wrapper (freecad_connection_wrapper.py) & Subprocess (freecad_subprocess.py)
        5. 5. FreeCAD Server (freecad_socket_server.py)
        6. 6. FreeCAD Bridge (freecad_connection_bridge.py)
        7. 7. FreeCAD Client (freecad_client.py)
      2. 🔄 Project Structure
        1. ⚙️ Installation & Setup Details
          1. Recommended Setup: AppImage + Launcher (Detailed Steps)
          2. Other Installation Methods
        2. 🚀 Using the MCP Server
          1. Starting the MCP Server
          2. Connecting an MCP Client
          3. Alternative: Starting FreeCAD with Integrated Server
          4. MCP Server Configuration (config.json)
        3. 🛠️ Available MCP Tools
          1. 📐 Basic FreeCAD Tools (freecad.*)
          2. 🔧 Model Manipulation Tools (model_manipulation.*)
          3. 📏 Measurement Tools (measurement.*)
          4. 📦 Primitives Tools (primitives.*)
          5. 🔄 Export/Import Tools (export_import.*)
          6. 💻 Code Generation Tools (code_generator.*)
        4. 📝 Example MCP Interactions
          1. Creating and Exporting a Box
        5. 🔍 Troubleshooting
          1. 📄 License
            1. 🖥️ Cursor Integration
              1. Cursor-Specific Considerations
            2. 📋 Available Options and Use Cases
              1. 🔧 Connection Methods
              2. 🛠️ Tool Categories and Use Cases
              3. 💻 Integration Scenarios
              4. 🎯 Common Use Case Examples
              5. ⚙️ Configuration Options
            3. Features
              1. Prerequisites
                1. Available Tools
                  1. Document Management
                  2. 3D Primitives
                  3. Boolean Operations
                  4. Transformations
                  5. Export
                2. Testing
                  1. Unit Tests
                  2. End-to-End Tests
                3. Documentation
                  1. Contributing
                    1. Acknowledgments
                      ID: hee3my85fb