Skip to main content
Glama
SzamosiMate

tapir-archicad-mcp

by SzamosiMate

Archicad Tapir MCP Server

This project provides a Model Context Protocol (MCP) server for Archicad. It acts as a bridge, allowing AI agents and applications (like Claude for Desktop) to interact with running Archicad instances by wrapping both the community-driven Tapir API and the official Archicad JSON API.

The server dynamically generates a comprehensive set of 191+ MCP tools from the combined API schemas, enabling fine-grained control over Archicad projects.

License: MIT Status

Key Features

  • Pydantic-Powered Runtime Validation & Schema Generation: Every tool's input and output shapes are backed by rigorous Pydantic models. The server dynamically compiles these into detailed JSON Schemas for the AI agent to inspect, and strictly validates all incoming tool arguments at runtime before forwarding them to Archicad. It handles complex models, Union types, and TypeAliases seamlessly.

  • Progressive Tool Discovery (CLI-style): The server uses a deterministic workflow (archicad_list_commands and archicad_get_command_schema) that allows AI agents to list available commands and fetch exact parameter schemas on demand. This avoids flooding the model's context window with large schemas.

  • No Heavy Machine-Learning Dependencies: Vector-based search has been removed. The server no longer requires heavy packages like PyTorch, faiss-cpu, or sentence-transformers, dramatically reducing the package size and eliminating server startup delays.

  • Massive Toolset, Minimal Footprint: Provides access to a unified toolset of 191+ commands by merging the community Tapir API and the official Archicad JSON API.

  • Flexible Network Transports: Supports sse (Server-Sent Events) and streamable-http transports in addition to standard input/output (stdio), allowing the server to be run on remote host configurations.

  • Bearer Token Authentication: Secures HTTP endpoints when using SSE or Streamable-HTTP via an opt-in token validation middleware (--token flag or TAPIR_MCP_TOKEN environment variable).

  • Multi-Instance Control: Connect to and manage multiple running Archicad instances simultaneously, targeting commands to specific instances via port numbers.

  • Cross-Platform Support: Compatible with both Windows and macOS systems.

Related MCP server: archicad-mcp

Installation & Setup

Follow these steps to get the server running and connected to an MCP client like Claude for Desktop.

1. Prerequisites

  • Python 3.12+ and uv: Ensure you have a modern version of Python and the uv package manager installed.

  • Archicad & Tapir Add-On: You must have Archicad running (which includes the official JSON API). To access the full set of community-developed tools, the Tapir Archicad Add-On must also be installed.

  • MCP Client: An application that can host MCP servers, such as Claude for Desktop or Gemini CLI.

2. Configure Your AI Client

Open your client's config.json file and add the following configuration. This command works across operating systems:

  • macOS: ~/Library/Application Support/Claude/claude_desktop_config.json

  • Windows: %APDATA%\Claude\claude_desktop_config.json

{
  "mcpServers": {
    "ArchicadTapir": {
      "command": "uvx",
      "args": [
        "--from",
        "tapir-archicad-mcp",
        "archicad-server"
      ]
    }
  }
}

3. One-click install (optional)

If your client supports MCP Bundles you can skip the config file above. Claude Desktop, Claude Code and MCP for Windows all install .mcpb files.

Download tapir-archicad.mcpb from the latest release and open it in your client. On the Microsoft Store build of Claude Desktop this is the easier route, because the app does not read the %APPDATA%\Claude\claude_desktop_config.json that everyone documents.

uv still has to be on the PATH your client sees, but it provisions Python and the locked dependencies itself, so there is nothing else to install. The first launch takes 15 to 30 seconds while it builds that environment. The bundle can modify the open project, export files, and send or receive Teamwork, so treat installing it like handing your client your Archicad seat.

  • "Server disconnected", or the install itself fails. Uninstall the bundle, restart the client, then install it again. Installing over an existing bundle can leave stale state behind that a straight reinstall does not clear.

  • Nothing happens for the first half minute. That is uv building the environment, and antivirus scanning or a slow connection stretches it out. Restart the client once before assuming the bundle is broken.

  • Claude Desktop logs are at %APPDATA%\Claude\logs\mcp-server-Archicad (Tapir).log. On the Microsoft Store build that path is redirected and the real file is %LOCALAPPDATA%\Packages\Claude_pzs8sxrjxfjjc\LocalCache\Roaming\Claude\logs\mcp-server-Archicad (Tapir).log.

