Skip to main content
Glama
entech-labs

autodesk-connector

by entech-labs
README.md
<p align="center">
  <img src=".github/banner.svg" alt="Contech-AI — Autodesk Connector for Claude, by EnTech Labs" width="100%">
</p>

<p align="center">
  <a href="LICENSE"><img alt="License: MIT" src="https://img.shields.io/badge/license-MIT-231f20"></a>
  <img alt="Python 3.10+" src="https://img.shields.io/badge/python-3.10%2B-1565c0">
  <img alt="Windows" src="https://img.shields.io/badge/platform-Windows%2010%20%2F%2011-1565c0">
  <img alt="Read-only" src="https://img.shields.io/badge/access-read--only-2e6b4f">
  <img alt="MCP" src="https://img.shields.io/badge/protocol-MCP-231f20">
</p>

# Contech-AI — Autodesk Connector for Claude

Ask Claude questions about your **Autodesk Construction Cloud (ACC)** project in plain English —
*"Which submittals are overdue?"*, *"Who has the most open issues?"* — and get answers,
tables, and dashboards built from your live project data.

```
Claude Desktop  ──►  acc_mcp.py (on your laptop)  ──►  Autodesk ACC
  you ask              reads your project data          RFIs, issues, submittals,
                       with your Autodesk login          cost, members, documents
```

- **Read-only.** It can look at ACC data; it cannot create, change, or delete anything.
- **Runs on your own Windows laptop.** Your credentials stay in a file on your machine.
- **You see only what your Autodesk login can see** in ACC.

Setup takes about 30 minutes the first time. You need:

