ACC MCP
MCP server that lets Claude manage an ISO 19650 / TCVN 14177 Common Data Environment on Autodesk Construction Cloud — projects, CDE folder trees, permissions, files, document status and naming compliance.
README
ACC MCP
MCP server that lets Claude manage an ISO 19650 / TCVN 14177 Common Data Environment on Autodesk Construction Cloud — projects, CDE folder trees, permissions, files, document status and naming compliance.
Contents
- Requirements
- Step 1 — Install
- Step 2 — Register with Claude Desktop
- Step 3 — First run
- Using with Codex
- Testing with a standalone client
- Adding a new tool
- Tool list
- Troubleshooting
- Repository layout
- License
Requirements
| Item | Required |
|---|---|
| OS | Windows 10/11 (macOS and Linux work; paths below are Windows) |
| Host app | Claude Desktop, or Codex CLI |
| Python | 3.10 or newer |
| uv | 0.5 or newer — winget install astral-sh.uv |
| Autodesk | An APS account with a Developer Hub, and an ACC hub where you are a project member |
| Git | Any recent version |
Step 1 — Install
1.1 Create the APS app
- Sign in at https://aps.autodesk.com with the Autodesk account you use for ACC.
- If prompted that you have no hub: Get an APS plan → View options → pick the Free plan.
- Create a Developer Hub if you do not have one: https://manage.autodesk.com → Products and Services → Hubs → Create hub → type APS developer hub → Create and Activate.
- Back at aps.autodesk.com → profile menu → My applications → select your Developer Hub → Create application.
- Application type — pick one:
- Traditional Web App — has a Client Secret; fill in
APS_CLIENT_SECRET. - Desktop, Mobile, Single-Page App — no secret; leave
APS_CLIENT_SECRETempty (PKCE public client). - Server-to-Server — will not work; it has no 3-legged login.
- Traditional Web App — has a Client Secret; fill in
- Callback URL: enter exactly
http://localhost:8087/callback. - API Access: tick Data Management API, Autodesk Construction Cloud API, BIM 360 API.
- Save changes, then copy the Client ID (and Client Secret via Show).
1.2 Enable the Custom Integration in ACC
Required for every hub you want to reach, including in 3-legged mode.
- Sign in at acc.autodesk.com as an Account Admin of the hub → Account Admin.
- Left menu → Custom Integrations (some hubs: Settings → Custom Integrations) → Add custom integration.
- Paste the Client ID, give it a display name, tick both Account Administration and Document Management → Add.
- Make sure your Autodesk account is a member of at least one Docs project in that hub.
- For hubs where you are not Account Admin, send the Client ID to that hub's Account Admin.
1.3 Clone and install
git clone https://github.com/nhantruong96/acc-mcp.git
cd acc-mcp
uv sync
uv run python -m acc_mcp --selfcheck
Expected last line: selfcheck OK, with tools registered 45.
Re-run uv sync after every git pull.
Or run the script, which also creates .env and prints the Claude Desktop values:
powershell -ExecutionPolicy Bypass -File scripts\install.ps1
Extras:
uv sync --extra templates # adds openpyxl, needed only by scripts\gen_acc_naming_template.py
1.4 Configure .env
copy .env.example .env
Fill in APS_CLIENT_ID (and APS_CLIENT_SECRET if you chose Traditional Web App). Never commit .env; it is in .gitignore.
| Variable | Default | Meaning |
|---|---|---|
APS_CLIENT_ID |
(required) | Client ID of the APS app |
APS_CLIENT_SECRET |
(empty) | Fill in only for a Traditional Web App |
APS_CALLBACK_URL |
http://localhost:8087/callback |
Must match the APS app exactly |
APS_REGION |
US |
US, EMEA, AUS, CAN, DEU, GBR, IND, JPN |
ACC_AUTH_MODE |
3lo |
3lo / auto / 2lo |
ACC_MCP_NAMING_CONFIG |
iso19650-uk |
Default naming convention id |
ACC_MCP_NAMING_DIR |
~/.acc-mcp/naming |
Extra naming-convention JSON files |
ACC_MCP_DATA_DIR |
~/.acc-mcp |
Token and download storage |
ACC_MCP_ENV_FILE |
(empty) | Alternate .env path |
ACC_USER_ID |
(empty) | 2-legged impersonation only |
Instead of .env, you can put the same variables in the env block of the Claude Desktop config in Step 2.
Step 2 — Register with Claude Desktop
- Open the config file:
- Microsoft Store build:
%LOCALAPPDATA%\Packages\Claude_pzs8sxrjxfjjc\LocalCache\Roaming\Claude\claude_desktop_config.json - Classic installer:
%APPDATA%\Claude\claude_desktop_config.json - Or in the app: Settings → Developer → Edit Config.
- Microsoft Store build:
- Add the
accblock insidemcpServers, keeping any other servers:
{
"mcpServers": {
"acc": {
"command": "C:\\path\\to\\acc-mcp\\.venv\\Scripts\\python.exe",
"args": ["-m", "acc_mcp"],
"env": {
"APS_CLIENT_ID": "PASTE_CLIENT_ID_HERE",
"APS_CLIENT_SECRET": "PASTE_SECRET_OR_LEAVE_EMPTY",
"APS_CALLBACK_URL": "http://localhost:8087/callback",
"APS_REGION": "US",
"ACC_AUTH_MODE": "3lo",
"ACC_MCP_NAMING_CONFIG": "iso19650-uk"
}
}
}
}
- Save, fully quit Claude Desktop (right-click the tray icon → Quit), then reopen it.
- Settings → Developer must show acc as running.
Step 3 — First run
In a new conversation, ask in plain language:
- "Check the ACC authentication status" →
acc_auth_status— expectapp_configured: true,auth_mode: 3lo. - "Sign me in to Autodesk" →
acc_login— a browser opens; sign in and click Allow. - "Which hubs and projects can I see?" →
acc_whoami→acc_list_hubs→acc_list_projects.
Set up a CDE for one project, in this order:
- "Create an ACC project named
[name], type[Street/Bridge/…], job number[no.], timezone Asia/Bangkok" →acc_create_project. - "Check whether the project products are active yet" →
acc_get_project— wait fordocs: active. - "Add
[email]to Docs and make me project admin" →acc_add_project_user. - "In Project Files, build the CDE tree with disciplines
[…]and milestones[…]" →acc_cde_structure_template→acc_create_folder_structure. - "Design team uploads to WIP; client gets view/download on PUBLISHED; ARCHIVED is manage-only" →
acc_set_folder_permissions. - "Audit the naming of everything under SHARED" →
acc_audit_folder_naming. - "Set status S4 on the files just approved" →
acc_set_custom_attributes.
Conventions:
- Container ID fields, in order:
Project-Originator-Volume-Level-Type-Role-Number, separator-. - Status codes
S0–S5,A1…; revision codes alphanumeric, 3–8 characters (e.g.P01,C01). - Data Management ids carry a
b.prefix; every tool accepts the id with or without it. - Region defaults to
US; passregionper call or setAPS_REGIONfor EMEA hubs. - Sessions last ~15 days of inactivity, then run
acc_loginagain. - Two actions must be done in the ACC web UI: turning on File naming standard (Docs → Files → Settings), and clicking approve/reject in Reviews.
Generate an ACC naming-standard workbook to import:
uv sync --extra templates
uv run python scripts\gen_acc_naming_template.py iso19650-uk out.xlsx --name "Project naming standard"
Then in ACC Docs → Settings → File naming standard → Import → pick out.xlsx.
Using with Codex
- Install the server as in Step 1 — Install.
- Open
%USERPROFILE%\.codex\config.toml. - Add:
[mcp_servers.acc]
command = "C:\\path\\to\\acc-mcp\\.venv\\Scripts\\python.exe"
args = ["-m", "acc_mcp"]
[mcp_servers.acc.env]
APS_CLIENT_ID = "PASTE_CLIENT_ID_HERE"
APS_CLIENT_SECRET = "PASTE_SECRET_OR_LEAVE_EMPTY"
APS_CALLBACK_URL = "http://localhost:8087/callback"
APS_REGION = "US"
ACC_AUTH_MODE = "3lo"
ACC_MCP_NAMING_CONFIG = "iso19650-uk"
- Restart the Codex CLI.
- Run
/mcpin Codex to confirmaccis listed.
Testing with a standalone client
uv run python -m acc_mcp --selfcheck
uv run acc-mcp --version
uv run acc-mcp --list-tools
npx @modelcontextprotocol/inspector uv run acc-mcp
Adding a new tool
- Open the matching module in
src/acc_mcp/tools/(or create one). - Define the function and decorate it:
from ..app import mcp
from .common import api_get
@mcp.tool()
async def acc_my_tool(project_id: str) -> dict:
"""One-line summary shown to the model. Then the argument details."""
return await api_get(f"/project/v1/projects/{project_id}")
- If you created a new module, add it to
src/acc_mcp/tools/__init__.py. - Never use
print()— stdout is the JSON-RPC channel. - Verify:
uv run python -m acc_mcp --selfcheck
uv run acc-mcp --list-tools
- Fully quit and reopen Claude Desktop.
Tool list
| Group | Tools |
|---|---|
| Authentication | acc_auth_status, acc_login, acc_logout, acc_whoami |
| Hubs & projects | acc_list_hubs, acc_list_projects, acc_get_project, acc_create_project |
| Members | acc_list_project_users, acc_add_project_user, acc_update_project_user, acc_remove_project_user, acc_import_project_users, acc_list_companies |
| CDE folders | acc_get_top_folders, acc_list_folder, acc_create_folder, acc_create_folder_structure, acc_rename_folder, acc_move_folder, acc_delete_folder, acc_restore_folder, acc_search_folder |
| Permissions | acc_get_folder_permissions, acc_set_folder_permissions, acc_remove_folder_permissions |
| Files | acc_get_item, acc_list_item_versions, acc_upload_file, acc_download_file, acc_copy_file |
| Status & metadata | acc_list_custom_attributes, acc_create_custom_attribute, acc_get_docs_metadata, acc_set_custom_attributes, acc_get_naming_standard |
| ISO 19650 naming | acc_naming_configs, acc_validate_names, acc_compose_name, acc_audit_folder_naming, acc_cde_structure_template |
| Reviews | acc_list_review_workflows, acc_list_reviews, acc_get_review, acc_create_review |
Add a project-specific naming convention: copy src/acc_mcp/naming_configs/iso19650-uk.json to %USERPROFILE%\.acc-mcp\naming\[project-code].json, edit the code tables, then pass config_id="[project-code]" or set ACC_MCP_NAMING_CONFIG.
Troubleshooting
| Symptom | Fix |
|---|---|
ModuleNotFoundError: No module named 'mcp.server.fastmcp' |
mcp 2.0 removed that module. The pin is mcp>=1.10.0,<2 in pyproject.toml and requirements.txt — run uv lock then uv sync. |
The client credentials are invalid, or 400/401 on token |
Wrong Client ID; app not attached to a Developer Hub (Step 1.1); or app-type mismatch — Traditional Web App needs the secret, Desktop/Mobile/SPA needs it empty. |
acc_whoami / acc_list_hubs returns an empty hub list |
App not added to the hub's Custom Integrations (Step 1.2), and Document Management not ticked. Or your account is not a member of any Docs project in that hub. |
| 403 on an operation | Your Autodesk account lacks the right: Account Admin to create projects, CONTROL/Manage for folder permissions, Project Admin to edit members. |
| 404 on Admin calls (list/create project) | Wrong region — try APS_REGION=EMEA. |
Cannot open local port 8087 during login |
Port taken. Change the port in APS_CALLBACK_URL and in the APS app, then restart the host. |
| Login reports a timeout | Ask Claude to run acc_login with wait_only=true, or log in again. |
refresh token is no longer valid |
Unused for ~15 days — run acc_login again. |
| Server missing in Claude Desktop | Bad JSON (comma, \\ escapes), or a wrong python.exe path. Check mcp-server-acc.log under logs\ next to the config file. |
New project stuck at activating |
Normal for a few minutes. activationFailed → check the hub's product licences and recreate. |
| Cannot move a file between folders | Not supported by the API — use acc_copy_file. Folders can be moved with acc_move_folder. |
| Naming standard changes do not apply | The API is read-only for naming standards. Import the workbook in ACC Docs, then confirm with acc_get_naming_standard. |
| Reviews cannot be approved from Claude | Approve/reject only exists in the ACC UI. acc_create_review / acc_get_review start and monitor. |
Repository layout
src/acc_mcp/
server.py entry point (--version, --selfcheck, --list-tools)
__main__.py python -m acc_mcp
app.py FastMCP instance
config.py environment variables, endpoints, scopes
auth.py 3-legged OAuth + PKCE, token storage
http.py APS HTTP client
ids.py 'b.' prefix handling
naming.py ISO 19650 name validation / composition
naming_configs/ bundled naming conventions (iso19650-uk.json)
tools/ the 45 MCP tools, grouped by area
scripts/
install.ps1 uv sync + selfcheck
gen_acc_naming_template.py naming config JSON -> ACC import .xlsx
naming_templates/
Default_ISO_19650_master.xlsx Autodesk master workbook used as the mould
pyproject.toml dependencies and console script
uv.lock committed on purpose so `uv sync` is reproducible
.env.example template for .env (never commit .env)
License
MIT — see LICENSE.
推荐服务器
Baidu Map
百度地图核心API现已全面兼容MCP协议,是国内首家兼容MCP协议的地图服务商。
Playwright MCP Server
一个模型上下文协议服务器,它使大型语言模型能够通过结构化的可访问性快照与网页进行交互,而无需视觉模型或屏幕截图。
Magic Component Platform (MCP)
一个由人工智能驱动的工具,可以从自然语言描述生成现代化的用户界面组件,并与流行的集成开发环境(IDE)集成,从而简化用户界面开发流程。
Audiense Insights MCP Server
通过模型上下文协议启用与 Audiense Insights 账户的交互,从而促进营销洞察和受众数据的提取和分析,包括人口统计信息、行为和影响者互动。
VeyraX
一个单一的 MCP 工具,连接你所有喜爱的工具:Gmail、日历以及其他 40 多个工具。
graphlit-mcp-server
模型上下文协议 (MCP) 服务器实现了 MCP 客户端与 Graphlit 服务之间的集成。 除了网络爬取之外,还可以将任何内容(从 Slack 到 Gmail 再到播客订阅源)导入到 Graphlit 项目中,然后从 MCP 客户端检索相关内容。
Kagi MCP Server
一个 MCP 服务器,集成了 Kagi 搜索功能和 Claude AI,使 Claude 能够在回答需要最新信息的问题时执行实时网络搜索。
e2b-mcp-server
使用 MCP 通过 e2b 运行代码。
Neon MCP Server
用于与 Neon 管理 API 和数据库交互的 MCP 服务器
Exa MCP Server
模型上下文协议(MCP)服务器允许像 Claude 这样的 AI 助手使用 Exa AI 搜索 API 进行网络搜索。这种设置允许 AI 模型以安全和受控的方式获取实时的网络信息。