refactor(ansible): rename freecad_mcp env vars and rework deployment
- Drop `FREECAD_MCP_` prefix from env vars (use `FREECAD_*`) - Update freecad_mcp port from 22032 to 22061 - Document that FreeCAD bridge is required for tool calls - Replace kottos deployment with pallas deployment
This commit is contained in:
@@ -216,3 +216,102 @@
|
||||
ansible.builtin.systemd:
|
||||
name: freecad-mcp
|
||||
state: restarted
|
||||
|
||||
|
||||
# =============================================================================
|
||||
# FreeCAD MCP Bridge (GUI) — runs FreeCAD on the XRDP desktop as principal_user,
|
||||
# exposing the XML-RPC bridge on localhost:9875 that the MCP server connects to.
|
||||
# =============================================================================
|
||||
- name: Deploy FreeCAD MCP Bridge (GUI)
|
||||
hosts: freecad_mcp
|
||||
tasks:
|
||||
|
||||
- name: Ensure FreeCAD is installed
|
||||
become: true
|
||||
ansible.builtin.apt:
|
||||
name: [freecad, tar]
|
||||
state: present
|
||||
update_cache: true
|
||||
|
||||
- name: Create FreeCAD MCP bridge directory
|
||||
become: true
|
||||
become_user: "{{ principal_user }}"
|
||||
ansible.builtin.file:
|
||||
path: "{{ freecad_mcp_bridge_directory }}"
|
||||
state: directory
|
||||
mode: '0755'
|
||||
|
||||
- name: Transfer and extract FreeCAD MCP bridge release
|
||||
become: true
|
||||
become_user: "{{ principal_user }}"
|
||||
ansible.builtin.unarchive:
|
||||
src: "~/rel/freecad_mcp_bridge_{{ freecad_mcp_git_ref }}.tar"
|
||||
dest: "{{ freecad_mcp_bridge_directory }}"
|
||||
notify: restart freecad-mcp-bridge
|
||||
|
||||
- name: Template FreeCAD MCP bridge systemd service
|
||||
become: true
|
||||
ansible.builtin.template:
|
||||
src: freecad-mcp-bridge.service.j2
|
||||
dest: /etc/systemd/system/freecad-mcp-bridge.service
|
||||
owner: root
|
||||
group: root
|
||||
mode: '644'
|
||||
notify:
|
||||
- reload systemd
|
||||
- restart freecad-mcp-bridge
|
||||
|
||||
- name: Enable and start freecad-mcp-bridge service
|
||||
become: true
|
||||
ansible.builtin.systemd:
|
||||
name: freecad-mcp-bridge
|
||||
enabled: true
|
||||
state: started
|
||||
daemon_reload: true
|
||||
|
||||
- name: Flush handlers to restart bridge before validation
|
||||
ansible.builtin.meta: flush_handlers
|
||||
|
||||
- name: Wait for FreeCAD XML-RPC bridge to listen
|
||||
ansible.builtin.wait_for:
|
||||
port: "{{ freecad_mcp_xmlrpc_port | default(9875) }}"
|
||||
host: localhost
|
||||
delay: 5
|
||||
timeout: 60
|
||||
|
||||
- name: Verify bridge is in GUI mode (FreeCAD.GuiUp via XML-RPC execute)
|
||||
ansible.builtin.command:
|
||||
argv:
|
||||
- python3
|
||||
- -c
|
||||
- |
|
||||
import sys, xmlrpc.client
|
||||
proxy = xmlrpc.client.ServerProxy(
|
||||
"http://localhost:{{ freecad_mcp_xmlrpc_port | default(9875) }}", allow_none=True)
|
||||
resp = proxy.execute("_result_ = bool(FreeCAD.GuiUp)")
|
||||
if not (resp.get("success") and resp.get("result") is True):
|
||||
sys.exit("Bridge reachable but not in GUI mode: %r" % resp)
|
||||
print("FreeCAD bridge GUI mode confirmed")
|
||||
register: bridge_gui_check
|
||||
retries: 5
|
||||
delay: 5
|
||||
until: bridge_gui_check.rc == 0
|
||||
changed_when: false
|
||||
|
||||
- name: Display bridge info
|
||||
ansible.builtin.debug:
|
||||
msg: >-
|
||||
FreeCAD MCP Bridge running in GUI mode on {{ inventory_hostname }},
|
||||
XML-RPC localhost:{{ freecad_mcp_xmlrpc_port | default(9875) }}
|
||||
|
||||
handlers:
|
||||
- name: reload systemd
|
||||
become: true
|
||||
ansible.builtin.systemd:
|
||||
daemon_reload: true
|
||||
|
||||
- name: restart freecad-mcp-bridge
|
||||
become: true
|
||||
ansible.builtin.systemd:
|
||||
name: freecad-mcp-bridge
|
||||
state: restarted
|
||||
|
||||
Reference in New Issue
Block a user