Archicad-MCP
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| ARCHICAD_MCP_MODE | No | Mode of operation: 'full' or 'verdicts'. Default is 'full'. | full |
| ARCHICAD_MCP_RULES_DIR | No | Directory containing YAML rule files for delivery-readiness QA. Defaults to bundled examples. | bundled examples |
| ARCHICAD_MCP_MAX_PROPERTY_ELEMENTS | No | Maximum number of elements a property fetch may span before being refused. Default is 5000. | 5000 |
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": true
} |
| logging | {} |
| prompts | {
"listChanged": false
} |
| resources | {
"subscribe": false,
"listChanged": false
} |
| extensions | {
"io.modelcontextprotocol/ui": {}
} |
| experimental | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| list_instancesA | List running Archicad instances: port, version, open project, Tapir add-on availability. Call this first. |
| get_model_summaryA | Aggregate element counts. by_type is always returned (cheap and safe). Set include_layer_story=true to also break down by layer and story, which reads a property across every element and is refused on very large models (can crash Archicad). Counts only, never element data. 'coverage' says what element_count spans: 'whole-plan' with the Tapir add-on, 'model-elements-only' without it (then it is NOT a project total). |
| list_rulesA | List loaded QA rules (id, type, severity, tags) and any rule-file load errors. |
| run_ruleA | Run one QA rule by id. Returns a verdict: pass/fail, failure count, failing element GUIDs. |
| audit_delivery_readinessA | Run all loaded QA rules (optionally only those tagged with 'ruleset') against the open model. Returns a scored verdict. |
| verify_ifc_export_readinessA | Run only the IFC-related QA rules to check IFC export readiness. Requires the Tapir add-on for IFC data. |
| highlight_failuresB | Highlight the elements failing a rule in the Archicad window (requires Tapir add-on). |
| create_issues_from_failuresA | Create an Archicad issue from a rule's failures and attach the failing elements (requires Tapir add-on). |
| find_elementsA | Find elements matching criteria groups. Groups combine with OR; inside a group the comparisons combine with logical_operator 'and' (default) or 'or'. Each group may restrict element types (is / is_not) and lists comparisons of {property, operator, value}; the schema enumerates the element types and the 22 operators, and each field documents its values and units. Call search_definitions to find a property's exact address. An element with no usable value matches no binary operator. Returns GUIDs, counts, how many elements had properties read, and 'coverage' ('whole-plan' with Tapir, 'model-elements-only' without: then 2D elements are invisible and 0 is not proof of absence). Property comparisons read values in the server (no API filters by property); a read spanning more than the element ceiling is refused, so narrow with element_types, story or classification first. |
| search_definitionsA | Fuzzy search over property and attribute definitions, so a caller does not need to know the exact 'Group/Name'. Matches names, groups and enum values; case- and accent-insensitive. kind: 'property', 'attribute' (layers, fills, surfaces, composites, profiles, pen tables, ...) or 'any'. alternatives: up to 6 synonyms or translations searched too (useful on non-English projects). editable_only: keep only properties whose value can be written on at least one element type; check it before set_element_data. Each property match carries 'property', the exact address find_elements, get_element_data, set_element_data and rules accept, plus value_type, measure_type (Length/Area/Volume/Angle values are in m, m2, m3, radian), collection, editable, expression_based and enum_values. Results are ranked: whole-word matches first, then word starts, then substrings; a query word under 4 letters must start a word. total_matches counts everything; pass next_offset as offset to page past limit. Reads definitions only, never property values. |
| get_element_dataA | Read type, layer, requested properties (address user properties as 'Group/Name') and optionally classifications for the given element GUIDs. |
| set_element_dataA | Write element property values. DRY-RUN BY DEFAULT: returns planned changes (current -> new) without touching the model. Pass dry_run=false to commit. |
| create_elementsA | Create elements (column/slab/zone/polyline/object/mesh) via Tapir. DRY-RUN BY DEFAULT: shows the exact command and payload. Pass dry_run=false to create. Other types: use execute_write_api_command. |
| move_elementsB | Move elements by a vector {x,y,z} in meters. Refuses without confirm=true. |
| delete_elementsA | Delete elements. IRREVERSIBLE. Refuses without confirm=true. |
| get_selectionA | Return the GUIDs of the elements currently selected in Archicad. |
| set_selectionA | Replace the current selection with the given element GUIDs. Whatever the user had selected by hand is deselected. |
| clear_selectionB | Deselect everything in the Archicad window. |
| reserve_elementsA | Reserve elements in a Teamwork project so you can edit them (Tapir). CONFIRM-GATED: without confirm=true it only reports what it can learn without touching the server: not_found, already_mine, and would_attempt. Whether another user holds an element is only learned by attempting, because Archicad exposes no read for it. With confirm=true returns reserved, reserved_by_others (with the user's name), already_mine, not_found, and indirectly_reserved: elements Archicad pulled into your workspace that you did not ask for, such as a door's wall. A reservation is visible to every teammate and blocks their edits until released. |
| release_elementsA | Release elements from your Teamwork workspace (Tapir). CONFIRM-GATED: without confirm=true it reports would_release (the ones actually in your workspace), not_mine and not_found. With confirm=true releases them and reports released and still_mine. Unsent changes on a released element are not lost by this call; TeamworkSend is the gateway's job. |
| get_project_infoB | Project info: Archicad version, project name, stories, hotlinks, geolocation presence (Tapir enriches). |
| list_attributesA | List attribute names by type: Layer, BuildingMaterial, Composite, Surface, Profile, ZoneCategory. |
| list_issuesA | List the issues in the open project, with their ids (requires the Tapir add-on). |
| create_issueA | Create a new issue in the open project and return its id (requires the Tapir add-on). |
| add_issue_commentA | Add a text comment to an existing issue, addressed by its id (requires the Tapir add-on). |
| attach_elements_to_issueA | Attach elements to an existing issue as highlights (requires the Tapir add-on). |
| export_issues_bcfA | Export every issue in the project to a BCF file at the given path, aligned to the survey point. Overwrites the file if it exists (requires the Tapir add-on). |
| import_issues_bcfA | Import issues into the project from a BCF file, aligned to the survey point (requires the Tapir add-on). |
| publishB | Fire an Archicad publisher set by name (Tapir). |
| read_schedule_schemeA | Describe an exported Archicad schedule scheme XML: its criteria and its ordered columns, with what each column binds to. Schedules have no API, so export the scheme first via Document > Schedules > Scheme Settings > Export and pass the file path. Reads the file only, never Archicad. |
| edit_schedule_schemeA | Apply a YAML scheme spec to an exported schedule scheme XML: set the columns and their order, retarget bindings, rename the scheme. DRY-RUN BY DEFAULT: returns the before and after column lists and writes nothing until dry_run=false. Never overwrites the input; writes to 'output' or to .edited.xml beside it. Import the result via Document > Schedules > Scheme Settings > Import. Criteria are preserved, not yet editable. A spec that binds every property by GUID needs no Archicad connection and runs fully offline; a spec that binds a property by a 'Group/Name' string needs Archicad open so the name can be resolved. |
| validate_schedule_schemeA | Check an exported schedule scheme against the open project: do its property bindings still exist, and does any column caption disagree with what it is bound to. Reads property definitions only, not values, so it does not risk the property-read crash. |
| list_api_commandsA | Catalog of ALL available Archicad API commands (official JSON API + Tapir). Filter by group, or by access='read' / 'write' to see which of the two execute tools runs a given command. |
| describe_api_commandA | Full description and input schema for one API command. Call before execute_read_api_command or execute_write_api_command. |
| execute_read_api_commandA | Run one read-only Archicad API command by name and return its result. Covers the official Archicad JSON API (https://archicadapi.graphisoft.com/JSONInterfaceDocumentation/) and the Tapir add-on (https://github.com/ENZYME-APD/tapir-archicad-automation). Reads only: a command that changes the project is refused here and belongs to execute_write_api_command. Params are validated against the bundled schema where available. Prefer the dedicated tools when one exists. |
| execute_write_api_commandA | Run one Archicad API command that changes the project. Covers the official Archicad JSON API (https://archicadapi.graphisoft.com/JSONInterfaceDocumentation/) and the Tapir add-on (https://github.com/ENZYME-APD/tapir-archicad-automation). IRREVERSIBLE for many commands, and reaches DeleteElements and QuitArchicad among others. Refuses without confirm=true; the refusal echoes the command and params it would have run. Params are validated against the bundled schema where available. Prefer the dedicated tools when one exists. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/alesdev88/Archicad-MCP'
If you have feedback or need assistance with the MCP directory API, please join our Discord server