{
  "markdown": "# Archicad MCP\n\nAn MCP server for **Archicad 29** on macOS and Windows. It connects Claude\nDesktop, Claude Code, ChatGPT, or any MCP client to a *running* Archicad instance and\ndoes two jobs:\n\n1. **Delivery-readiness QA.** Your office standards, written as YAML rules and\n   run against the open model. Returns pass/fail, a score, and the GUIDs of the\n   elements that failed.\n2. **Full API access.** Curated tools for querying, editing, and creating\n   elements, plus a gateway to every official JSON API and\n   [Tapir](https://github.com/ENZYME-APD/tapir-archicad-automation) command.\n\n> [!WARNING]\n> **Save before you read properties.** `GetPropertyValuesOfElements` can crash\n> Archicad 29, even for a single property on a single element, taking unsaved\n> work with it. This is an Archicad-side fault the server can trigger but cannot\n> prevent. It affects `audit_delivery_readiness`, `run_rule`, `get_element_data`,\n> and `set_element_data`. See [Known issues](docs/known-issues.md) before you\n> point this at a model you care about.\n\n## Requirements\n\n- **Archicad 29**, running, with a project open. The JSON API talks to the live app.\n- **Nothing else, if you install the extension.** The `.mcpb` carries its own\n  Python interpreter and every dependency, so there is nothing to install first\n  and nothing to download on first launch. The manual install paths below do\n  need **[uv](https://docs.astral.sh/uv/)**, which fetches a suitable Python\n  (3.12+) for you.\n- **[Tapir add-on](https://github.com/ENZYME-APD/tapir-archicad-automation/releases)**,\n  optional but recommended. Required for element creation, issues, IFC checks,\n  highlighting, and publishing. The bundled command definitions are synced from\n  Tapir **1.5.8**, and the server has been exercised live against **1.5.9**, so\n  a newer add-on than the definitions is fine. Without the add-on, those tools\n  degrade instead of erroring.\n\n## Install as a Claude Desktop extension (recommended)\n\nOne file, one click, no JSON editing, and no prerequisites. Download the bundle\nfor your platform from the\n[latest release](https://github.com/alesdev88/Archicad-MCP/releases/latest):\n\n| Platform | File |\n|---|---|\n| Windows | `archicad-mcp-0.5.2-win32.mcpb` |\n| macOS (Apple silicon) | `archicad-mcp-0.5.2-darwin-arm64.mcpb` |\n\nThere is no Intel macOS bundle. `cryptography`, which this server depends on\nthrough FastMCP, no longer publishes macOS x86_64 wheels, so that bundle could\nonly be produced by compiling on an Intel Mac. Intel Macs use the manual install\nbelow instead, where the build happens on the machine that will run it.\n\nThen in Claude Desktop open **Settings > Extensions** and drag it in.\n\nMode, office rules folder, and the property-read ceiling then appear as form\nfields in the extension's settings, and the whole server gets an on/off switch.\nLeave a field empty and it falls back to the default in the table below.\n\nThe bundle contains a complete CPython 3.12 and every dependency, so it starts\nimmediately and works on a machine with no Python, no uv, and no internet\naccess. That is why it is 42 MB on Windows and 54 MB on macOS: the alternative\nwas asking every machine to install a package manager first.\n\nDeploying to a team? On a Team or Enterprise plan an owner can upload the bundle\nunder **Organization settings > Connectors > Desktop**, which makes it a\none-click install for everyone instead of a file to pass around.\n\nIf you would rather wire it up by hand, or you are on Claude Code, use one of\nthe sections below instead. Those install the wheel from a tagged release, so\nyou get a known version rather than whatever `main` happens to be. To upgrade,\nre-run the install command with the newer version's URL from the\n[releases page](https://github.com/alesdev88/Archicad-MCP/releases).\n\n## Install on macOS\n\n```bash\n# 1. Install uv (skip if you already have it)\ncurl -LsSf https://astral.sh/uv/install.sh | sh\n\n# 2. Install the server from the latest release\nuv tool install https://github.com/alesdev88/Archicad-MCP/releases/download/v0.5.2/archicad_mcp-0.5.2-py3-none-any.whl\n\n# 3. Note the path (you need it for the config below)\nwhich archicad-mcp        # ~/.local/bin/archicad-mcp\n```\n\nEdit `~/Library/Application Support/Claude/claude_desktop_config.json`:\n\n```json\n{\n  \"mcpServers\": {\n    \"archicad\": {\n      \"command\": \"/Users/YOU/.local/bin/archicad-mcp\",\n      \"args\": [\"--mode\", \"full\"],\n      \"env\": { \"ARCHICAD_MCP_RULES_DIR\": \"/Users/YOU/office-rules\" }\n    }\n  }\n}\n```\n\nUse the **absolute path**. Claude Desktop does not inherit your shell's `PATH`,\nso a bare `\"archicad-mcp\"` usually fails to spawn. Restart Claude Desktop after\nediting the file.\n\n## Install on Windows\n\n```powershell\n# 1. Install uv (skip if you already have it)\nwinget install --id=astral-sh.uv -e\n\n# 2. Install the server from the latest release\nuv tool install https://github.com/alesdev88/Archicad-MCP/releases/download/v0.5.2/archicad_mcp-0.5.2-py3-none-any.whl\n\n# 3. Note the path (you need it for the config below)\nwhere.exe archicad-mcp    # %USERPROFILE%\\.local\\bin\\archicad-mcp.exe\n```\n\nEdit `%APPDATA%\\Claude\\claude_desktop_config.json`:\n\n```json\n{\n  \"mcpServers\": {\n    \"archicad\": {\n      \"command\": \"C:\\\\Users\\\\YOU\\\\.local\\\\bin\\\\archicad-mcp.exe\",\n      \"args\": [\"--mode\", \"full\"],\n      \"env\": { \"ARCHICAD_MCP_RULES_DIR\": \"C:\\\\Users\\\\YOU\\\\office-rules\" }\n    }\n  }\n}\n```\n\nBackslashes must be doubled in JSON, and the `.exe` matters. Restart Claude\nDesktop after editing the file.\n\n## Install for Claude Code\n\nClaude Code inherits your shell's `PATH`, so the bare command name works:\n\n```bash\nuv tool install https://github.com/alesdev88/Archicad-MCP/releases/download/v0.5.2/archicad_mcp-0.5.2-py3-none-any.whl\nclaude mcp add archicad -- archicad-mcp --mode full\n```\n\n## Use with ChatGPT\n\nChatGPT only talks to *remote* MCP servers over HTTPS. It cannot spawn a local\nserver the way Claude Desktop does, and this server has to run on the machine\nthat runs Archicad, because it reaches Archicad on localhost. So the recipe is:\nserve over HTTP on the Archicad machine, tunnel that to a public HTTPS URL, and\nregister the URL as a custom connector.\n\n> [!CAUTION]\n> Whoever reaches that URL drives your open Archicad model: every property is\n> readable, and in `full` mode elements can be edited, deleted, and published.\n> ChatGPT custom connectors authenticate with OAuth or not at all, so this\n> server adds no token of its own. Put access control in front of the tunnel\n> (Cloudflare Access, ngrok's OAuth or IP restrictions), prefer `--mode\n> verdicts`, and stop the server when you are done.\n\nThe `--transport` flag is newer than the first release. If `archicad-mcp --help`\ndoes not list it, install from `main` as described under\n[Development](#development).\n\n```bash\n# 1. On the Archicad machine, serve over HTTP. Binds to localhost only.\narchicad-mcp --mode verdicts --transport http --http-port 8000\n\n# 2. In a second terminal, tunnel it. One of:\ncloudflared tunnel --url http://localhost:8000\nngrok http 8000\n```\n\nThe tunnel prints a public URL. The MCP endpoint is that URL plus `/mcp`.\n\n3. In ChatGPT on the web, open **Settings > Connectors > Advanced** and turn\n   on **Developer mode**. Then **Settings > Connectors > Create**: name it\n   `Archicad`, paste `https://<your-tunnel>/mcp` as the URL, tick *I trust this\n   provider*, and create it. Developer mode needs a Plus, Pro, Business,\n   Enterprise, or Edu account; without it ChatGPT rejects any server that lacks\n   `search` and `fetch` tools.\n4. In a new chat, open **+ > More > Developer mode** and enable the Archicad\n   connector. This is per chat.\n\nThen ask it to **list Archicad instances**, as under [Check it works](#check-it-works).\nThe crash warning at the top applies to every client, ChatGPT included.\n\n**Codex instead of ChatGPT.** OpenAI's Codex CLI runs stdio servers directly,\nso there is no tunnel and nothing leaves the machine:\n\n```bash\ncodex mcp add archicad -- archicad-mcp --mode full\n```\n\n## Check it works\n\nWith Archicad open, ask the client to **list Archicad instances**. The\n`list_instances` tool reports the port, version, open project, and whether Tapir\nanswered, which is the fastest way to tell a config problem from a connection\nproblem. If nothing is found, see\n[Known issues: connection](docs/known-issues.md#connection).\n\nIf the client shows no tools at all, the server never started, and asking it\nanything will not tell you why. Read the log instead. The server writes what it\nfound to stderr on startup, which Claude Desktop captures:\n\n```bash\ntail -20 ~/Library/Logs/Claude/mcp-server-archicad.log   # %APPDATA%\\Claude\\logs on Windows\n```\n\n```\narchicad-mcp: mode=full, 12 rules loaded\narchicad-mcp: Archicad 29 (build 5101) on port 19723, project 'Sample', Tapir 1.5.9\n```\n\nThat line distinguishes the three failures that look identical from the chat\nwindow: the server not spawning (no line at all), Archicad not running (the\nline says so, and says tools connect on demand once you start it), and the\nTapir add-on missing (the line names which tools degrade).\n\n## Configuration\n\n| Flag | Env var | Default | What it does |\n|---|---|---|---|\n| `--mode` | `ARCHICAD_MCP_MODE` | `full` | `full` or `verdicts` (see below) |\n| `--rules-dir` | `ARCHICAD_MCP_RULES_DIR` | bundled examples | Directory of YAML rule files |\n| `--port` | n/a | auto-detect `19723`-`19743` | Pin when several Archicads run at once |\n| `--transport` | `ARCHICAD_MCP_TRANSPORT` | `stdio` | `stdio` for Claude Desktop, Claude Code, Codex; `http` (Streamable HTTP at `/mcp`) for ChatGPT and other remote clients |\n| `--host` | n/a | `127.0.0.1` | Bind address, `--transport http` only |\n| `--http-port` | n/a | `8000` | Listen port, `--transport http` only. Not the Archicad port |\n| n/a | `ARCHICAD_MCP_MAX_PROPERTY_ELEMENTS` | `5000` | Refuse property fetches spanning more elements than this |\n\n### Modes\n\n| `--mode` | Tools exposed |\n|---|---|\n| `full` (default) | Everything: QA, core, and the API gateway. |\n| `verdicts` | The 8 QA tools only: rule ids, counts, and failing GUIDs, with no project name from `list_instances`. Element counts still reach the model, layer names included if you pass `include_layer_story=true`. |\n\n## Rules\n\nThe server loads rules from **one directory**, and where that directory is set\ndepends on how the server was installed. Nothing else is read: the bundled\nexamples load only when no directory is set.\n\n| Install | Where to set the rules directory |\n|---|---|\n| Claude Desktop extension (`.mcpb`) | Claude Desktop > Settings > Extensions > Archicad > **Office rules folder**. This fills `ARCHICAD_MCP_RULES_DIR` for you; the field is empty after install and stays empty until you set it. |\n| `uv tool install` + Claude Desktop config | `\"env\": { \"ARCHICAD_MCP_RULES_DIR\": \"/absolute/path/to/office-rules\" }` on the server entry in `claude_desktop_config.json`, as in the examples above. |\n| `uv tool install` + Claude Code | `claude mcp add archicad -e ARCHICAD_MCP_RULES_DIR=/absolute/path/to/office-rules -- archicad-mcp --mode full`, or edit the entry's `env` in `~/.claude.json`. |\n| Any shell | `archicad-mcp --rules-dir /absolute/path/to/office-rules`, or export `ARCHICAD_MCP_RULES_DIR`. The flag wins over the variable. |\n\nUse an absolute path. A relative one resolves against whatever working\ndirectory the client happened to spawn the server in.\n\nCheck what actually loaded before trusting an audit. The startup line in the\nlog says where the rules came from and how many there are:\n\n```\narchicad-mcp: mode=full, 1 rule loaded from /Users/YOU/office-rules\narchicad-mcp: mode=full, 3 bundled example rules loaded (no rules directory set)\n```\n\nand `list_rules` returns the same `source` plus every rule id and any file that\nfailed to parse. A low count with the right directory usually means the file\nholds templates that are still commented out, which is how the starter file\nships. The count is of rules, not files.\n\nA rule file is a YAML **list** of rules:\n\n```yaml\n- id: walls-fire-rating\n  type: property-required\n  property: \"OFFICE/Fire Rating\"   # user properties are \"Group/Name\"\n  applies_to: { element_type: Wall }\n  severity: error\n  tags: [ifc-delivery]\n```\n\nFive rule types ship built in (`property-required`, `classification-required`,\n`layer-compliance`, `zone-number-required`, `ifc-property-required`), and custom\nchecks go in a `custom_rules.py` beside the YAML. Without a rules directory, the\nbundled examples load so you have something to run.\n\nKeep real office standards **outside this repo**, in a local rules directory.\n\nFull reference: **[docs/rules.md](docs/rules.md)**.\n\n## Schedules\n\nArchicad exposes **no API for schedules at all**. Not the JSON API, not Tapir,\nand per Graphisoft not the C++ API either. What it does support is the XML\nround trip built into Scheme Settings, and that is what these tools work\nthrough:\n\n1. In Archicad: Document > Schedules > Scheme Settings, select a scheme, **Export**\n2. Edit it: `read_schedule_scheme` to see what it does, `edit_schedule_scheme`\n   to apply a YAML spec, `validate_schedule_scheme` to check its bindings\n   against the open project\n3. In Archicad: Scheme Settings > **Import**\n\nA scheme spec looks like this:\n\n```yaml\n- id: door-schedule\n  template: exports/door-scheme.xml\n  name: \"Door Schedule\"\n  columns:\n    - caption: \"Quantity\"\n      bind: { builtin: Quantity }\n    - caption: \"Fire Resistance\"\n      bind: { gdl_param: \"Fire Rating\" }\n      width: 40\n```\n\nA column binds three ways:\n\n- `bind: { property: \"<GUID>\" }`, which needs no connection to Archicad, or a\n  `\"Group/Name\"` string, which `edit_schedule_scheme` resolves by connecting\n  to Archicad and looking the name up. A spec that only uses GUIDs (plus\n  `gdl_param` and `builtin` bindings, below) runs fully offline; a spec with\n  even one named property needs Archicad open with the project that defines\n  it.\n- `bind: { gdl_param: \"<parameter name>\" }`, a library part parameter by name\n- `bind: { builtin: Quantity }` for the few named built-ins, or\n  `bind: { builtin: { param_type: 0, param_index: -1561 } }` for any other\n  built-in by its raw numbers\n\nThe named table deliberately holds only `Quantity`: the codes behind it are\nundocumented and are being mapped empirically, one confirmed example at a\ntime. The raw-numbers form is what lets a scheme still be fully expressed\neven when a built-in has no name yet, and this is not a rare corner case: on\na real 27-column door schedule, 2 columns need it.\n\nA column can also carry `width: <number>`, which sets its cell width to\nmatch. This is a no-op, reported as such, when the column already has that\nwidth. Only the portrait width is guaranteed: the landscape width field is\nupdated too when a column already has one, but is never created on a column\nthat lacks it, since that has not been confirmed as a field Archicad itself\nwrites for every scheme, and the change log says so plainly rather than\nguessing.\n\nCriteria are read and preserved but not yet editable: the numeric codes behind\nthem are undocumented and are being mapped in\n[docs/scheme-criteria-codes.md](docs/scheme-criteria-codes.md).\n\n### Limitations\n\n- **Criteria are read and preserved but cannot yet be edited.** See\n  [docs/scheme-criteria-codes.md](docs/scheme-criteria-codes.md) for what is\n  confirmed about the codes behind them so far, and what is still unknown.\n- **Every edit needs two manual steps in Archicad**, Export before and\n  Import after, because no API reaches schedules.\n- **Whether re-importing an edited scheme updates it in place or creates a\n  numbered duplicate is not yet confirmed.** Graphisoft's documentation says\n  duplicate names are auto-numbered, but real exports carry stable scheme\n  IDs, which suggests an in-place match may be possible. Test on a scratch\n  project before relying on either behaviour.\n- **`edit_schedule_scheme` refuses any file that would not survive a no-op\n  save unchanged.** This protects the parts of the format the server does\n  not model.\n\n## Library parts\n\nMesh models (OBJ, 3DS) become placeable Archicad library parts without opening\nthe GDL editor. The pipeline parses the mesh (units, pivots, welding),\noptionally decimates dense meshes through a background Blender, writes the HSF\nsource, compiles it with the LP_XMLConverter bundled inside Archicad, and\ndeploys over the same connection the server uses. Finish variants become\ndropdowns in Object Settings. See **[the GDL pipeline guide](docs/gdl-pipeline.md)**.\n\nThere are two ways in.\n\n**From an MCP client**, using `list_gdl_sources`, `inspect_gdl_source`,\n`build_gdl_object` and `deploy_gdl_object`. Set the **GDL workspace folder** in\nthe extension settings, and add that same folder to Archicad once via File >\nLibraries and Objects > Library Manager. Source meshes and textures go in it by\nhand; everything the tools write lands there too. Building needs no project\nopen. Deploying reloads libraries, places the object, renders it and returns the\nimage, then deletes the instance it placed unless you pass `keep=true`.\n\nThat render is the point. Archicad silently drops defective 3D bodies while\nevery offline validator passes them, so looking at the picture is the only\nautomated check that catches it.\n\nThis route runs inside the server process, so it works from clients whose agent\nhas no shell on the machine running Archicad, which includes any sandboxed one.\n\n**From a shell**, using the `archicad-gdl` command:\n\n```bash\narchicad-gdl build chair.3ds --name \"My Chair\" --config assets.json\narchicad-gdl deploy \"build/My Chair.gsm\" --place 0 0 --preview check.png\n```\n\nThe command line tool comes with the `uv tool install` paths above and not with\nthe Claude Desktop extension, which bundles an interpreter for its own use\nrather than putting anything on your PATH.\n\n## Tools\n\n**QA (both modes):** `list_instances`, `get_model_summary`, `list_rules`,\n`run_rule`, `audit_delivery_readiness`, `verify_ifc_export_readiness`,\n`highlight_failures`, `create_issues_from_failures`\n\n**Core (full mode):** `find_elements`, `search_definitions`, `get_element_data`,\n`set_element_data`, `create_elements`, `move_elements`, `delete_elements`,\n`get_selection`, `set_selection`, `clear_selection`, `get_project_info`,\n`list_attributes`, `list_issues`, `create_issue`, `add_issue_comment`,\n`attach_elements_to_issue`, `export_issues_bcf`, `import_issues_bcf`, `publish`,\n`read_schedule_scheme`, `edit_schedule_scheme`, `validate_schedule_scheme`.\nEvery write is dry-run by default; delete and move also require `confirm=true`.\nNo other Archicad MCP server does this: Graphisoft's own writes on the first\ncall, so an agent pointed at a live project has no rehearsal step there.\n\n`find_elements` is a criteria query in the shape of Archicad's Find & Select:\ngroups of property comparisons, AND or OR within a group, OR between groups,\nan element-type filter per group, 22 operators including string matching,\nclassification branch tests and the four senses of \"empty\". `search_definitions`\nis the discovery step before it: fuzzy, accent-insensitive search over property\nand attribute definitions that returns the exact property address the other\ntools accept and whether the value can be written. Both are documented in\n[the query guide](docs/query.md).\n\n**Teamwork (full mode):** `reserve_elements`, `release_elements`. Both are\nconfirm-gated. A dry run reports what can be known without touching the\nserver: unknown GUIDs and elements already in your workspace. Who holds the\nrest is only learned by attempting, because Archicad exposes no read for it;\nwith `confirm=true` the result separates reserved, reserved by others (with the\nuser's name), already mine, not found, and indirectly reserved. Verified live:\nreserving one door also pulled in its wall and the wall's other door, and the\ntool reported both. Sending and receiving stay in the gateway. Needs Tapir.\n\n**Gateway (full mode):** `list_api_commands`, `describe_api_command`,\n`execute_read_api_command`, `execute_write_api_command`. The complete official +\nTapir command surface (309 commands on the verified setup), for anything the\ncurated tools don't cover.\n\n**Library parts (full mode):** `list_gdl_sources`, `inspect_gdl_source`,\n`build_gdl_object`, `deploy_gdl_object`. Turn mesh models (OBJ, 3DS) into\nplaceable Archicad library parts with finish variants, without opening the GDL\neditor. Requires the GDL workspace folder to be set and added as a linked\nlibrary in Archicad once. See [the GDL pipeline guide](docs/gdl-pipeline.md).\n\nReads and writes are separate tools throughout, and every tool declares whether\nit is read-only or destructive. Clients use those declarations to decide what to\nrun without asking you: a read never prompts, a write always does. The gateway\nsplits the command catalog the same way, 138 reads and 171 writes, classified by\ncommand name with anything unrecognised treated as a write. The write half also\nrefuses to run without `confirm=true`, because it can reach `DeleteElements` and\n`QuitArchicad`.\n\n## Development\n\n```bash\nuv sync && uv run pytest          # offline suite\n```\n\nTo install unreleased `main` rather than a release, point uv at the repository\ninstead of at a wheel, or append a tag to build a released version from source:\n\n```bash\nuv tool install git+https://github.com/alesdev88/Archicad-MCP.git          # main\nuv tool install git+https://github.com/alesdev88/Archicad-MCP.git@v0.5.2   # a release\n```\n\nLive tests need a running Archicad. Open a **small, non-sensitive** test model\nand pin the port explicitly. Never run these against a client or teamwork\nproject, and re-read the crash warning above first:\n\n```bash\nARCHICAD_MCP_LIVE_PORT=<port> uv run pytest -m live -v\n```\n\nAfter a Tapir add-on update, refresh the bundled command schemas:\n\n```bash\nuv run python scripts/sync_tapir_defs.py\n```\n\nBuild the Claude Desktop extensions. One bundle per platform, both from this\none machine (Node is needed, for the `mcpb` packer):\n\n```bash\nuv run python scripts/build_bundle.py --target all\n```\n\nEach bundle gets a relocatable CPython from\n[python-build-standalone](https://github.com/astral-sh/python-build-standalone)\nwith every locked dependency installed into its own site-packages, so it starts\nwith no uv, no system Python and no network. The tree contains compiled wheels,\nwhich is why a bundle is platform-specific; the build is not, because\n`uv pip install --python-platform` resolves wheels for a named target. Source\nbuilds are refused outright: one would compile for *this* machine and put the\nresult in a bundle labelled for another, which fails at import on the user's\nmachine with nothing to explain why.\n\nThat refusal is also why there is no Intel macOS bundle. The script self-tests\nthe bundle it just built whenever the target is the machine building it, and\nsays so when it cannot, which is every time you cross-build for Windows.\n\nThe version is written in four places (`pyproject.toml`, `manifest.json`,\n`server.json`, and the download links in this README) and the test suite fails\nif they drift:\n\n```bash\nuv run python scripts/check_release_version.py\n```\n\nReleasing is a tag push. `.github/workflows/release.yml` refuses the tag unless\nall four files and the tag itself agree, then builds both bundles, the wheel and\nthe sdist, attaches them to a GitHub release, stamps each bundle's SHA-256 into\n`server.json`, and publishes that to the MCP registry. Run the check by hand\nfirst, because a pushed tag has to be deleted before it can be corrected, and\nthe registry refuses a version it already holds:\n\n```bash\nuv run python scripts/check_release_version.py v0.5.2\ngit tag v0.5.2 && git push origin v0.5.2\n```\n\nA cross-built Windows bundle cannot be executed by the machine that built it,\nso install one on Windows before trusting a release. The 0.2.1 bundle was\nchecked that way and runs. Each new release should be tested on Windows before\nbeing used in production.\n\n`icon.png` is rasterised from `icon.svg`, so the mark stays editable as vector\nart: change the SVG, then redraw the PNG the bundle ships. Pillow does that\nrasterising. It used to be pulled in just for this step, but the GDL pipeline\nnow needs it to downscale textures, so it is a project dependency and the\nscript can use it directly:\n\n```bash\nuv run python scripts/make_icon.py\n```\n\n## Docs\n\n- **[Known issues](docs/known-issues.md)**: the property-read crash, the element\n  ceiling, verified property names, and what is validated end-to-end.\n- **[Writing rules](docs/rules.md)**: every rule type, field, and the scoring model.\n- **[Schedule criteria codes](docs/scheme-criteria-codes.md)**: the empirical\n  `Param_Type` and `Relation_Index` table, and how to extend it.\n- **[GDL pipeline](docs/gdl-pipeline.md)**: mesh models to library parts with\n  finish dropdowns, and the GDL fine print the generator encodes.\n- **[API dashboard](https://alesdev88.github.io/Archicad-MCP/api-dashboard.html)**:\n  every one of the 309 reachable commands, grouped, showing which have a\n  dedicated tool and which are gateway-only. Generated rather than written;\n  refresh it with `uv run python scripts/build_dashboard.py` after a Tapir\n  definitions sync, and the push publishes it.\n\n## Privacy Policy\n\nThe server runs entirely on your machine and makes no outbound network\nconnections. It talks to the Archicad JSON API on `127.0.0.1`, ports 19723 to\n19743, and to nothing else. There is no telemetry, no analytics, and no backend:\nthe author receives nothing, including error reports.\n\nModel data the server reads is returned to the MCP client that asked for it,\nnormally Claude Desktop, which sends it to Anthropic as part of your\nconversation under [Anthropic's Privacy\nPolicy](https://www.anthropic.com/legal/privacy). Nothing is cached or retained\nby the server between requests. Two reductions are built in: `verdicts` mode\nkeeps the project name out of what the model sees, and Teamwork credentials are\nstripped from `get_project_info` before it returns.\n\nFull text: **[PRIVACY.md](PRIVACY.md)**.\n\n## License\n\nMIT. See [LICENSE](LICENSE).\n",
  "bytes": 26062,
  "sha": "bee5fd18c370b05cb883059f6bf671af624b87e90f03665534ac3a0f369dd169",
  "repo_slug": "alesdev88/archicad-mcp",
  "fonte": "repo",
  "truncated": false,
  "api": "https://agentalog.com/api/listings/mcp_io_github_alesdev88_archicad_mcp_34a46d63/readme"
}