@transcend-io/mcp 0.8.3 → 0.9.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/cli.mjs CHANGED
@@ -3,7 +3,7 @@ import { n as ToolRegistry, r as TranscendGraphQLClient, t as UMBRELLA_OAUTH_SCO
3
3
  import { SimpleLogger, buildMcpServer, configureOAuthScopes, createTranscendRestClient, isOAuthModeEnabled, parseTransportArgs, readSombraEnvConfig, resolveMcpDashboardUrl, resolveMcpGraphqlUrl, resolveStdioStartupAuthOptional, runMcpHttp } from "@transcend-io/mcp-server-base";
4
4
  import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
5
5
  //#region package.json
6
- var version = "0.8.3";
6
+ var version = "0.9.1";
7
7
  //#endregion
8
8
  //#region src/server-instructions.ts
9
9
  /** MCP initialize instructions for the unified @transcend-io/mcp server. */
package/dist/cli.mjs.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cli.mjs","names":["packageJson.version"],"sources":["../package.json","../src/server-instructions.ts","../src/cli.ts"],"sourcesContent":["","/** MCP initialize instructions for the unified @transcend-io/mcp server. */\nexport const UMBRELLA_DOCS_SERVER_INSTRUCTIONS =\n 'For how-to, product concepts, setup guides, or \"what is X\" questions about Transcend ' +\n '(e.g. airgap, consent, DSR): (1) call docs_list with a keyword, ' +\n '(2) call docs_fetch on the best matching URL, (3) answer from that content. ' +\n 'API tools return data from the signed-in organization; they do not replace product documentation.';\n","#!/usr/bin/env node\n\nimport { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';\nimport {\n buildMcpServer,\n createTranscendRestClient,\n isOAuthModeEnabled,\n parseTransportArgs,\n resolveStdioStartupAuthOptional,\n configureOAuthScopes,\n resolveMcpDashboardUrl,\n resolveMcpGraphqlUrl,\n readSombraEnvConfig,\n runMcpHttp,\n SimpleLogger,\n type AuthCredentials,\n} from '@transcend-io/mcp-server-base';\n\nimport packageJson from '../package.json' with { type: 'json' };\nimport { TranscendGraphQLClient } from './graphql-client.js';\nimport { UMBRELLA_OAUTH_SCOPES } from './oauth-scopes.js';\nimport { ToolRegistry } from './registry.js';\nimport { UMBRELLA_DOCS_SERVER_INSTRUCTIONS } from './server-instructions.js';\n\nconst VERSION = packageJson.version;\n\nconst buildServerOptions = {\n name: 'transcend-mcp',\n version: VERSION,\n instructions: UMBRELLA_DOCS_SERVER_INSTRUCTIONS,\n} as const;\n\nfunction createToolRegistry(\n auth: AuthCredentials | null,\n sombraUrl: string | undefined,\n sombraCustomerKey: string | undefined,\n graphqlUrl: string,\n dashboardUrl: string,\n): ToolRegistry {\n const graphqlClient = new TranscendGraphQLClient(auth, graphqlUrl);\n const restClient = createTranscendRestClient(auth, graphqlClient, {\n sombraUrl,\n sombraCustomerKey,\n });\n return new ToolRegistry({ rest: restClient, graphql: graphqlClient, dashboardUrl });\n}\n\nasync function main(): Promise<void> {\n const config = parseTransportArgs();\n const isHttpTransport = config.transport === 'http';\n SimpleLogger.setInfoToStdout(isHttpTransport);\n const logger = new SimpleLogger();\n const { sombraUrl, sombraCustomerKey } = readSombraEnvConfig();\n const dashboardUrl = resolveMcpDashboardUrl();\n const graphqlUrl = await resolveMcpGraphqlUrl(logger);\n\n if (isHttpTransport) {\n await runMcpHttp(\n {\n name: 'transcend-mcp',\n version: VERSION,\n createServer: async (auth) => {\n logger.info('Creating unified MCP server for new HTTP session...', {\n sombraUrl: sombraUrl ?? '(lazy GraphQL resolve)',\n graphqlUrl,\n dashboardUrl,\n authType: auth?.type ?? 'none',\n hasSombraCustomerKey: Boolean(sombraCustomerKey),\n });\n const registry = createToolRegistry(\n auth,\n sombraUrl,\n sombraCustomerKey,\n graphqlUrl,\n dashboardUrl,\n );\n return buildMcpServer({\n ...buildServerOptions,\n tools: registry.getAllTools(),\n });\n },\n },\n config,\n );\n return;\n }\n\n // stdio mode\n configureOAuthScopes(UMBRELLA_OAUTH_SCOPES);\n const auth = resolveStdioStartupAuthOptional();\n logger.info('Initializing Transcend API clients...', {\n sombraUrl: sombraUrl ?? '(lazy GraphQL resolve)',\n graphqlUrl,\n dashboardUrl,\n authType: auth?.type ?? (isOAuthModeEnabled() ? 'oauth-pending' : 'none'),\n });\n\n const toolRegistry = createToolRegistry(\n auth,\n sombraUrl,\n sombraCustomerKey,\n graphqlUrl,\n dashboardUrl,\n );\n\n logger.info(\n `Registered ${toolRegistry.getToolCount()} tools across ${toolRegistry.getCategories().length} categories`,\n {\n categories: toolRegistry.getCategories(),\n toolCount: toolRegistry.getToolCount(),\n },\n );\n\n const server = buildMcpServer({\n ...buildServerOptions,\n tools: toolRegistry.getAllTools(),\n });\n\n logger.info(`Starting Transcend MCP Server v${VERSION}...`, {\n toolCount: toolRegistry.getToolCount(),\n categories: toolRegistry.getCategories(),\n });\n\n const transport = new StdioServerTransport();\n await server.connect(transport);\n\n logger.info('Transcend MCP Server started successfully', {\n sombraUrl: sombraUrl ?? '(lazy GraphQL resolve)',\n graphqlUrl,\n dashboardUrl,\n tools: toolRegistry.getToolCount(),\n });\n}\n\nmain().catch((error) => {\n const logger = new SimpleLogger();\n logger.error('Failed to start server:', error);\n process.exit(1);\n});\n"],"mappings":";;;;;;;;;ACCA,MAAa,oCACX;;;ACsBF,MAAM,UAAUA;AAEhB,MAAM,qBAAqB;CACzB,MAAM;CACN,SAAS;CACT,cAAc;CACf;AAED,SAAS,mBACP,MACA,WACA,mBACA,YACA,cACc;CACd,MAAM,gBAAgB,IAAI,uBAAuB,MAAM,WAAW;AAKlE,QAAO,IAAI,aAAa;EAAE,MAJP,0BAA0B,MAAM,eAAe;GAChE;GACA;GACD,CACyC;EAAE,SAAS;EAAe;EAAc,CAAC;;AAGrF,eAAe,OAAsB;CACnC,MAAM,SAAS,oBAAoB;CACnC,MAAM,kBAAkB,OAAO,cAAc;AAC7C,cAAa,gBAAgB,gBAAgB;CAC7C,MAAM,SAAS,IAAI,cAAc;CACjC,MAAM,EAAE,WAAW,sBAAsB,qBAAqB;CAC9D,MAAM,eAAe,wBAAwB;CAC7C,MAAM,aAAa,MAAM,qBAAqB,OAAO;AAErD,KAAI,iBAAiB;AACnB,QAAM,WACJ;GACE,MAAM;GACN,SAAS;GACT,cAAc,OAAO,SAAS;AAC5B,WAAO,KAAK,uDAAuD;KACjE,WAAW,aAAa;KACxB;KACA;KACA,UAAU,MAAM,QAAQ;KACxB,sBAAsB,QAAQ,kBAAkB;KACjD,CAAC;IACF,MAAM,WAAW,mBACf,MACA,WACA,mBACA,YACA,aACD;AACD,WAAO,eAAe;KACpB,GAAG;KACH,OAAO,SAAS,aAAa;KAC9B,CAAC;;GAEL,EACD,OACD;AACD;;AAIF,sBAAqB,sBAAsB;CAC3C,MAAM,OAAO,iCAAiC;AAC9C,QAAO,KAAK,yCAAyC;EACnD,WAAW,aAAa;EACxB;EACA;EACA,UAAU,MAAM,SAAS,oBAAoB,GAAG,kBAAkB;EACnE,CAAC;CAEF,MAAM,eAAe,mBACnB,MACA,WACA,mBACA,YACA,aACD;AAED,QAAO,KACL,cAAc,aAAa,cAAc,CAAC,gBAAgB,aAAa,eAAe,CAAC,OAAO,cAC9F;EACE,YAAY,aAAa,eAAe;EACxC,WAAW,aAAa,cAAc;EACvC,CACF;CAED,MAAM,SAAS,eAAe;EAC5B,GAAG;EACH,OAAO,aAAa,aAAa;EAClC,CAAC;AAEF,QAAO,KAAK,kCAAkC,QAAQ,MAAM;EAC1D,WAAW,aAAa,cAAc;EACtC,YAAY,aAAa,eAAe;EACzC,CAAC;CAEF,MAAM,YAAY,IAAI,sBAAsB;AAC5C,OAAM,OAAO,QAAQ,UAAU;AAE/B,QAAO,KAAK,6CAA6C;EACvD,WAAW,aAAa;EACxB;EACA;EACA,OAAO,aAAa,cAAc;EACnC,CAAC;;AAGJ,MAAM,CAAC,OAAO,UAAU;AAEtB,KADmB,cACb,CAAC,MAAM,2BAA2B,MAAM;AAC9C,SAAQ,KAAK,EAAE;EACf"}
1
+ {"version":3,"file":"cli.mjs","names":["packageJson.version"],"sources":["../package.json","../src/server-instructions.ts","../src/cli.ts"],"mappings":";;;;;;;;;ACCA,MAAa,oCACX;;;ACsBF,MAAM,UAAUA;AAEhB,MAAM,qBAAqB;CACzB,MAAM;CACN,SAAS;CACT,cAAc;CACf;AAED,SAAS,mBACP,MACA,WACA,mBACA,YACA,cACc;CACd,MAAM,gBAAgB,IAAI,uBAAuB,MAAM,WAAW;AAKlE,QAAO,IAAI,aAAa;EAAE,MAJP,0BAA0B,MAAM,eAAe;GAChE;GACA;GACD,CACyC;EAAE,SAAS;EAAe;EAAc,CAAC;;AAGrF,eAAe,OAAsB;CACnC,MAAM,SAAS,oBAAoB;CACnC,MAAM,kBAAkB,OAAO,cAAc;AAC7C,cAAa,gBAAgB,gBAAgB;CAC7C,MAAM,SAAS,IAAI,cAAc;CACjC,MAAM,EAAE,WAAW,sBAAsB,qBAAqB;CAC9D,MAAM,eAAe,wBAAwB;CAC7C,MAAM,aAAa,MAAM,qBAAqB,OAAO;AAErD,KAAI,iBAAiB;AACnB,QAAM,WACJ;GACE,MAAM;GACN,SAAS;GACT,cAAc,OAAO,SAAS;AAC5B,WAAO,KAAK,uDAAuD;KACjE,WAAW,aAAa;KACxB;KACA;KACA,UAAU,MAAM,QAAQ;KACxB,sBAAsB,QAAQ,kBAAkB;KACjD,CAAC;IACF,MAAM,WAAW,mBACf,MACA,WACA,mBACA,YACA,aACD;AACD,WAAO,eAAe;KACpB,GAAG;KACH,OAAO,SAAS,aAAa;KAC9B,CAAC;;GAEL,EACD,OACD;AACD;;AAIF,sBAAqB,sBAAsB;CAC3C,MAAM,OAAO,iCAAiC;AAC9C,QAAO,KAAK,yCAAyC;EACnD,WAAW,aAAa;EACxB;EACA;EACA,UAAU,MAAM,SAAS,oBAAoB,GAAG,kBAAkB;EACnE,CAAC;CAEF,MAAM,eAAe,mBACnB,MACA,WACA,mBACA,YACA,aACD;AAED,QAAO,KACL,cAAc,aAAa,cAAc,CAAC,gBAAgB,aAAa,eAAe,CAAC,OAAO,cAC9F;EACE,YAAY,aAAa,eAAe;EACxC,WAAW,aAAa,cAAc;EACvC,CACF;CAED,MAAM,SAAS,eAAe;EAC5B,GAAG;EACH,OAAO,aAAa,aAAa;EAClC,CAAC;AAEF,QAAO,KAAK,kCAAkC,QAAQ,MAAM;EAC1D,WAAW,aAAa,cAAc;EACtC,YAAY,aAAa,eAAe;EACzC,CAAC;CAEF,MAAM,YAAY,IAAI,sBAAsB;AAC5C,OAAM,OAAO,QAAQ,UAAU;AAE/B,QAAO,KAAK,6CAA6C;EACvD,WAAW,aAAa;EACxB;EACA;EACA,OAAO,aAAa,cAAc;EACnC,CAAC;;AAGJ,MAAM,CAAC,OAAO,UAAU;AAEtB,KADmB,cACb,CAAC,MAAM,2BAA2B,MAAM;AAC9C,SAAQ,KAAK,EAAE;EACf"}
@@ -1 +1 @@
1
- {"version":3,"file":"oauth-scopes-Crj6iyN6.mjs","names":[],"sources":["../src/graphql-client.ts","../src/registry.ts","../src/oauth-scopes.ts"],"sourcesContent":["import { AdminMixin } from '@transcend-io/mcp-server-admin';\nimport { AssessmentsMixin } from '@transcend-io/mcp-server-assessment';\nimport {\n TranscendGraphQLBase,\n type AuthCredentials,\n type Logger,\n} from '@transcend-io/mcp-server-base';\nimport { DiscoveryMixin } from '@transcend-io/mcp-server-discovery';\nimport { DSRMixin } from '@transcend-io/mcp-server-dsr';\nimport { InventoryMixin } from '@transcend-io/mcp-server-inventory';\nimport { WorkflowsMixin } from '@transcend-io/mcp-server-workflows';\n\ntype Constructor<T = object> = new (...args: [AuthCredentials | null, string?, Logger?]) => T;\n\nfunction applyMixin(target: Constructor, mixin: Constructor): void {\n Object.getOwnPropertyNames(mixin.prototype).forEach((name) => {\n if (name === 'constructor') return;\n const descriptor = Object.getOwnPropertyDescriptor(mixin.prototype, name);\n if (descriptor) {\n Object.defineProperty(target.prototype, name, descriptor);\n }\n });\n}\n\nexport class TranscendGraphQLClient extends TranscendGraphQLBase {\n constructor(auth: AuthCredentials | null, baseUrl?: string, logger?: Logger) {\n super(auth, baseUrl, logger);\n }\n\n // Admin\n declare getOrganization: InstanceType<typeof AdminMixin>['getOrganization'];\n declare getCurrentUser: InstanceType<typeof AdminMixin>['getCurrentUser'];\n declare listUsers: InstanceType<typeof AdminMixin>['listUsers'];\n declare listTeams: InstanceType<typeof AdminMixin>['listTeams'];\n declare listApiKeys: InstanceType<typeof AdminMixin>['listApiKeys'];\n declare createApiKey: InstanceType<typeof AdminMixin>['createApiKey'];\n declare getPrivacyCenter: InstanceType<typeof AdminMixin>['getPrivacyCenter'];\n\n // DSR\n declare listRequests: InstanceType<typeof DSRMixin>['listRequests'];\n declare getRequest: InstanceType<typeof DSRMixin>['getRequest'];\n declare employeeMakeDataSubjectRequest: InstanceType<\n typeof DSRMixin\n >['employeeMakeDataSubjectRequest'];\n declare cancelRequest: InstanceType<typeof DSRMixin>['cancelRequest'];\n\n // Inventory\n declare listDataSilos: InstanceType<typeof InventoryMixin>['listDataSilos'];\n declare getDataSilo: InstanceType<typeof InventoryMixin>['getDataSilo'];\n declare createDataSilo: InstanceType<typeof InventoryMixin>['createDataSilo'];\n declare updateDataSilo: InstanceType<typeof InventoryMixin>['updateDataSilo'];\n declare listVendors: InstanceType<typeof InventoryMixin>['listVendors'];\n declare listDataPoints: InstanceType<typeof InventoryMixin>['listDataPoints'];\n declare listSubDataPoints: InstanceType<typeof InventoryMixin>['listSubDataPoints'];\n declare listIdentifiers: InstanceType<typeof InventoryMixin>['listIdentifiers'];\n declare listDataCategories: InstanceType<typeof InventoryMixin>['listDataCategories'];\n\n // Consent tools now call makeRequest directly (no mixin needed)\n\n // Discovery\n declare listClassificationScans: InstanceType<typeof DiscoveryMixin>['listClassificationScans'];\n declare listDiscoveryPlugins: InstanceType<typeof DiscoveryMixin>['listDiscoveryPlugins'];\n\n // Assessments\n declare listAssessments: InstanceType<typeof AssessmentsMixin>['listAssessments'];\n declare getAssessment: InstanceType<typeof AssessmentsMixin>['getAssessment'];\n declare selectAssessmentQuestionAnswers: InstanceType<\n typeof AssessmentsMixin\n >['selectAssessmentQuestionAnswers'];\n declare updateAssessmentFormAssignees: InstanceType<\n typeof AssessmentsMixin\n >['updateAssessmentFormAssignees'];\n declare listAssessmentGroups: InstanceType<typeof AssessmentsMixin>['listAssessmentGroups'];\n declare createAssessmentGroup: InstanceType<typeof AssessmentsMixin>['createAssessmentGroup'];\n declare createAssessment: InstanceType<typeof AssessmentsMixin>['createAssessment'];\n declare updateAssessment: InstanceType<typeof AssessmentsMixin>['updateAssessment'];\n declare listAssessmentTemplates: InstanceType<typeof AssessmentsMixin>['listAssessmentTemplates'];\n declare submitAssessmentForReview: InstanceType<\n typeof AssessmentsMixin\n >['submitAssessmentForReview'];\n declare createAssessmentFormTemplate: InstanceType<\n typeof AssessmentsMixin\n >['createAssessmentFormTemplate'];\n declare createAssessmentSection: InstanceType<typeof AssessmentsMixin>['createAssessmentSection'];\n declare createAssessmentQuestions: InstanceType<\n typeof AssessmentsMixin\n >['createAssessmentQuestions'];\n declare getAssessmentFormTemplate: InstanceType<\n typeof AssessmentsMixin\n >['getAssessmentFormTemplate'];\n\n // Workflows\n declare listWorkflows: InstanceType<typeof WorkflowsMixin>['listWorkflows'];\n declare updateWorkflowConfig: InstanceType<typeof WorkflowsMixin>['updateWorkflowConfig'];\n declare listEmailTemplates: InstanceType<typeof WorkflowsMixin>['listEmailTemplates'];\n}\n\napplyMixin(TranscendGraphQLClient, AdminMixin);\napplyMixin(TranscendGraphQLClient, DSRMixin);\napplyMixin(TranscendGraphQLClient, InventoryMixin);\napplyMixin(TranscendGraphQLClient, DiscoveryMixin);\napplyMixin(TranscendGraphQLClient, AssessmentsMixin);\napplyMixin(TranscendGraphQLClient, WorkflowsMixin);\n","import { toJsonSchemaCompat } from '@modelcontextprotocol/sdk/server/zod-json-schema-compat.js';\nimport { getAdminTools } from '@transcend-io/mcp-server-admin';\nimport { getAssessmentTools } from '@transcend-io/mcp-server-assessment';\nimport {\n createErrorResult,\n EMPTY_CAPABILITY_REPORT,\n expandToolsForClient,\n isVisibleToModel,\n resolveToolVariant,\n SimpleLogger,\n type ClientCapabilityReport,\n type ToolDefinition,\n type TranscendRestClient,\n} from '@transcend-io/mcp-server-base';\nimport { getConsentTools } from '@transcend-io/mcp-server-consent';\nimport { getDiscoveryTools } from '@transcend-io/mcp-server-discovery';\nimport { getDocsTools } from '@transcend-io/mcp-server-docs';\nimport { getDSRTools } from '@transcend-io/mcp-server-dsr';\nimport { getInventoryTools } from '@transcend-io/mcp-server-inventory';\nimport { getPreferenceTools } from '@transcend-io/mcp-server-preferences';\nimport { getWorkflowTools } from '@transcend-io/mcp-server-workflows';\n\nimport type { TranscendGraphQLClient } from './graphql-client.js';\n\nexport interface UmbrellaToolClients {\n /** REST client for Sombra API */\n rest: TranscendRestClient;\n /** Composed GraphQL client with all domain mixins */\n graphql: TranscendGraphQLClient;\n /** Admin-dashboard base URL used to build deep links */\n dashboardUrl: string;\n}\n\nexport class ToolRegistry {\n private tools: Map<string, ToolDefinition> = new Map();\n private jsonSchemaCache: Map<string, Record<string, unknown>> = new Map();\n private clients: UmbrellaToolClients;\n private logger = new SimpleLogger();\n\n constructor(clients: UmbrellaToolClients) {\n this.clients = clients;\n this.registerAllTools();\n }\n\n private registerAllTools(): void {\n this.registerToolsFromModule(getDocsTools(this.clients));\n this.registerToolsFromModule(getDSRTools(this.clients));\n this.registerToolsFromModule(getConsentTools(this.clients));\n this.registerToolsFromModule(getPreferenceTools(this.clients));\n this.registerToolsFromModule(getInventoryTools(this.clients));\n this.registerToolsFromModule(getDiscoveryTools(this.clients));\n this.registerToolsFromModule(getAssessmentTools(this.clients));\n this.registerToolsFromModule(getWorkflowTools(this.clients));\n this.registerToolsFromModule(getAdminTools(this.clients));\n }\n\n private registerToolsFromModule(tools: ToolDefinition[]): void {\n for (const tool of tools) {\n if (this.tools.has(tool.name)) {\n this.logger.warn('Duplicate tool name - skipping', { toolName: tool.name });\n continue;\n }\n this.tools.set(tool.name, tool);\n this.jsonSchemaCache.set(\n tool.name,\n toJsonSchemaCompat(tool.zodSchema as any) as Record<string, unknown>,\n );\n }\n }\n\n /**\n * Tool descriptors as a host would see them.\n *\n * The serving path builds descriptors in `buildMcpServer` rather than here, so\n * this method exists for callers embedding the registry directly. It still\n * resolves capability variants and carries `_meta`, because a descriptor list\n * that quietly disagreed with what the server actually serves would be worse\n * than no method at all.\n */\n getToolList(\n /** Capabilities of the host being served; defaults to a host with none */\n client: ClientCapabilityReport = EMPTY_CAPABILITY_REPORT,\n ): Array<{\n name: string;\n description: string;\n inputSchema: Record<string, unknown>;\n annotations: {\n readOnlyHint: boolean;\n destructiveHint: boolean;\n idempotentHint: boolean;\n };\n _meta?: Record<string, unknown>;\n }> {\n return expandToolsForClient(Array.from(this.tools.values()), client)\n .filter((tool) => isVisibleToModel(tool))\n .map((tool) => {\n const resourceUri = tool.ui?.resource.uri;\n return {\n name: tool.name,\n description: tool.description,\n inputSchema: this.jsonSchemaCache.get(tool.name) || { type: 'object', properties: {} },\n annotations: tool.annotations,\n ...(resourceUri && {\n _meta: { ui: { resourceUri }, 'ui/resourceUri': resourceUri },\n }),\n };\n });\n }\n\n getTool(name: string): ToolDefinition | undefined {\n return this.tools.get(name);\n }\n\n async executeTool(\n name: string,\n args: Record<string, unknown>,\n /** Capabilities of the host being served; defaults to a host with none */\n client: ClientCapabilityReport = EMPTY_CAPABILITY_REPORT,\n ): Promise<unknown> {\n const registered = this.tools.get(name);\n if (!registered) {\n throw new Error(`Unknown tool: ${name}`);\n }\n\n // Resolve so the handler that runs matches the descriptor getToolList emitted.\n const tool = resolveToolVariant(registered, client);\n\n const parseResult = tool.zodSchema.safeParse(args);\n if (!parseResult.success) {\n const issues = parseResult.error.issues\n .map((i: any) => `${i.path.join('.') || 'input'}: ${i.message}`)\n .join('; ');\n throw new Error(`Invalid input: ${issues}`);\n }\n\n try {\n return await tool.handler(parseResult.data);\n } catch (error) {\n return createErrorResult(error);\n }\n }\n\n getToolsByCategory(category: string): ToolDefinition[] {\n return Array.from(this.tools.values()).filter((tool) => tool.category === category);\n }\n\n getCategories(): string[] {\n const categories = new Set<string>();\n for (const tool of this.tools.values()) {\n categories.add(tool.category);\n }\n return Array.from(categories);\n }\n\n getAllTools(): ToolDefinition[] {\n return Array.from(this.tools.values());\n }\n\n getToolCount(): number {\n return this.tools.size;\n }\n}\n","import { ADMIN_OAUTH_SCOPES } from '@transcend-io/mcp-server-admin';\nimport { ASSESSMENT_OAUTH_SCOPES } from '@transcend-io/mcp-server-assessment';\nimport { mergeOAuthScopes } from '@transcend-io/mcp-server-base';\nimport { CONSENT_OAUTH_SCOPES } from '@transcend-io/mcp-server-consent';\nimport { DISCOVERY_OAUTH_SCOPES } from '@transcend-io/mcp-server-discovery';\nimport { DSR_OAUTH_SCOPES } from '@transcend-io/mcp-server-dsr';\nimport { INVENTORY_OAUTH_SCOPES } from '@transcend-io/mcp-server-inventory';\nimport { PREFERENCE_OAUTH_SCOPES } from '@transcend-io/mcp-server-preferences';\nimport { WORKFLOW_OAUTH_SCOPES } from '@transcend-io/mcp-server-workflows';\n\n/** OAuth scopes for the unified MCP server (offline_access added by base). */\nexport const UMBRELLA_OAUTH_SCOPES = mergeOAuthScopes(\n ADMIN_OAUTH_SCOPES,\n ASSESSMENT_OAUTH_SCOPES,\n CONSENT_OAUTH_SCOPES,\n DISCOVERY_OAUTH_SCOPES,\n DSR_OAUTH_SCOPES,\n INVENTORY_OAUTH_SCOPES,\n PREFERENCE_OAUTH_SCOPES,\n WORKFLOW_OAUTH_SCOPES,\n);\n"],"mappings":"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"}
1
+ {"version":3,"file":"oauth-scopes-Crj6iyN6.mjs","names":[],"sources":["../src/graphql-client.ts","../src/registry.ts","../src/oauth-scopes.ts"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@transcend-io/mcp",
3
- "version": "0.8.3",
3
+ "version": "0.9.1",
4
4
  "description": "Transcend MCP Server — unified server with all domain tools.",
5
5
  "homepage": "https://github.com/transcend-io/tools/tree/main/packages/mcp/mcp",
6
6
  "license": "Apache-2.0",
@@ -32,16 +32,16 @@
32
32
  "dependencies": {
33
33
  "@modelcontextprotocol/sdk": "^1.29.0",
34
34
  "zod": "^4.3.6",
35
- "@transcend-io/mcp-server-admin": "0.5.5",
36
- "@transcend-io/mcp-server-assessment": "0.5.5",
37
- "@transcend-io/mcp-server-base": "0.11.0",
38
- "@transcend-io/mcp-server-consent": "0.6.5",
39
- "@transcend-io/mcp-server-discovery": "0.5.5",
40
- "@transcend-io/mcp-server-docs": "0.3.8",
41
- "@transcend-io/mcp-server-dsr": "0.5.5",
42
- "@transcend-io/mcp-server-inventory": "0.5.5",
43
- "@transcend-io/mcp-server-preferences": "0.5.5",
44
- "@transcend-io/mcp-server-workflows": "0.5.5"
35
+ "@transcend-io/mcp-server-admin": "0.5.7",
36
+ "@transcend-io/mcp-server-assessment": "0.5.7",
37
+ "@transcend-io/mcp-server-base": "0.13.0",
38
+ "@transcend-io/mcp-server-consent": "0.6.7",
39
+ "@transcend-io/mcp-server-discovery": "0.5.7",
40
+ "@transcend-io/mcp-server-docs": "0.3.10",
41
+ "@transcend-io/mcp-server-dsr": "0.5.7",
42
+ "@transcend-io/mcp-server-inventory": "0.5.7",
43
+ "@transcend-io/mcp-server-preferences": "0.5.7",
44
+ "@transcend-io/mcp-server-workflows": "0.5.7"
45
45
  },
46
46
  "devDependencies": {
47
47
  "@arethetypeswrong/cli": "^0.18.2",
@@ -50,14 +50,14 @@
50
50
  "tsdown": "^0.21.2",
51
51
  "typescript": "^6.0.0",
52
52
  "vitest": "^4.0.18",
53
- "@transcend-io/privacy-types": "5.11.0"
53
+ "@transcend-io/privacy-types": "5.13.0"
54
54
  },
55
55
  "engines": {
56
56
  "node": ">=22.12.0"
57
57
  },
58
58
  "scripts": {
59
59
  "build": "tsdown",
60
- "test": "vitest run",
60
+ "test": "vitest run --config ../../../vitest.config.mcp.ts",
61
61
  "typecheck": "tsc -p tsconfig.json --noEmit",
62
62
  "check:exports": "attw --pack . --ignore-rules cjs-resolves-to-esm",
63
63
  "check:publint": "publint --level warning --strict --pack pnpm"