MCP server for Archicad integration providing tools to interact with Archicad via Tapir commands and custom connection tools
This server has fundamental definition quality gaps across nearly all dimensions. While 13 tools are registered, most lack proper input/output schema visibility in the Python code, descriptions are generic and often trivial, and there is no evidence of parameter documentation or error handling guidance. The server appears to auto-generate tool definitions from JavaScript command definitions (command_definitions.js), but the Python registration layer (src/tapir/parser.py is not shown) is opaque, we cannot verify how schemas are actually bound to the MCP tool definitions. Only TestConnection is explicitly visible in Python with a direct @mcp.tool() decorator; the other 12 tools are inferred from JavaScript comments without visible Python registration. This breaks the 'actual tool definition visibility' requirement and caps those tools at 50 individually. Even so, they score poorly because descriptions are brief but non-trivial (60-80 chars typically), parameter descriptions are present in some schemas (SetProjectInfoField, OpenProject) but missing in others (GetStories has complex nested schemas with no parameter guidance), and error handling is completely absent. The server targets Archicad (a CAD application) and offers legitimate domain tools (GetProjectInfo, SetStories, OpenProject) but the implementation quality is well below production baseline.
Retrieves the version of the Tapir Additional JSON Commands Add-On.
Retrieves the location of the currently running Archicad executable.
Returns the type of the current (active) window.
Gets the project location details.
Gets the file system locations (path) of the hotlink modules. The hotlinks can have tree hierarchy in the project.
Retrieves information about the currently loaded project.
Retrieves the names and values of all project info fields.
12 of 13 tools lack visible Python registration; tool definitions are inferred from JavaScript only. Cannot verify how schemas are bound to the MCP layer or if they are actually exposed correctly.
TestConnection has no input schema (empty {}). Additionally, description is only 24 chars ('Test connection with archicad'), under the 50-char minimum for clarity and LLM selection.
QuitArchicad has no input schema (null inputScheme) and description is only 57 chars. More critically, no error handling guidance, confirmation request, or dry-run mode for an irreversible operation. Agents could quit Archicad accidentally.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | F | 48 | 2026-07-28+ | v2 |
| 2026-03-09 | F | 33 | - | v1 |
Retrieves information about the story sructure of the currently loaded project.
Opens the given project.
Performs a quit operation on the currently running Archicad instance.
Sets the value of a project info field.
Sets the story sructure of the currently loaded project.
Test connection with archicad
SetStories input schema has 'stories' as an object with no type constraints ('additionalProperties': true), making it impossible for LLMs to understand what fields are valid. Schema should define story structure with types and constraints.
GetCurrentWindowType output uses $ref to '#/WindowType' and GetStories uses $ref to '#/StoriesParameters' without defining these references. Schema is incomplete and LLMs cannot infer the actual field structure.
No tool has error handling guidance. No tool documents what error conditions are possible, how to recover, or what the LLM should try next. Agents will receive raw API failures with no recovery path.
Tool descriptions are generic and do not explain WHEN to use each tool or differentiate between similar tools (e.g., GetProjectInfo vs GetProjectInfoFields both retrieve project data but serve different purposes, descriptions do not clarify which to call first or in what sequence).
OpenProject accepts 'projectFilePath' as a string but provides no guidance on format (absolute path? relative? Windows vs Unix separator? BIMcloud reference?). Schema lacks minLength, maxLength, or pattern validation.
GetProjectInfoFields returns nested array of objects with fields 'projectInfoId', 'projectInfoName', 'projectInfoValue' but does not document typical values or what users should expect. Large result sets not addressed, no limit or pagination guidance.
SetProjectInfoField and SetStories are WRITE operations but descriptions do not explicitly state they modify state. Agents need to know which calls are safe to retry.