Icon artwork is the official Tapir mark from ENZYME-APD/tapir-archicad-automation (branding/logo/png/tapir_logo_black_512.png), MIT, Copyright 2024 Enzyme APD.

Configuration Options

You can customize the server via CLI flags or environment variables:

CLI Flag

Environment Variable

Default

Description

--transport

-

stdio

Transport protocol to use (stdio, sse, or streamable-http)

--host

TAPIR_MCP_HOST

127.0.0.1

Bind address for HTTP-based transports

--port

TAPIR_MCP_PORT

8000

Bind port for HTTP-based transports

--token

TAPIR_MCP_TOKEN

None

Optional Bearer token to secure HTTP endpoints

Usage

  1. Restart Claude for Desktop to apply configuration changes.

  2. Ensure at least one instance of Archicad is running.

  3. The client will initially have access to a small set of core tools. Start by asking the AI to find running Archicad instances:

    "Can you check what Archicad projects I have running?"

    The AI will call discovery_list_active_archicads and report the active instances and their port numbers.

  4. State your main goal:

    "Using port 19723, get all the Wall elements from the project."

  5. The AI will execute a progressive discovery and calling loop:

    • Step 1: It queries archicad_list_commands to look up the correct command name for the requested action (identifying elements_get_elements_by_type).

    • Step 2: It calls archicad_get_command_schema with the target command name to retrieve the exact required JSON parameter structure.

    • Step 3: It calls archicad_call_tool with the command name, the targeted port, and the required parameter payload.

How It Works

The server operates through a layered architecture:

  • AI Agent (e.g., Claude): Interprets user prompts and orchestrates tool discovery.

  • MCP Client (e.g., Claude for Desktop): Manages the server process and handles communication.

  • MCP Server (This Project): Standardizes tool descriptions, parameters, and results, presenting a clean list/schema/call interface.

  • multiconn_archicad Library: Resolves active socket connections and handles low-level command dispatch to Archicad instances.

  • Archicad & Tapir Add-On: Built-in APIs and Tapir Add-on execute commands and return structured data.

Contributing

Contributions are welcome! Please feel free to submit an issue or open a pull request.

License

This project is licensed under the MIT License. See the LICENSE file for details.

Available Tools

4 tools
archicad_call_toolExecute Archicad API CommandA
Destructive

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYes
argumentsYes

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover the safety profile (destructiveHint=true, readOnlyHint=false, idempotentHint=false), and the description is consistent with them. The description adds genuine behavioral value beyond annotations: the port prerequisite, the mandatory schema-lookup workflow, and the pagination contract where a 'next_page_token' in the response requires re-invocation with a 'page_token' argument. These are non-obvious runtime behaviors the annotations cannot convey.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The four sentences are dense but each earns its place: purpose, mandatory prerequisite, port requirement, and pagination handling. The 'CRITICAL WORKFLOW' label adds mild verbosity, but for a destructive generic executor with a prerequisite, emphasizing the workflow is justified. It is front-loaded with the core purpose before the workflow details.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a complex generic executor with an open-world arguments object and no output schema or parameter descriptions, this description covers the critical workflow: prerequisite schema lookup, port sourcing, and page-token pagination. The main gap is that the response format beyond the 'next_page_token' signal is not described, though the absence of an output schema makes that a moderate rather than severe omission.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0% — the schema only provides 'name' as a string and 'arguments' as an unconstrained object with additionalProperties:true. The description compensates substantially: it explains that 'name' identifies the command and that 'arguments' must contain a 'port' key and optionally a 'page_token'. It deliberately defers the full arguments structure to archicad_get_command_schema, which is appropriate for a generic executor, but it does not document all possible argument shapes itself.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb and resource: 'Executes a specific Archicad API command by its name.' This clearly differentiates the tool from siblings (discovery_list_active_archicads discovers, archicad_list_commands lists, archicad_get_command_schema retrieves schemas) because this one is the actual executor. An agent can immediately tell what this tool does and how it differs from the others.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides explicit workflow instructions: it mandates calling archicad_get_command_schema first, requires a 'port' obtained from discovery_list_active_archicads within the arguments, and specifies the pagination loop (call again with a 'page_token' when a 'next_page_token' is returned). This tells the agent exactly when and how to invoke the tool, including prerequisites and the recursive pagination case.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

