archicad-tapir-mcp
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| ARCHICAD_HOST | No | Host of the Archicad instance. | 127.0.0.1 |
| ARCHICAD_PORT | No | Fixed Archicad port to use if multiple Archicad instances are open. By default, the server auto-detects the port. | |
| ARCHICAD_TIMEOUT | No | Timeout in seconds to wait for each command. | 120 |
| ARCHICAD_MCP_TOOLS | No | Controls which Tapir commands are exposed: 'curated' exposes a curated set, 'all' exposes ~250 commands as tools, 'none' leaves only generic tools. | curated |
| ARCHICAD_MCP_JOURNAL | No | Path to the journal file used for undo history. Defaults to ~/.archicad-mcp/journal.json. | ~/.archicad-mcp/journal.json |
| ARCHICAD_MCP_MAX_CHARS | No | Maximum length of each response; longer responses are truncated. | 100000 |
| ARCHICAD_MCP_READ_ONLY | No | When set to '1', rejects any command that could modify the model. | 0 |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": false
} |
| experimental | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| archicad_statusA | Lists the running Archicad instances (port, version) and whether the Tapir add-on answers. |
| tapir_list_commandsA | Lists Tapir commands with a one-line description, optionally filtered by group name or text. |
| tapir_describe_commandA | Returns the input and output JSON schemas of a Tapir command. Read this before tapir_run_command. |
| tapir_run_commandA | Runs any Tapir command. The parameters are validated against the command's input schema (see tapir_describe_command). May modify or delete model data depending on the command. |
| archicad_run_api_commandC | Runs an official Archicad JSON API command, e.g. 'API.GetElementsByType' or 'API.GetBuiltInPropertyIds'. See Graphisoft's JSON API reference for parameters. |
| archicad_model_summaryA | One-call overview of the open project: project info, stories, element counts by type, story and layer, zone areas and the current selection. Start here to understand a model. |
| archicad_list_elementsA | Compact list of elements (guid, type, ID, story name, layer name). Much smaller than GetDetailsOfElements; use it to find elements before acting on them. |
| archicad_quantitiesA | Quantity take-off from Archicad's built-in properties: lengths (m), areas (m²), volumes (m³) and counts, totalled by element type and optionally by story or layer, as JSON or CSV. |
| archicad_check_modelB | Model quality checks: missing or duplicate IDs, unclassified elements, probable duplicate elements, elements on hidden or locked layers, zones without area, unnamed or empty stories. |
| archicad_element_imagesB | Returns images of elements so you can see them: a 3D, 2D or section preview of each element, and a floor plan clip of each zone. Defaults to the selection when no scope is given. |
| archicad_set_element_idsA | Changes element IDs: explicit values, unique suffixes for repeated IDs (fixDuplicates) or a prefix + number sequence (numbering). Revert with archicad_undo. |
| archicad_classification_itemsA | Lists the items of a classification system with their path, to use in archicad_classify_elements. |
| archicad_classify_elementsA | Classifies many elements at once with rules by element type and/or layer (e.g. every Slab on layer '02 PLAZA - Pasto' as 'Terrain'), by default only those still unclassified. Revert with archicad_undo. |
| archicad_create_roomA | Creates a room from an outline: walls along its edges, a floor slab and a zone, on one story. Revert with archicad_undo. |
| archicad_create_slabsA | Creates many homogeneous slabs at once (site blocks, platforms, masses) with an exact top level and thickness, optionally on a named layer. Revert with archicad_undo. |
| archicad_move_elementsA | Moves elements (explicit list, selection or a type) by a vector in meters. Revert with archicad_undo. |
| archicad_rotate_elementsA | Rotates elements in plan around a point by an angle in degrees. Revert with archicad_undo. |
| archicad_set_slab_levelsA | Changes the top level and/or thickness of slabs (e.g. the height of site masses), verifying the result in 3D. Revert with archicad_undo. |
| archicad_set_meshA | Changes a Mesh (terrain): its level, skirt depth and holes. Works on locked layers and checks the result in 3D. Revert with archicad_undo. |
| archicad_create_meshesA | Creates terrain Meshes with heights per point (surveyed ground, paths, curbs), as solid bodies, optionally on a named layer. Revert with archicad_undo. |
| archicad_create_surface_morphA | Creates a Morph surface from triangles (e.g. a path draped on terrain) with its own building material, so it reads differently from the mesh below. Revert with archicad_undo. |
| archicad_undoA | Reverts the last actions made with archicad_set_element_ids, archicad_classify_elements, archicad_create_slabs, archicad_create_meshes, archicad_move_elements, archicad_rotate_elements, archicad_set_slab_levels, archicad_set_mesh, archicad_create_surface_morph or archicad_create_room in the open project: deletes what they created and restores what they changed. |
| archicad_historyA | Lists the actions archicad_undo can revert in the open project, newest first. |
| GetProjectInfoB | Retrieves information about the currently loaded project. (Tapir, Project Commands) |
| GetStoriesB | Retrieves information about the story sructure of the currently loaded project. (Tapir, Project Commands) |
| GetSelectedElementsB | Gets the list of the currently selected elements. (Tapir, Element Commands) |
| GetElementsByTypeB | Returns the identifier of every element of the given type on the plan. It works for any type. Use the optional filter parameter for filtering. (Tapir, Element Commands) |
| GetAllElementsC | Returns the identifier of all elements on the plan. Use the optional filter parameter for filtering. (Tapir, Element Commands) |
| FilterElementsC | Tests an elements by the given criterias. (Tapir, Element Commands) |
| GetDetailsOfElementsA | Gets the details of the given elements (geometry parameters etc). Use the optional fields parameter to return only the fields you need and skip the computation of the others (for example floorPlanPolygons). (Tapir, Element Commands) |
| Get3DBoundingBoxesB | Get the 3D bounding box of elements. The bounding box is calculated from the global origin in the 3D view. The output is the array of the bounding boxes respective to the input array of elements. (Tapir, Element Commands) |
| HighlightElementsB | Highlights the elements given in the elements array. In case of empty elements array removes all previously set highlights. (Tapir, Element Commands) |
| ChangeSelectionOfElementsC | Adds/removes a number of elements to/from the current selection. (Tapir, Element Commands) |
| GetAllPropertiesB | Returns all user defined and built-in properties. (Tapir, Property Commands) |
| GetPropertyValuesOfElementsB | Returns the property values of the elements for the given property. It works for subelements of hierarchal elements also. (Tapir, Property Commands) |
| SetPropertyValuesOfElementsC | Sets the property values of elements. It works for subelements of hierarchal elements also. (Tapir, Property Commands) |
| GetClassificationsOfElementsC | Returns the classification of the given elements in the given classification systems. It works for subelements of hierarchal elements also. (Tapir, Classification Commands) |
| SetClassificationsOfElementsB | Sets the classifications of elements. In order to set the classification of an element to unclassified, omit the classificationItemId field. It works for subelements of hierarchal elements also. (Tapir, Classification Commands) |
| GetGDLParametersOfElementsB | Gets all the GDL parameters (name, type, value) of the given elements. (Tapir, Element Commands) |
| SetGDLParametersOfElementsC | Sets the given GDL parameters of the given elements. (Tapir, Element Commands) |
| GetLayersC | Returns the details of the given Layer attributes. (Tapir, Attribute Commands) |
| GetAttributesByTypeC | Returns the details of every attribute of the given type. (Tapir, Attribute Commands) |
| GetZoneBoundariesA | Gets the boundaries of the given Zones (connected elements, neighbour zones, etc.). Accepts either a single zoneElementId or a list of zones. Prefer the list: the expensive boundary recalculation runs once per call, so querying many Zones in one call is much faster than calling the command once per Zone. (Tapir, Element Commands) |
| CreateWallsC | Creates Wall elements based on the given parameters. (Tapir, Element Commands) |
| CreateSlabsC | Creates Slab elements based on the given parameters. (Tapir, Element Commands) |
| CreateColumnsC | Creates Column elements based on the given parameters. (Tapir, Element Commands) |
| CreateZonesC | Creates Zone elements based on the given parameters. (Tapir, Element Commands) |
| CreateObjectsC | Creates Object elements based on the given parameters. (Tapir, Element Commands) |
| MoveElementsC | Moves elements with a given vector. (Tapir, Element Commands) |
| DeleteElementsB | Deletes elements. Returns an execution result for each input element: an element that could not be deleted (for example because its layer is locked) gets a failed execution result instead of being skipped silently. (Tapir, Element Commands) |
| GetNavigatorItemTreeB | Returns the full navigator item tree for the specified map. (Tapir, Navigator Commands) |
| GetIssuesB | Retrieves information about existing issues. (Tapir, Issue Management Commands) |
| CreateIssueC | Creates a new issue. (Tapir, Issue Management Commands) |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
TDQS
Scored across 53 tools
Several tools overlap in purpose (e.g., archicad_list_elements vs GetElementsByType/GetAllElements, archicad_create_slabs vs CreateSlabs, archicad_move_elements vs MoveElements, archicad_classify_elements vs SetClassificationsOfElements). Descriptions distinguish high-level safe/undoable helpers from raw Tapir commands, but with 53 tools an agent can still easily misselect.
Mixed naming conventions: PascalCase Tapir wrappers (GetSelectedElements, CreateWalls) alongside snake_case archicad_* and tapir_* tools. The split signals different layers but is inconsistent from a naming standpoint.
53 tools far exceeds the typical 3-15 range and includes both high-level and low-level duplicates for the same operations. Even for a complex BIM API, this volume is excessive for an MCP server and burdens tool selection.
Core operations for querying, creating, modifying, and deleting Archicad elements are covered, with generic tapir_run_command and archicad_run_api_command providing an escape hatch for missing commands. Dedicated tools for many element types (roofs, windows, beams) are absent, but the generic commands mitigate that gap.