APS MCP Server

import { z } from "zod"; import { IssuesClient } from "@aps_sdk/construction-issues"; import { getAccessToken } from "./common.js"; import type { Tool } from "./common.js"; const schema = { projectId: z.string().nonempty() }; export const getIssues: Tool<typeof schema> = { title: "get-issues", description: "List all available projects in an Autodesk Construction Cloud account", schema, callback: async ({ projectId }) => { // TODO: add pagination support const accessToken = await getAccessToken(["data:read"]); const issuesClient = new IssuesClient(); projectId = projectId.replace("b.", ""); // the projectId should not contain the "b." prefix const issues = await issuesClient.getIssues(projectId, { accessToken }); if (!issues.results) { throw new Error("No issues found"); } return { content: issues.results.map((issue) => ({ type: "text", text: JSON.stringify(issue) })) }; } };