archicad_get_command_schemaGet Archicad Command SchemaA
Read-onlyIdempotent

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
command_nameYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
nameYesThe name of the command.
input_schemaYesThe JSON schema outlining the required arguments for archicad_call_tool.

TDQS

A4.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and idempotentHint=true, so the safety profile is covered. The description adds useful behavioral context by stating the mandatory precondition that this must be called before archicad_call_tool, which clarifies the tool's role in the workflow beyond what the annotations express.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three tight sentences with the core purpose front-loaded. Every sentence earns its place: what it does, where the input comes from, and the critical workflow constraint. No filler or repetition.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a single-parameter, read-only tool with a full output schema and clear sibling context, the description is complete. It covers input provenance, the required call order relative to archicad_call_tool, and the anti-hallucination warning. Return value details are appropriately left to the output schema.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema itself has 0% description coverage, so the description carries the burden for parameter meaning. It compensates well by specifying that command_name must be the exact value obtained from 'archicad_list_commands' and explicitly warns against guessing, which adds real semantic value beyond the raw schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb and resource: 'Retrieves the exact JSON schema (required arguments) for a specific Archicad command.' It clearly differentiates from sibling tools by naming archicad_list_commands and archicad_call_tool and placing itself between them in the workflow.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives explicit when-to-use guidance: call after obtaining command_name from 'archicad_list_commands' and before executing 'archicad_call_tool'. It also tells the agent not to guess or hallucinate parameters, which is direct and actionable.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

archicad_list_commandsList Available Archicad CommandsA
Read-onlyIdempotent

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.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is fully covered. The description adds some output scope detail ('comprehensive list', 'brief descriptions') but does not disclose additional behavioral traits such as payload size, pagination, or response structure. It provides useful workflow context but not deeper behavioral transparency.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact, front-loaded with the core purpose, and uses a clear STEP 1/STEP 2 structure. Every sentence earns its place, and the most important instruction—use this first—is prominent.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a zero-parameter discovery tool with an output schema and rich annotations, the description is complete. It tells the agent exactly what the tool returns, when to use it first, and which sibling tool to proceed with. Nothing needed to call it correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has zero parameters, so the baseline is 4 and the description need not explain argument semantics. The empty input schema already makes clear that no arguments are required, and the description focuses on the tool's role rather than introducing unnecessary parameter details.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool returns a comprehensive list of all available Archicad API commands and brief descriptions, using a specific verb and resource. It also differentiates itself from sibling tools by explicitly positioning itself as the discovery step before calling archicad_get_command_schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives explicit step-by-step guidance: use this tool FIRST to find the correct command name, do not guess or hallucinate names, and then use archicad_get_command_schema to learn exact arguments. This clearly states when to use this tool and what to do next.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

