An MCP server that enables AI agents to automate Archicad using natural language via intelligent, semantic tool discovery.
The server presents 11 tools with mixed definition quality. Tools 1-4 (discovery and schema inspection) have good descriptions explaining their purpose and workflow; however, tool descriptions are verbose (exceeding the 194-char baseline) with instructional content that should be in agent guidance rather than tool descriptions. Tools 5-11 (generated from Archicad API) have minimal descriptions, many under 100 characters and lacking context about when to use them versus alternatives. Input schemas are present for all tools but vary in completeness: tools 1-2 have empty input objects (correct, no params needed); tools 3-4 have basic string/object schemas with minimal description depth; tools 5-11 reference model instances (e.g., 'ChangeWindowParameters model instance') without exposing the actual schema fields in the tool definition itself, this forces LLMs to call archicad_get_command_schema repeatedly to understand what parameters are actually required. The 'port' parameter is ubiquitous across tools 5-11 but described identically in each, creating redundancy. Error handling is absent, no guidance on recovery, retryability, or error classification. No parameter validation rules (ranges, formats, constraints) are documented. Tool naming follows verb_noun convention adequately (get_*, list_*, etc.) but tools 5-11 use an 'app_*' prefix without clear semantic distinction from the 'archicad_*' tools, risking LLM confusion about which tool to use for application state vs. command execution.
Changes the current (active) window to the given window.
Retrieves the version of the Tapir Additional JSON Commands Add-On.
Returns the type of the current (active) window.
Asks the designer to click a point in the current window and returns it. Archicad waits for the click or for Escape, and every other JSON command queues behind this one until then; the call fails when the input is cancelled.
Retrieves the filesystem paths of the special folders of the running Archicad (preferences, cache, data, temporary, application, defaults, templates, help, embedded project library, etc.).
Get the current registered User-GSID and OrganizationsID. Requires Archicad 27 or later.
Generated tools (tools 5-11) lack visible input schemas, parameters reference external model instances ('ChangeWindowParameters model instance') without exposing field definitions in the tool schema itself. LLMs cannot determine what fields are required without calling archicad_get_command_schema first, forcing redundant discovery calls.
Descriptions for tools 5-11 are minimal (35-55 chars) and lack context about when to use each tool, what it modifies, or error conditions. 'Changes the current (active) window to the given window' does not explain what 'current' means, why one would change it, or what side effects occur.
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | C | 61 | <=2025-11-25 | v2 |
| 2026-03-09 | F | 42 | - | v1 |
Display a dialog with up to three buttons.
Executes a specific Archicad API command by its 'name'. CRITICAL WORKFLOW: You MUST use 'archicad_get_command_schema' first to understand the exact JSON structure required for the 'arguments' parameter. The 'arguments' dictionary MUST contain a 'port' number (obtained from 'discovery_list_active_archicads'). If a tool's response includes a 'next_page_token', call this same tool again with the same parameters and add a 'page_token' key to the 'arguments' dictionary.
Retrieves the exact JSON schema (required arguments) for a specific Archicad command. Provide the exact 'command_name' obtained from 'archicad_list_commands'. CRITICAL: You MUST call this tool before executing 'archicad_call_tool' to ensure you provide the correct parameters. Do NOT guess or hallucinate parameters based on the command name.
Returns a comprehensive list of all available Archicad API commands and brief descriptions. STEP 1: Use this tool FIRST to search for the right command name for your task. Do NOT guess or hallucinate command names. STEP 2: Once you find the relevant command name, you MUST use the 'archicad_get_command_schema' tool to learn its exact required arguments.
Scans for and lists running Archicad instances. Returns 'active' (ready to receive commands with their target 'port') and 'unavailable' (instances that are unresponsive or missing the Tapir Add-On).
The 'port' parameter is repeated across 7 tools (5-11) with identical descriptions. This repetition is acceptable for usability but suggests the server could benefit from a discovery tool that caches active ports or middleware that injects the port automatically based on context.
No error handling guidance. Tools do not document what errors are retryable, what inputs are invalid, or how to recover. For example, app_get_point_from_user states 'the call fails when the input is cancelled' but does not guide the LLM on how to handle that failure.
Tool naming ambiguity: 'archicad_*' tools (discovery, schema, execution) and 'app_*' tools (application commands) are semantically overlapping. An LLM may not clearly distinguish when to call archicad_call_tool vs. app_* tools, especially since archicad_call_tool can execute any command. Consider consolidating under a single naming convention or clarifying the boundary in descriptions.
No documented output schemas. Tools do not specify what fields are returned or their types. For example, discovery_list_active_archicads returns 'active' and 'unavailable' instances but does not document the structure of each instance (what fields describe a port? what fields indicate availability?).
No pagination support documented for tools that may return large result sets (e.g., archicad_list_commands could list hundreds of commands). Descriptions do not indicate limits, pagination parameters, or next_page_token handling.