{"serverId":"mcp-registry/io.scanbimlabs/scanbim-mcp","tools":[{"name":"acc_create_issue","fixed":{"name":"acc_create_issue","description":"Create a real issue (punchlist/QC item) in ACC Build's Issues module via the APS Construction Issues v1 API. Returns the ACC-generated issue_id which can be linked back to a model URN or a detected clash.\nWhen to use: detect_clashes flagged a critical clash, or a field user reports a QC defect, and you want to track it in ACC for assignment and closeout.\nWhen NOT to use: you want to file a formal information request between trades — use acc_create_rfi instead. You want a note on a model element ","inputSchema":{"type":"object","required":["project_id","title","description"],"properties":{"title":{"type":"string","examples":["Duct/beam clash at Level 3 gridline C-4"],"description":"Short human-readable issue title, 1-255 chars. Shows up as the headline in ACC Issues UI."},"due_date":{"type":"string","examples":["2026-05-15"],"description":"ISO 8601 calendar date (YYYY-MM-DD). Time component is ignored by ACC."},"priority":{"enum":["critical","high","medium","low"],"type":"string","examples":["high"],"description":"ACC issue priority. Defaults to 'medium' if omitted."},"project_id":{"type":"string","examples":["b.a4be0c34a-4a01-4b0e-9f1a-123456789abc"],"description":"ACC project ID in either 'b.<uuid>' or plain '<uuid>' form (the worker strips the 'b.' prefix before calling the Issues endpoint). Obtainable via acc_list_projects."},"assigned_to":{"type":"string","examples":["jdoe@contractor.com"],"description":"ACC user ID (UUID) or email of the assignee. Pass null or omit to leave unassigned."},"description":{"type":"string","examples":["16\" supply duct (Mech-L3-SD-42) conflicts with W18x35 beam at elev 10'-6\". Reroute duct above beam per SMACNA, maintain 18\" clearance."],"description":"Long-form issue body. Plain text; supports newlines. Include clash coordinates, trade impact, and suggested fix."},"linked_model_id":{"type":"string","examples":["dXJuOmFkc2sub2JqZWN0czpvcy5vYmplY3Q6c2NhbmJpbS1tb2RlbHMvMTcwMDAwMDAwMDAwMF9idWlsZGluZy5ydnQ"],"description":"Optional APS URN linking this issue back to the source model. Stored for ScanBIM cross-referencing; not forwarded to ACC's linkedDocuments field."}}},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: false, idempotentHint: false (inferred from the name).","verify":true}],"tokensBefore":607,"tokensAfter":607},{"name":"acc_create_rfi","fixed":{"name":"acc_create_rfi","description":"Create a Request For Information in ACC Build's RFIs module via the APS Construction RFIs v1 API, in 'draft' status. Returns the ACC rfi_id.\nWhen to use: a trade or subcontractor needs formal information from the design team (unclear detail, conflicting spec, missing dimension) and you want a tracked paper trail.\nWhen NOT to use: the item is just a punchlist fix — use acc_create_issue. The question is internal to one trade — handle inside that trade's toolchain.\nAPS scopes: data:read data:write ","inputSchema":{"type":"object","required":["project_id","subject","question"],"properties":{"subject":{"type":"string","examples":["Confirm fireproofing thickness on W18 beams at Level 3"],"description":"Short RFI subject line, 1-255 chars. Appears as the RFI headline in ACC."},"priority":{"enum":["critical","high","medium","low"],"type":"string","examples":["high"],"description":"RFI priority. Defaults to 'medium'."},"question":{"type":"string","examples":["Drawing S2.03 shows 1-hour rating on W18x35 beams but spec 07 81 00 calls for 2-hour. Which governs at Level 3?"],"description":"Full question body sent to the design team. Plain text with newlines allowed."},"project_id":{"type":"string","examples":["b.a4be0c34a-4a01-4b0e-9f1a-123456789abc"],"description":"ACC project ID in 'b.<uuid>' or '<uuid>' form (the 'b.' prefix is stripped automatically). Obtainable via acc_list_projects."},"assigned_to":{"type":"string","examples":["architect@designfirm.com"],"description":"ACC user ID (UUID) or email of the responder. Pass null or omit to leave unassigned."},"linked_clash_id":{"type":"string","examples":["Ducts_001_Structural Framing_002"],"description":"Optional clash ID from detect_clashes output used to link this RFI back to the triggering clash. Stored for ScanBIM cross-referencing; not forwarded to ACC."},"linked_model_id":{"type":"string","examples":["dXJuOmFkc2sub2JqZWN0czpvcy5vYmplY3Q6c2NhbmJpbS1tb2RlbHMvMTcwMDAwMDAwMDAwMF9idWlsZGluZy5ydnQ"],"description":"Optional APS URN of the model the RFI references. Stored for ScanBIM cross-referencing; not forwarded to ACC."}}},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: false, idempotentHint: false (inferred from the name).","verify":true}],"tokensBefore":596,"tokensAfter":596},{"name":"acc_list_issues","fixed":{"name":"acc_list_issues","description":"List up to 50 issues from an ACC project, optionally filtered by status and priority. Returns a normalized array of {id, title, status, priority, due_date}.\nWhen to use: you need a dashboard view of open issues, to find a specific issue by metadata, or to check the status of previously created issues.\nWhen NOT to use: you want the full audit trail of a single issue — the ACC Issues UI or the per-issue endpoint is better. This tool caps at 50 results and does no pagination.\nAPS scopes: data:read ","inputSchema":{"type":"object","required":["project_id"],"properties":{"status":{"type":"string","examples":["open"],"description":"Filter by ACC issue status. Accepted values: 'open', 'closed', 'in_review', 'draft'. Omit for all statuses."},"priority":{"type":"string","examples":["high"],"description":"Filter by priority: 'critical' | 'high' | 'medium' | 'low'. Omit for all priorities."},"project_id":{"type":"string","examples":["b.a4be0c34a-4a01-4b0e-9f1a-123456789abc"],"description":"ACC project ID in 'b.<uuid>' or '<uuid>' form (the 'b.' prefix is stripped automatically). Obtainable via acc_list_projects."},"assigned_to":{"type":"string","examples":["jdoe@contractor.com"],"description":"Reserved for future filtering by assignee user ID or email. Currently not forwarded to the ACC API."}}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":375,"tokensAfter":375},{"name":"acc_list_projects","fixed":{"name":"acc_list_projects","description":"List every Autodesk Construction Cloud (ACC) / BIM 360 project the configured APS 2-legged app has access to, flattened across all hubs, with hub_id, hub_name, project_id, project_name, and project type.\nWhen to use: you need a project_id to pass into acc_create_issue, acc_list_issues, acc_create_rfi, acc_list_rfis, acc_search_documents, or acc_project_summary.\nWhen NOT to use: you already have the b.xxxx project_id. This tool makes N+1 API calls (one per hub) so avoid calling it in tight loops.","inputSchema":{"type":"object","properties":{}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":166,"tokensAfter":166},{"name":"acc_list_rfis","fixed":{"name":"acc_list_rfis","description":"List up to 50 RFIs from an ACC project, optionally filtered by status. Returns a normalized array of {id, subject, status}.\nWhen to use: you need a quick rollup of outstanding or answered RFIs on a project, or to find a specific RFI id.\nWhen NOT to use: you want the full response thread of a single RFI — use the ACC UI or per-RFI endpoint. This tool caps at 50 results and does no pagination.\nAPS scopes: data:read account:read\nRate limits: APS default ~50 req/min per app per endpoint; Model Deriv","inputSchema":{"type":"object","required":["project_id"],"properties":{"status":{"type":"string","examples":["open"],"description":"Filter by RFI status. Common values: 'draft', 'open', 'answered', 'closed', 'void'. Omit for all."},"project_id":{"type":"string","examples":["b.a4be0c34a-4a01-4b0e-9f1a-123456789abc"],"description":"ACC project ID in 'b.<uuid>' or '<uuid>' form (the 'b.' prefix is stripped automatically)."}}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":270,"tokensAfter":270},{"name":"acc_search_documents","fixed":{"name":"acc_search_documents","description":"Full-text search the ACC Docs module on a project for drawings, specs, submittals, and other documents matching a query string. Calls the APS Data Management v1 search endpoint scoped to a project.\nWhen to use: an agent needs to locate a spec section, a sheet, or a submittal by keyword (e.g. 'fireproofing', 'A-101', 'RFI 23').\nWhen NOT to use: you already have the document URN/lineage — fetch it directly. You want the file contents — this returns metadata; download separately via Data Management","inputSchema":{"type":"object","required":["project_id","query"],"properties":{"query":{"type":"string","examples":["fireproofing detail"],"description":"Free-text search string. Matched against document names and attributes. URL-encoded automatically by the worker."},"project_id":{"type":"string","examples":["b.a4be0c34a-4a01-4b0e-9f1a-123456789abc"],"description":"ACC project ID in 'b.<uuid>' or '<uuid>' form (the 'b.' prefix is stripped and re-prepended automatically for the Data Management API)."},"document_type":{"type":"string","examples":["spec"],"description":"Optional document type filter forwarded as filter[type]. Common values: 'drawing', 'spec', 'submittal', 'rfi', 'photo'."}}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":347,"tokensAfter":347},{"name":"get_model_metadata","fixed":{"name":"get_model_metadata","description":"Fetch the APS Model Derivative manifest and metadata for a URN, including translation progress, derivative outputs, and a viewer URL. Use this to confirm a model has finished translating (manifest.status == 'success') before calling detect_clashes or opening the viewer.\nWhen to use: right after upload_model to poll translation progress, or later to inspect which viewable derivatives (SVF2, thumbnail, OBJ) are available.\nWhen NOT to use: you just want a link to share — call get_viewer_link. You w","inputSchema":{"type":"object","required":["model_id"],"properties":{"model_id":{"type":"string","examples":["dXJuOmFkc2sub2JqZWN0czpvcy5vYmplY3Q6c2NhbmJpbS1tb2RlbHMvMTcwMDAwMDAwMDAwMF9idWlsZGluZy5ydnQ"],"description":"APS URN (base64url-encoded Autodesk object ID, starts with 'dXJu', unpadded) as returned by upload_model."}}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":244,"tokensAfter":244},{"name":"get_supported_formats","fixed":{"name":"get_supported_formats","description":"Return the full matrix of supported input formats organized by subscription tier (free / pro / enterprise). Use to tell a user whether their file type is accepted before calling upload_model, or to surface pricing tier info.\nWhen to use: you need to validate a file extension or show a customer the supported format list.\nWhen NOT to use: you already know the extension is common (.rvt/.ifc/.nwd/.obj) — just call upload_model, which returns an 'Unsupported format' error for anything outside the mat","inputSchema":{"type":"object","properties":{}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":167,"tokensAfter":167},{"name":"get_viewer_link","fixed":{"name":"get_viewer_link","description":"Return a shareable browser URL for the embedded APS viewer and a matching QR code for mobile/XR handoff. Does not require the model to be fully translated — the viewer page will poll the manifest.\nWhen to use: you need to hand a stakeholder a URL to see the 3D model in a browser, or print a QR for a jobsite.\nWhen NOT to use: you need the raw APS URN for programmatic API calls — use the model_id you already have instead. Do not use to check translation progress — call get_model_metadata.\nAPS scop","inputSchema":{"type":"object","required":["model_id"],"properties":{"model_id":{"type":"string","examples":["dXJuOmFkc2sub2JqZWN0czpvcy5vYmplY3Q6c2NhbmJpbS1tb2RlbHMvMTcwMDAwMDAwMDAwMF9idWlsZGluZy5ydnQ"],"description":"APS URN (base64url-encoded Autodesk object ID, starts with 'dXJu', unpadded) or the model_id returned from upload_model."}}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":248,"tokensAfter":248},{"name":"list_models","fixed":{"name":"list_models","description":"List every object currently stored in the scanbim-models OSS bucket, with URN, size in MB, and a viewer URL for each. Returns the raw OSS inventory, not the D1 models table, so freshly uploaded items appear immediately.\nWhen to use: you need to enumerate previously uploaded models to find a URN, show an inventory, or pick one for a follow-up tool call.\nWhen NOT to use: you already know the exact URN — call get_model_metadata directly. This tool is not a search; it returns up to the OSS default p","inputSchema":{"type":"object","properties":{"format":{"type":"string","examples":["rvt"],"description":"Reserved for future filtering by file extension (e.g. 'rvt', 'ifc'). Currently informational only; the OSS listing is not filtered by this value."},"project_name":{"type":"string","examples":["1200 Main St - Tower A"],"description":"Reserved for future filtering by the D1 project_name column. Currently informational only; the OSS listing is not filtered by this value."}}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":284,"tokensAfter":284},{"name":"upload_model","fixed":{"name":"upload_model","description":"Ingest a 3D model from a public URL into APS OSS and kick off a Model Derivative translation job, returning the URN plus a browser viewer link and QR code. Supports 50+ formats: Revit (.rvt/.rfa), Navisworks (.nwd/.nwc), IFC, FBX, OBJ, SolidWorks, point clouds (E57/LAS/RCP), CAD (DWG/STEP/IGES), etc.\nWhen to use: you have a publicly downloadable 3D file (S3 presigned URL, GitHub raw, etc.) and need it translated to SVF2 so it can be viewed, measured, or clash-checked via other tools.\nWhen NOT to","inputSchema":{"type":"object","required":["file_url","file_name"],"properties":{"file_url":{"type":"string","examples":["https://storage.googleapis.com/scanbim-public/sample/rac_basic_sample_project.rvt"],"description":"Publicly fetchable HTTPS URL to the 3D model file. Must be directly downloadable (no login wall, no JS redirect); the worker does a plain fetch() and streams the bytes into APS OSS. Max 100MB for direct upload. Presigned S3/GCS URLs work well."},"file_name":{"type":"string","examples":["office-tower-L1-L12.rvt"],"description":"Filename including the extension. The extension is used to determine the tier (free/pro/enterprise) and is preserved in the OSS object key (prefixed with a Unix-ms timestamp). Use only ASCII + dash/underscore/dot; no path separators."},"project_name":{"type":"string","examples":["1200 Main St - Tower A"],"description":"Optional free-text label stored alongside the model row in D1 for grouping models by project. Does not affect APS storage or URN. Defaults to 'default' when omitted."}}},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: false, idempotentHint: false (inferred from the name).","verify":true}],"tokensBefore":440,"tokensAfter":440},{"name":"xr_list_sessions","fixed":{"name":"xr_list_sessions","description":"List the last 20 VR/AR sessions launched via xr_launch_vr_session and xr_launch_ar_session, sorted by creation time desc. Sourced from the D1 usage_log table; returns an empty array if D1 is unavailable or no sessions have been recorded.\nWhen to use: you want to audit who launched which XR session and when, or surface recent sessions to a user.\nWhen NOT to use: you want details (join URL, features) for a specific session — those details live inside the original launch response and are not stored","inputSchema":{"type":"object","properties":{"model_id":{"type":"string","examples":["dXJuOmFkc2sub2JqZWN0czpvcy5vYmplY3Q6c2NhbmJpbS1tb2RlbHMvMTcwMDAwMDAwMDAwMF9idWlsZGluZy5ydnQ"],"description":"Reserved for future filtering by model URN. Currently not applied; all recent xr_* sessions are returned."},"session_type":{"enum":["vr","ar","all"],"type":"string","examples":["all"],"description":"Reserved for future filtering by session type. Currently not applied; both VR and AR sessions are returned."}}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":293,"tokensAfter":293}],"toolsChanged":12,"tokensSaved":0,"todo":[],"note":"Deterministic fixes. Changes marked verify need a human look before shipping (renames, inferred annotations, inferred types, removed text). Parameter descriptions in `todo` need to be written by someone who knows the API."}