From 2ffcf005704bb0a157a977dfc99c3412f8c26963 Mon Sep 17 00:00:00 2001 From: Robert Helewka Date: Mon, 6 Apr 2026 15:07:15 +0000 Subject: [PATCH] feat: migrate freecad-mcp to GitHub fork install and refactor deployments - Switch freecad-mcp installation from PyPI to Heluca GitHub fork, using a configurable git ref (freecad_mcp_git_ref) instead of pinned PyPI version - Retarget freecad-mcp deployment from Caliban to Larissa, update port from 22032 to 22063, and change service user to freecad-mcp - Add git to apt dependencies for pip git+https installs - Make deployment summary use inventory_hostname instead of hardcoded host - Refactor kernos deploy to target all ubuntu hosts with service-based filtering via `services` host_var, replacing static host group --- ansible/freecad_mcp/deploy.yml | 23 +++++++++++------------ ansible/inventory/group_vars/all/vars.yml | 2 ++ ansible/kernos/deploy.yml | 13 +++++++++++-- 3 files changed, 24 insertions(+), 14 deletions(-) diff --git a/ansible/freecad_mcp/deploy.yml b/ansible/freecad_mcp/deploy.yml index 7fcb10a..98893c4 100644 --- a/ansible/freecad_mcp/deploy.yml +++ b/ansible/freecad_mcp/deploy.yml @@ -2,22 +2,21 @@ # ============================================================================= # FreeCAD Robust MCP Server — Ansible Deployment Playbook # ============================================================================= -# Deploys the FreeCAD MCP Server to Caliban as a systemd service. +# Deploys the FreeCAD MCP Server to Larissa as a systemd service. # # The server runs in xmlrpc mode with HTTP transport, exposing the MCP -# protocol over streamable-http for consumption by MCP Switchboard on Oberon. +# protocol over streamable-http for consumption by MCP Switchboard on Triton. # -# Pattern: venv + pip install from PyPI (matches Kernos deployment) +# Pattern: venv + pip install from GitHub fork (fastmcp>=3.2.0) # # Usage: # ansible-playbook freecad_mcp/deploy.yml # -# Required host_vars (caliban.incus.yml): -# freecad_mcp_user: harper -# freecad_mcp_group: harper +# Required host_vars: +# freecad_mcp_user: freecad-mcp +# freecad_mcp_group: freecad-mcp # freecad_mcp_directory: /srv/freecad-mcp -# freecad_mcp_port: 22032 -# freecad_mcp_version: "0.5.0" # PyPI version to pin +# freecad_mcp_port: 22063 # # Optional host_vars: # freecad_mcp_host: "0.0.0.0" @@ -95,7 +94,7 @@ - name: Ensure Python 3, venv, dev headers, and FreeCAD are installed become: true ansible.builtin.apt: - name: [python3, python3-venv, python3-dev, freecad] + name: [python3, python3-venv, python3-dev, git, freecad] state: present update_cache: true @@ -119,12 +118,12 @@ state: latest virtualenv: "{{ freecad_mcp_directory }}/.venv" - - name: Install freecad-robust-mcp from PyPI + - name: Install freecad-robust-mcp from Heluca fork become: true become_user: "{{ freecad_mcp_user }}" ansible.builtin.pip: name: - - "freecad-robust-mcp=={{ freecad_mcp_version }}" + - "freecad-robust-mcp @ git+https://github.com/heluca/freecad-addon-robust-mcp-server.git@{{ freecad_mcp_git_ref }}" virtualenv: "{{ freecad_mcp_directory }}/.venv" virtualenv_command: python3 -m venv notify: restart freecad-mcp @@ -205,7 +204,7 @@ ansible.builtin.debug: msg: >- FreeCAD MCP Server deployed successfully on - caliban.incus:{{ freecad_mcp_port }} + {{ inventory_hostname }}:{{ freecad_mcp_port }} # ========================================================================= # Handlers diff --git a/ansible/inventory/group_vars/all/vars.yml b/ansible/inventory/group_vars/all/vars.yml index 16bc910..47607e5 100644 --- a/ansible/inventory/group_vars/all/vars.yml +++ b/ansible/inventory/group_vars/all/vars.yml @@ -40,6 +40,8 @@ freecad_mcp_version: 0.6.1 openwebui_rel: 0.8.3 pulseaudio_module_xrdp_rel: devel searxng_oauth2_proxy_version: 7.6.0 +# Git ref (branch, tag, or commit) - https://github.com/heluca/freecad-addon-robust-mcp-server +freecad_mcp_git_ref: "main" # MCP URLs argos_mcp_url: http://miranda.incus:25534/mcp diff --git a/ansible/kernos/deploy.yml b/ansible/kernos/deploy.yml index f8e1eac..6ca7aba 100644 --- a/ansible/kernos/deploy.yml +++ b/ansible/kernos/deploy.yml @@ -1,10 +1,19 @@ --- - name: Deploy Kernos MCP Shell Server - hosts: kernos + hosts: ubuntu vars: - ansible_common_remote_group: "{{kernos_group}}" + ansible_common_remote_group: "{{kernos_group | default([]) }}" allow_world_readable_tmpfiles: true + tasks: + - name: Check if host has kernos service + ansible.builtin.set_fact: + has_kernos_service: "{{ 'kernos' in services | default([]) }}" + + - name: Skip hosts without kernos service + ansible.builtin.meta: end_host + when: not has_kernos_service + - name: Create Kernos group become: true ansible.builtin.group: