top of page

Forma-Admin MCP

Adding a new starter to 40 projects used to mean 40 rounds of clicks in the account admin UI. I wrote an MCP server that exposes those admin actions as tools, so the request becomes one sentence: "Add Peter to every active project as a BIM Coordinator."

WHY A SERVER, NOT A SCRIPT
We onboard BIM and site staff into Autodesk Forma on a near-weekly cadence. Scripts got the job done, but they kept the decision-making inside Python; every edge case needed a developer. An MCP server inverts that. The decision-making happens in Claude, and the server stays a thin tool layer: the operator describes the outcome, Claude calls the right tool with the right arguments, and the audit trail lives in the chat transcript. For a small digital engineering function supporting 347+ live models, that trade is worth making.

THREE TOOLS, ONE RESPONSIBILITY EACH
acc_search_projects finds projects by name: fuzzy search across the hub, returning id, name, status and role, the minimum Claude needs to confirm scope before any write. acc_list_members reads the roster per project, used for audits and for safe add-only-if-absent flows. acc_add_member grants access with a named role, and it is idempotent: re-runs do not duplicate. Idempotency is not optional in a chat-driven workflow. LLMs retry and users re-phrase; a tool that creates duplicate memberships under either condition is a liability, so every mutation tool checks current state first.

WHAT HAPPENS WHEN I SAY "ADD PETER TO THE 40 ACTIVE PROJECTS"
First, scope: Claude calls acc_search_projects with status set to active, and the project list comes back for confirmation before any write. Second, the skip-list: Claude iterates acc_list_members and finds the rosters Peter is already on; cheap reads save avoidable writes. Third, role assignment: one acc_add_member call per remaining project, each carrying the named role. The server enforces idempotency again, so a mid-batch retry is safe. The transcript is the audit.

THE AI ROUTINE BEHIND THE PROJECT LIST
The same pattern keeps the project list itself current: a scheduled Claude routine sweeps the hub, compares it against the source-of-truth register, and flags drift, from new projects missing standard roles to archived projects still carrying members. Administration stops being a queue of UI chores and becomes a conversation with a system that already knows the state.

WHAT'S NEXT
acc_remove_member for offboarding, with a require-confirm flag for destructive paths. acc_audit_access for the quarterly "who is on what" compliance pass. acc_create_project for spinning up a templated project from the onboarding chat. All of it is part of a broader APS integration pattern: the same request wrapper sits under Takeoff 5D and Workplan 4D.

bottom of page