2026-02-12 12:39 AM - last edited on 2026-02-12 01:28 AM by Barry Kelly
I'll keep this brief, but it is interesting enough that others might want to know about it.
Our template evolves with each version and has been building since probably 7.0, so there is a lot of pain when trying to finally get around to the arduous task of moving to the global libraries. I'm finally doing this in the interest of future-proofing.
The template is comprised of a main project template, another project containing our visual favorites, and a third project containing standard details. I used Claude Cowork (Max) and, in a nutshell, told it to use the ArchiCAD API, the Tapir MCP for ArchiCAD, python, and the Control Your Mac Claude plugin to write itself the programs suitable to map the most equivalent library parts from my legacy template (hundreds of them!) and replace them. Much of it is completely automated and I'm sitting here watching my missing parts get replaced on screen one-by-one!
It's fascinating and amazing what AI is capable of and this just saved me MANY, MANY hours of manual work.
I'm not a coder, but I'm able to coax Claude into doing some fairly sophisticated stuff like this. Grpahisoft, please tell us that you're actively and rapidly developing full MCP capabilities for ArchiCAD because this is life-changing stuff.
2026-02-12 02:27 AM
MCP support is Coming Soon for the AI Assistant:
https://community.graphisoft.com/t5/Product-Roadmap/MCP-Support/idi-p/682950
2026-02-12 02:29 AM
Can you elaborate in a bit more detail about how exactly you achieve this library part replacement?
2026-02-12 03:36 AM
It’s basically magic.
I setup a folder for Cowork to use and within it I placed the ArchiCAD API documentation, ArchiCAD python documentation, all of the AC29 libpacks, my company library parts and some other misc. info. Then I told it to review the documentation and determine where the functionality gaps were between the tools and figure out how to close those gaps using other tools (like Control Your Mac, AppleScript, the Tapir MCP, etc.). I fed it the default Archicad keyboard shortcuts and told it to create its own comprehensive keyboard shortcuts for every single command, hoping to allow keyboard control where it would be helpful (this is still not quite working).
It created a “bridge” script that assists with interacting with ArchiCAD and it developed a bunch of python scripts on its own. Once all of that was built, I told it to examine the missing library parts and the libpacks and build a logical mapping of [missing part = replacement part], which it did. Then it used that index to script the interactions with AC. I ran the script which would select the missing parts by name and replace them automatically with the mapped replacement. For some it couldn’t do it automatically so it would select them in AC and then prompt me to open the settings dialog to switch it to the new part, then tell if when I was done and it would move on to the next.
That took care of the vast majority of replacements in the plan window. I started it working out how to navigate through to details & worksheets to replace parts, but I didn’t finish that before the end of the day so I’ll resume tomorrow.
If you guys get a “real” native MCP working soon that will allow full control of AC it will literally change the game since Claude won’t have to invent this cobbled together, but still impressive, collection of tools.
2026-02-13 04:03 AM
Laszlo,
I continued work with Claude today, so I asked it to write a summary of what we've done so far. Here is that summary:
MG Architects | February 2026 Tool Stack: Claude AI (Cowork) + Tapir MCP + ArchiCAD 29
Using AI desktop automation (Anthropic's Cowork) connected directly to a live ArchiCAD session via the Tapir API, we systematically audited, analyzed, and began modernizing MGA's AC 29 Project Template — a file that has evolved across 20+ ArchiCAD versions.
Control_your_Mac) — MCP server granting Claude system-level control: AppleScript execution, keyboard/mouse input, screenshot capturenode process Accessibility permissions system-wide — required for UI automation without manual approval dialogsarchicad pip package) — All automation scripts and data processingClaude generated 6,734 lines of Python, 273 lines of shell/YAML, and 4,370 lines of structured JSON data across 26 scripts, 2 task definitions, and 6 data catalogs — all purpose-built for this project.
archicad-automation/scripts/)These seven modules form a complete ArchiCAD automation engine with three integrated layers: API, UI, and Screen.
| Script | Lines | Purpose |
|---|---|---|
ac_auto.py |
1,485 | Main CLI tool. Command router for all ArchiCAD operations — element find/select, linetype changes, migration map with 40+ legacy→AC29 library part mappings, multi-pass auto-migration engine, rollback support |
api.py |
1,053 | ArchiCAD JSON-RPC client. Port auto-detection across 19723–19729, raw HTTP client (zero dependencies), element queries by type, property reads/writes, batch operations with 500-element pagination, selection management via Tapir |
strategy.py |
863 | Natural language intent router. Maintains an action library of known operations with keywords/patterns; when Claude gives a natural language instruction, matches it to the right API call, UI sequence, or composite action |
teach.py |
861 | Task recorder and player. Records user actions via OCR, saves as YAML task files with text-anchored steps (not fixed coordinates), replays tasks adaptively by finding UI targets on screen |
ui.py |
607 | AppleScript UI automation. Menu clicking across 850+ ArchiCAD commands, keyboard shortcuts, dialog exploration, bridge protocol communication (reads/writes command files for the Accessibility bridge) |
screen.py |
469 | Screenshot + OCR engine. Captures screen regions via screencapture, runs text recognition through macOS Vision framework via compiled Swift, finds text locations for click targeting |
config.py |
137 | Central configuration. ArchiCAD port ranges, known Property GUIDs, Built-in Property names, Line Type GUIDs, Menu path mappings, screenshot directories |
Purpose-built scripts for specific audit and migration operations, each connecting to the live ArchiCAD API:
| Script | Lines | Purpose |
|---|---|---|
run_auto_migrate.py |
163 | Auto-migration runner. Extracts the 40+ entry MIGRATION_MAP from ac_auto.py, connects to template project, iterates all element types, batch-replaces legacy library parts with AC29 equivalents, logs every change |
extract_missing_library_parts.py |
119 | Missing parts extractor. Queries the Warnings panel data and library manager to identify all missing library parts by source library version |
full_scan.py |
96 | Comprehensive element scanner. Iterates ALL 19 ArchiCAD element types (Object, Door, Window, Skylight, Lamp, Column, Beam, Wall, Slab, Roof, Shell, Morph, Stair, Railing, Zone, Mesh, CurtainWall, Opening, Label), catalogs every library part in use with counts and GUIDs |
probe_create.py |
93 | API schema probe #1. Reverse-engineers the Tapir CreateObjects command schema by testing element detail retrieval and GDL parameter extraction |
probe_create2.py |
91 | API schema probe #2. Exhaustive search across 15+ possible root field names for the CreateObjects endpoint |
probe_create3.py |
79 | API schema probe #3. Brute-force exploration of 40+ field name variations to map the undocumented CreateObjects API |
scan_doors_windows.py |
87 | Door/window migration scanner. Identifies all Door and Window elements using legacy library parts (AC23, AC27) and maps them to AC29 replacements — flags elements requiring interactive (non-API) migration |
scan_ac20.py |
87 | AC Library 20 scanner. Finds all elements still referencing ArchiCAD Library 20 parts (30+ legacy detail components, structural shapes, and niche objects) and identifies AC29 equivalents |
scan_markers.py |
76 | Marker element scanner. Examines Label elements with blank property names, uses GetDetailsOfElements to identify actual library part names for section/elevation/detail markers |
handle_ac20_remaining.py |
75 | AC20 cleanup handler. Targeted script for final remaining AC20 items — replaces DET_Mtl Track with MGA equivalent, flags W Niche 20 and Telephone 20 for deletion |
final_scan_template.py |
64 | Post-migration verification. Parses the full MIGRATION_MAP, scans all element types to confirm every legacy part was successfully replaced, reports any remaining stragglers |
scan_labels.py |
50 | Label element scanner. Catalogs all Label elements by library part name, tracks owner element types, reports counts per label type |
select_group.py |
40 | Batch element selector. Reads door/window scan results, selects groups of elements by migration category so the user can apply interactive replacements in ArchiCAD's UI |
select_labels.py |
40 | Label selector. Finds and selects all Label elements matching a specified library part name — enables batch operations on specific marker types |
| Script | Lines | Purpose |
|---|---|---|
archicad_bridge.sh |
85 | Accessibility bridge. File-watch daemon that runs inside Terminal.app (which has Accessibility permissions). Claude writes AppleScript commands to /tmp/ac_bridge/cmd.scpt, the bridge executes them via osascript and returns results — solves the macOS permission sandboxing problem |
setup.sh |
86 | Environment installer. Installs the archicad pip package, checks for and installs cliclick via Homebrew, verifies all dependencies |
| Task File | Purpose |
|---|---|
set-symbol-linetype.yaml |
Automates changing Symbol Lines linetype on selected objects via the Object Selection Settings dialog — navigates to Floor Plan & Section panel, scrolls to field, opens dropdown, selects target linetype, confirms |
find-and-select-by-name.yaml |
Finds all elements of a given type whose Library Part Name matches a substring, then selects them in ArchiCAD — enables batch operations by name |
| File | Purpose |
|---|---|
action_library.json |
Strategy engine's registry of known automation actions with keywords, patterns, methods, and parameters |
library_migration_index.json |
Complete mapping of legacy library parts to AC29 equivalents with match confidence |
missing_parts_inventory.json |
Structured inventory of all missing library parts by source library version |
appliances_libpack_catalog.json |
Full catalog of the Appliances.libpack contents for migration reference |
plumbing_steel_catalog.json |
Plumbing and structural steel library part catalog |
annotation_catalog.json |
Annotation and marker library part catalog |
misc_catalog.json |
Miscellaneous library part catalog |
surface_mapping.json |
Machine-readable mapping of 66 surfaces with missing textures to AC29 replacements |
surface_replacement_map.json |
Final surface replacement directives for batch processing |
| File | Lines | Content |
|---|---|---|
ANALYSIS_COMPLETE.txt |
540 | Full 12-category attribute comparison across 1,228 template items vs. 717 AC29 defaults |
attribute_comparison.txt |
1,624 | Detailed comparison with EXACT MATCH, TEMPLATE ONLY, AC29 ONLY, and LIKELY MATCH for every attribute type |
FINAL_REPORT.txt |
380 | Executive summary with critical findings (MEP system gaps, surface texture issues) |
missing_texture_surface_mapping.txt |
614 | 66 affected surfaces mapped to remediation paths (29 with AC29 replacements, 37 needing custom solutions) |
auto_migrate_log.txt through pass4.log |
600+ | Four-pass migration logs documenting every element replacement across all passes |
full_scan_results.json |
420 | Complete element-by-element scan results across all 19 element types |
Claude_Cowork_Comprehensive_29.xml — Full workspace profile optimized for AI automationClaude_Cowork_Info_Box_29.xml — Info Box layout configured for automation readsClaude_Cowork_Palette_Layout_29.xml — Palette positions for consistent screenshot targetingClaude_Cowork_More_Options_29.xml — Extended options panel configurationClaude_Cowork_Shortcut_Reference.docx — Custom keyboard shortcut documentationWork that would have taken weeks of manual effort — opening Attribute Manager, cross-referencing spreadsheets, checking element placements one by one — was accomplished in two focused sessions with AI doing the heavy lifting.
The process is repeatable. The same audit can run on any MGA project file to bring it into compliance with the new standard.
Wednesday
They changed it to "in progress" :)))))