discovery_list_active_archicadsList Active Archicad InstancesA
Read-onlyIdempotent

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).

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
activeInstancesNoList of ready Archicad instances that can be targeted by commands.
unavailableInstancesNoList of detected instances that cannot be targeted, along with diagnostic reasons.

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare read-only, open-world, idempotent, and non-destructive behavior, so the description does not need to repeat those. It adds valuable behavioral context by explaining what 'active' means, that ports are provided, and that 'unavailable' instances may be unresponsive or missing the Tapir Add-On. No contradiction with annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two concise sentences with no filler. The core action is front-loaded, and the second sentence adds meaningful output clarification without redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple, parameterless discovery tool with safety annotations and an output schema, the description is complete. It explains what the tool returns, what the categories mean, and why an instance might be unavailable, which is all an agent needs to select and interpret the tool correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has zero parameters, so the schema provides no parameter details to supplement. The description correctly focuses on behavior and return categories instead, which is appropriate for a parameterless discovery tool.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb ('Scans for and lists') and resource ('running Archicad instances'), making the tool's function immediately clear. It also goes beyond a simple label by explaining the two output categories, 'active' and 'unavailable', which distinguishes it from sibling tools that deal with commands and schemas.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description makes the usage context clear: it identifies which instances are ready to receive commands and provides their target ports, implying it should be used before calling command-execution tools. It does not explicitly name alternatives or state when not to use it, but the intended role is evident from the active/unavailable distinction.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 2 tool updatesv0.6.0
    • Changedarchicad_list_commands1 field changed
      • changedOutput schema / $defs / CommandOverview / properties / name / description
        Previous value: -"The unique, snake-cased name of the tool (e.g., 'elements_get_all_elements'). Use this in archicad_get_command_schema."New value: +"The unique, snake-cased name of the tool (e.g., 'elements_get_all_elements')."
    • Changeddiscovery_list_active_archicads9 fields changed
      • removedOutput schema / $defs / ArchicadInstanceInfo
        Removed value: -{
        -  "description": "A curated model to hold key information about a running Archicad instance.",
        -  "properties": {
        -    "archicadVersion": {
        -      "description": "The major version of the Archicad application (e.g., '27').",
        -      "title": "Archicadversion",
        -      "type": "string"
        -    },
        -    "port": {
        -      "description": "The communication port of the Archicad instance. Use this to target commands.",
        -      "title": "Port",
        -      "type": "integer"
        -    },
        -    "projectName": {
        -      "description": "The name of the project file currently open in the instance.",
        -      "title": "Projectname",
        -      "type": "string"
        -    },
        -    "projectPath": {
        -      "anyOf": [
        -        {
        -          "type": "string"
        -        },
        -        {
        -          "type": "null"
        -        }
        -      ],
        -      "default": null,
        -      "description": "The full file path of the project, if it is a saved solo or teamwork project.",
        -      "title": "Projectpath"
        -    },
        -    "projectType": {
        -      "description": "The type of the project: 'teamwork', 'solo', or 'untitled'.",
        -      "enum": [
        -        "teamwork",
        -        "solo",
        -        "untitled"
        -      ],
        -      "title": "Projecttype",
        -      "type": "string"
        -    }
        -  },
        -  "required": [
        -    "port",
        -    "projectName",
        -    "projectType",
        -    "archicadVersion"
        -  ],
        -  "title": "ArchicadInstanceInfo",
        -  "type": "object"
        -}
      • addedOutput schema / $defs / ReadyInstance
        Added value: +{
        +  "description": "Information about an active Archicad instance ready to execute commands.",
        +  "properties": {
        +    "archicadVersion": {
        +      "description": "The major version of Archicad (e.g. '27', '28').",
        +      "title": "Archicadversion",
        +      "type": "string"
        +    },
        +    "port": {
        +      "description": "The communication port of the Archicad instance. Pass this to archicad_call_tool.",
        +      "title": "Port",
        +      "type": "integer"
        +    },
        +    "projectName": {
        +      "description": "The name of the currently open project.",
        +      "title": "Projectname",
        +      "type": "string"
        +    },
        +    "projectPath": {
        +      "anyOf": [
        +        {
        +          "type": "string"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "default": null,
        +      "description": "The full file path or teamwork server location of the project.",
        +      "title": "Projectpath"
        +    },
        +    "projectType": {
        +      "description": "The type of the project: 'teamwork', 'solo', or 'untitled'.",
        +      "enum": [
        +        "teamwork",
        +        "solo",
        +        "untitled"
        +      ],
        +      "title": "Projecttype",
        +      "type": "string"
        +    },
        +    "tapirVersion": {
        +      "description": "The version of the Tapir Add-On installed on this instance.",
        +      "title": "Tapirversion",
        +      "type": "string"
        +    },
        +    "warning": {
        +      "anyOf": [
        +        {
        +          "type": "string"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "default": null,
        +      "description": "Warning regarding Tapir version differences (e.g., outdated or newer version).",
        +      "title": "Warning"
        +    }
        +  },
        +  "required": [
        +    "port",
        +    "projectName",
        +    "projectType",
        +    "archicadVersion",
        +    "tapirVersion"
        +  ],
        +  "title": "ReadyInstance",
        +  "type": "object"
        +}
      • addedOutput schema / $defs / UnavailableInstance
        Added value: +{
        +  "description": "Diagnostic information about an Archicad instance that cannot be automated.",
        +  "properties": {
        +    "message": {
        +      "description": "Explanation and actionable troubleshooting advice.",
        +      "title": "Message",
        +      "type": "string"
        +    },
        +    "reason": {
        +      "description": "Why the instance is unavailable: 'missing_tapir' or 'unresponsive'.",
        +      "enum": [
        +        "missing_tapir",
        +        "unresponsive"
        +      ],
        +      "title": "Reason",
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "reason",
        +    "message"
        +  ],
        +  "title": "UnavailableInstance",
        +  "type": "object"
        +}
      • addedOutput schema / description
        Added value: +"The result of scanning for Archicad instances."
      • addedOutput schema / properties / activeInstances
        Added value: +{
        +  "description": "List of ready Archicad instances that can be targeted by commands.",
        +  "items": {
        +    "$ref": "#/$defs/ReadyInstance"
        +  },
        +  "title": "Activeinstances",
        +  "type": "array"
        +}
      • removedOutput schema / properties / result
        Removed value: -{
        -  "items": {
        -    "$ref": "#/$defs/ArchicadInstanceInfo"
        -  },
        -  "title": "Result",
        -  "type": "array"
        -}
      • addedOutput schema / properties / unavailableInstances
        Added value: +{
        +  "description": "List of detected instances that cannot be targeted, along with diagnostic reasons.",
        +  "items": {
        +    "$ref": "#/$defs/UnavailableInstance"
        +  },
        +  "title": "Unavailableinstances",
        +  "type": "array"
        +}
      • removedOutput schema / required
        Removed value: -[
        -  "result"
        -]
      • changedOutput schema / title
        Previous value: -"list_active_archicadsOutput"New value: +"DiscoveryResult"
  2. 3 tool updatesv0.5.1
    • Removedarchicad_discover_tools
    • Addedarchicad_get_command_schema
    • Addedarchicad_list_commands
  3. 3 tool updatesv0.4.3
    • First observedarchicad_call_tool
    • First observedarchicad_discover_tools
    • First observeddiscovery_list_active_archicads

TDQS

A4.7/5.0

Scored across 4 tools

Disambiguation5/5

Each tool has a distinct, non-overlapping role: discovery, listing commands, fetching schemas, and executing commands. No two tools could be confused for the same purpose.

Naming Consistency4/5

Most tools follow an archicad_verb_noun pattern, but discovery_list_active_archicads breaks convention by using discovery_ instead of archicad_ and lacks the archicad_ prefix. Minor inconsistency overall.

Tool Count5/5

Four tools is exactly right for a gateway server that exposes a large external API. Each tool earns its place in the workflow.

Completeness5/5

The set covers the full lifecycle needed to interact with Archicad: discover instances, enumerate commands, inspect schemas, and call commands. No essential step is missing.

Maintenance

ActivityActive
ResponsivenessWithin a week

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    A
    maintenance
    MCP server for Archicad automation, enabling AI assistants to run Python scripts against running Archicad instances via the Tapir JSON API for complex workflows.
    4
    80 PyPI
    5
    MIT
  • F
    license
    Not graded
    quality
    B
    maintenance
    Enterprise-grade MCP bridge exposing Open Design's REST API as 15 MCP tools, enabling AI agents to create, iterate, and manage design projects via the Model Context Protocol.
    -
  • F
    license
    A
    quality
    B
    maintenance
    Read-only MCP bridge for Archicad using the Tapir Add-On, enabling discovery, context binding, and safe read operations on Archicad projects.
    8
    -