| | |
|---|---|
| Windows 10 or 11 | with PowerShell (built in) |
| [Claude Desktop](https://claude.ai/download) | installed and signed in |
| [Python 3.10+](https://www.python.org/downloads/) | tick **"Add python.exe to PATH"** when installing |
| An ACC project | that your Autodesk account can open |
| An ACC Account Admin | to approve the app once (step 2) — may be you |

---

## Step 1 — Create an APS app

APS (Autodesk Platform Services) is how programs are allowed to talk to Autodesk. The app is
the "doorway"; your Autodesk login decides what's behind it.

1. Go to **[aps.autodesk.com/myapps](https://aps.autodesk.com/myapps)** and sign in.
2. **Create application**:
   - **Application type:** Traditional Web App
   - **APIs:** tick **Data Management API** and **Autodesk Construction Cloud API**
   - **Callback URL:** `http://localhost:5002/callback` — exactly this
3. Copy the **Client ID** and **Client Secret**. Treat the secret like a password.

**What's the callback URL?** When you sign in to Autodesk, the browser is sent back to this
address with a one-time code. The connector listens on port 5002 on your own laptop, catches the
code, and swaps it for your sign-in. It's only used during that one-time sign-in.

## Step 2 — Approve the app in ACC (Custom Integrations)

An **ACC Account Admin** adds your app to the account that holds your project:

**ACC → Account Admin → Custom Integrations → Add** → paste your **Client ID**.

Without this, every request returns **403 (access denied)** — and the error doesn't say why.

## Step 3 — Find your project ID

Open your project at [acc.autodesk.com](https://acc.autodesk.com) and look at the address bar:

```
https://acc.autodesk.com/docs/files/projects/1a2b3c4d-1111-2222-3333-444455556666?folderUrn=...
                                             └──────────── project ID ────────────┘
```

Put **`b.`** in front: `b.1a2b3c4d-1111-2222-3333-444455556666`.

## Step 4 — Get the code

**From the download link you were given (no Git needed):**

1. Download **`Contech-AI.zip`** from the link.
2. Right-click it → **Extract All…** → change the destination to `C:\Users\<you>` → **Extract**.
   You get the folder `C:\Users\<you>\Contech-AI`.
3. If Windows says the files came from the internet, run this once in PowerShell to unblock them:
   ```powershell
   Get-ChildItem C:\Users\$env:USERNAME\Contech-AI -Recurse | Unblock-File
   ```

The setup script works from wherever the folder is, so any location is fine.

**From GitHub:** click **Code → Download ZIP** on this page (it unzips as `Contech-AI-main`), or:

```powershell
cd $HOME
git clone https://github.com/entech-labs/Contech-AI.git
cd Contech-AI
```

## Step 5 — Install (one command)

Open **PowerShell** in the Contech-AI folder and run:

```powershell
powershell -ExecutionPolicy Bypass -File .\setup.ps1
```

It checks Python, creates a private environment (`.venv`), installs the libraries, creates your
`.env` settings file and opens it in Notepad, checks port 5002, and prints the exact Claude
config block for your folder.

<details>
<summary>Prefer to do it by hand?</summary>

```powershell
python -m venv .venv
.\.venv\Scripts\pip install -r requirements.txt
copy .env.example .env
notepad .env
```

</details>

**The libraries it installs:**

| Library | What it does |
|---|---|
| `httpx` | Talks to Autodesk's web APIs |
| `python-dotenv` | Reads your settings from `.env` |
| `fastmcp` + `mcp` | Speak MCP — the protocol Claude Desktop uses to call tools |

## Step 6 — Fill in `.env`

In Notepad, replace the three `<...>` values and save:

```
APS_CLIENT_ID=<client ID from step 1>
APS_CLIENT_SECRET=<client secret from step 1>
APS_CALLBACK_URL=http://localhost:5002/callback
DEFAULT_PROJECT_ID=b.<project ID from step 3>
```

Make sure it's saved as **`.env`**, not `.env.txt` (in File Explorer: View → Show →
**File name extensions**).

## Step 7 — Sign in to Autodesk (once)

```powershell
.\.venv\Scripts\python acc_mcp.py --test
```

Your browser opens → sign in with your Autodesk account → click **Allow**. You should see:

```
Signed in. Sign-in saved to ...\Contech-AI\.mcp_token.json
Checking project b.1a2b3c4d-... ...
  RFIs        12
  issues      8
  submittals  40

SUCCESS: Claude will be able to read this project.
```

The sign-in is saved in `.mcp_token.json` and renews itself — no browser needed again, as long as
you use it at least every couple of weeks. **Never copy or share that file.**

## Step 8 — Connect Claude Desktop

1. **Quit Claude completely.** Closing the window isn't enough — Claude keeps running in the
   background and will overwrite your change when it exits:
   ```powershell
   Stop-Process -Name claude -Force
   ```
2. **Open Claude's config file:**
   ```powershell
   notepad "$env:APPDATA\Claude\claude_desktop_config.json"
   ```
3. **Add the block** `setup.ps1` printed inside `"mcpServers"` (template in
   [`claude/claude_desktop_config.example.json`](claude/claude_desktop_config.example.json)):
   ```json
   "autodesk-connector": {
     "command": "C:\\Users\\<you>\\Contech-AI\\.venv\\Scripts\\python.exe",
     "args": ["C:\\Users\\<you>\\Contech-AI\\acc_mcp.py"]
   }
   ```
   - File empty? Wrap it: `{ "mcpServers": { ...block... } }`
   - File has other settings? Add `"mcpServers": { ...block... },` right after the first `{`.
   - Keep the **double backslashes** and the **commas** between entries.
4. **Save**, start Claude Desktop → your name (bottom-left) → **Settings → Developer** →
   `autodesk-connector` should say **running**.
5. In a chat, open the **tools menu** (sliders / "+" icon) and make sure **autodesk-connector** is on.

Claude starts the connector itself whenever it opens — there's nothing to keep running.

## Step 9 — Create a Claude Project

**Projects → New project** → name it (e.g. "ACC Project") → **project instructions** → paste the
text from [`claude/project_instructions.md`](claude/project_instructions.md) with your project ID.

Start a new chat inside the project and try:

- *"Which submittals are overdue?"*
- *"Group submittals by spec section."*
- *"List open issues and who they're assigned to — who has the most?"*
- *"Export all RFIs to CSV."* (saved in `exports\`)

Click **Allow** when Claude asks to use a tool.

## Step 10 (optional) — Dashboard Skill

[`skills/acc-dashboard/SKILL.md`](skills/acc-dashboard/SKILL.md) teaches Claude to build the same
project overview dashboard every time — KPIs, submittals by status and spec section, open items by
person, and an overdue list — from **live** data.

1. Zip the `skills\acc-dashboard` folder (right-click → **Send to → Compressed (zipped) folder**).
2. In Claude, go to **Settings → Capabilities → Skills** and upload the zip. (Menu names can
   vary by Claude version and plan; custom Skills may need to be enabled by your admin.)
3. Ask: *"Build the project dashboard."* Later: *"Refresh the dashboard."*

Dashboards are snapshots — "refresh" pulls fresh data and rebuilds in about a minute.

---

## What Claude can read

| Tool | Returns |
|---|---|
| `list_rfis` | RFIs |
| `list_issues` | Issues |
| `list_submittals` | Submittal items |
| `list_budgets` | Cost budget lines |
| `list_contracts` | Contracts / purchase orders |
| `list_change_orders` | Change orders (`pco`, `rfq`, `rco`, `oco`, `sco`) |
| `list_project_users` | Project members (turns IDs into names) |
| `browse_folder` | Docs folders and files (give it a folder ID) |
| `list_hubs` / `list_projects` | Accounts / projects (may be blocked for some logins) |

All read-only. Up to 200 rows come back into the chat; ask for a CSV for everything.

## Troubleshooting

| Problem | Fix |
|---|---|
| `SETUP NEEDED` on `--test` | `.env` still has `<...>` values or is saved as `.env.txt` |
| Browser shows a redirect / callback error | The Callback URL in the APS portal doesn't match `.env` exactly (including `/callback`) |
| `Port 5002 is already in use` | Another program holds it: `netstat -ano \| findstr :5002`, close that program, try again |
| Signed in, but `403` / "access denied" | App not added under ACC Custom Integrations (step 2), or your login isn't on the project |
| `list_hubs` says `hub_listing_blocked` | Normal for some accounts — the project tools still work with your project ID |
| Settings → Developer: "No servers added" | Claude overwrote the config — quit it fully, add the block again, save, restart |
| `autodesk-connector` shows **failed** | Click it for the log — usually a wrong path or a missing comma in the config |
| Claude answers about the wrong project | Start a new chat inside your Claude Project |
| `python` opens the Microsoft Store | Settings → Apps → Advanced app settings → App execution aliases → turn off `python.exe` |
| Claude says sign-in is required | Run `.\.venv\Scripts\python acc_mcp.py --test` again |

## Security

- **Read-only by design:** it only asks Autodesk for `data:read` and `account:read`.
- `.env` (your secret) and `.mcp_token.json` (your sign-in) stay on your laptop and are excluded
  from Git by `.gitignore`. Never share them, email them, or commit them.
- Using a test app for a demo? Delete it in the APS portal afterwards and remove it from
  Custom Integrations.
- Everything Claude shows comes from your ACC permissions — it can't see more than you can.

## License

[MIT](LICENSE) — free to use and adapt. Not affiliated with or endorsed by Autodesk or Anthropic.

---

## About

Built by **[EnTech Labs](https://entechnology.io)** — the technology practice of
[EnTech Engineering](https://entech.nyc), the group that builds the software behind our
infrastructure work across the New York metropolitan region.

This repository is the companion to our **Contech AI** training session. It is a teaching
example: a small, readable MCP server you can pull apart, point at your own systems, and learn
from. The same ~500 lines work against any API you already have — ACC is just the one we
needed first.

Questions from the session, or something unclear in the steps above? **[Open an
issue](https://github.com/entech-labs/Contech-AI/issues)** — we would rather fix the
instructions than answer the same question twice.

*Not affiliated with or endorsed by Autodesk or Anthropic.*