@transcend-io/mcp 0.6.12 → 0.7.0

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
@@ -1,9 +1,9 @@
1
1
  #!/usr/bin/env node
2
2
  import { n as ToolRegistry, r as TranscendGraphQLClient, t as UMBRELLA_OAUTH_SCOPES } from "./oauth-scopes-uzulgUw_.mjs";
3
- import { DEFAULT_SOMBRA_URL, SimpleLogger, TranscendRestClient, buildMcpServer, configureOAuthScopes, isOAuthModeEnabled, parseTransportArgs, resolveMcpDashboardUrl, resolveMcpGraphqlUrl, resolveStdioStartupAuthOptional, runMcpHttp } from "@transcend-io/mcp-server-base";
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.6.12";
6
+ var version = "0.7.0";
7
7
  //#endregion
8
8
  //#region src/server-instructions.ts
9
9
  /** MCP initialize instructions for the unified @transcend-io/mcp server. */
@@ -16,10 +16,14 @@ const buildServerOptions = {
16
16
  version: VERSION,
17
17
  instructions: UMBRELLA_DOCS_SERVER_INSTRUCTIONS
18
18
  };
19
- function createToolRegistry(auth, sombraUrl, graphqlUrl, dashboardUrl) {
19
+ function createToolRegistry(auth, sombraUrl, sombraCustomerKey, graphqlUrl, dashboardUrl) {
20
+ const graphqlClient = new TranscendGraphQLClient(auth, graphqlUrl);
20
21
  return new ToolRegistry({
21
- rest: new TranscendRestClient(auth, sombraUrl),
22
- graphql: new TranscendGraphQLClient(auth, graphqlUrl),
22
+ rest: createTranscendRestClient(auth, graphqlClient, {
23
+ sombraUrl,
24
+ sombraCustomerKey
25
+ }),
26
+ graphql: graphqlClient,
23
27
  dashboardUrl
24
28
  });
25
29
  }
@@ -28,7 +32,7 @@ async function main() {
28
32
  const isHttpTransport = config.transport === "http";
29
33
  SimpleLogger.setInfoToStdout(isHttpTransport);
30
34
  const logger = new SimpleLogger();
31
- const sombraUrl = process.env.SOMBRA_URL || DEFAULT_SOMBRA_URL;
35
+ const { sombraUrl, sombraCustomerKey } = readSombraEnvConfig();
32
36
  const dashboardUrl = resolveMcpDashboardUrl();
33
37
  const graphqlUrl = await resolveMcpGraphqlUrl(logger);
34
38
  if (isHttpTransport) {
@@ -37,12 +41,13 @@ async function main() {
37
41
  version: VERSION,
38
42
  createServer: async (auth) => {
39
43
  logger.info("Creating unified MCP server for new HTTP session...", {
40
- sombraUrl,
44
+ sombraUrl: sombraUrl ?? "(lazy GraphQL resolve)",
41
45
  graphqlUrl,
42
46
  dashboardUrl,
43
- authType: auth?.type ?? "none"
47
+ authType: auth?.type ?? "none",
48
+ hasSombraCustomerKey: Boolean(sombraCustomerKey)
44
49
  });
45
- const registry = createToolRegistry(auth, sombraUrl, graphqlUrl, dashboardUrl);
50
+ const registry = createToolRegistry(auth, sombraUrl, sombraCustomerKey, graphqlUrl, dashboardUrl);
46
51
  return buildMcpServer({
47
52
  ...buildServerOptions,
48
53
  tools: registry.getAllTools()
@@ -54,12 +59,12 @@ async function main() {
54
59
  configureOAuthScopes(UMBRELLA_OAUTH_SCOPES);
55
60
  const auth = resolveStdioStartupAuthOptional();
56
61
  logger.info("Initializing Transcend API clients...", {
57
- sombraUrl,
62
+ sombraUrl: sombraUrl ?? "(lazy GraphQL resolve)",
58
63
  graphqlUrl,
59
64
  dashboardUrl,
60
65
  authType: auth?.type ?? (isOAuthModeEnabled() ? "oauth-pending" : "none")
61
66
  });
62
- const toolRegistry = createToolRegistry(auth, sombraUrl, graphqlUrl, dashboardUrl);
67
+ const toolRegistry = createToolRegistry(auth, sombraUrl, sombraCustomerKey, graphqlUrl, dashboardUrl);
63
68
  logger.info(`Registered ${toolRegistry.getToolCount()} tools across ${toolRegistry.getCategories().length} categories`, {
64
69
  categories: toolRegistry.getCategories(),
65
70
  toolCount: toolRegistry.getToolCount()
@@ -75,7 +80,7 @@ async function main() {
75
80
  const transport = new StdioServerTransport();
76
81
  await server.connect(transport);
77
82
  logger.info("Transcend MCP Server started successfully", {
78
- sombraUrl,
83
+ sombraUrl: sombraUrl ?? "(lazy GraphQL resolve)",
79
84
  graphqlUrl,
80
85
  dashboardUrl,
81
86
  tools: toolRegistry.getToolCount()
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 DEFAULT_SOMBRA_URL,\n isOAuthModeEnabled,\n parseTransportArgs,\n resolveStdioStartupAuthOptional,\n configureOAuthScopes,\n resolveMcpDashboardUrl,\n resolveMcpGraphqlUrl,\n runMcpHttp,\n SimpleLogger,\n TranscendRestClient,\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,\n graphqlUrl: string,\n dashboardUrl: string,\n): ToolRegistry {\n const restClient = new TranscendRestClient(auth, sombraUrl);\n const graphqlClient = new TranscendGraphQLClient(auth, graphqlUrl);\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 = process.env.SOMBRA_URL || DEFAULT_SOMBRA_URL;\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,\n graphqlUrl,\n dashboardUrl,\n authType: auth?.type ?? 'none',\n });\n const registry = createToolRegistry(auth, sombraUrl, graphqlUrl, dashboardUrl);\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,\n graphqlUrl,\n dashboardUrl,\n authType: auth?.type ?? (isOAuthModeEnabled() ? 'oauth-pending' : 'none'),\n });\n\n const toolRegistry = createToolRegistry(auth, sombraUrl, graphqlUrl, dashboardUrl);\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,\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,YACA,cACc;AAGd,QAAO,IAAI,aAAa;EAAE,MAAM,IAFT,oBAAoB,MAAM,UAEP;EAAE,SAAS,IAD3B,uBAAuB,MAAM,WACW;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,YAAY,QAAQ,IAAI,cAAc;CAC5C,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;KACA;KACA;KACA,UAAU,MAAM,QAAQ;KACzB,CAAC;IACF,MAAM,WAAW,mBAAmB,MAAM,WAAW,YAAY,aAAa;AAC9E,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;EACA;EACA;EACA,UAAU,MAAM,SAAS,oBAAoB,GAAG,kBAAkB;EACnE,CAAC;CAEF,MAAM,eAAe,mBAAmB,MAAM,WAAW,YAAY,aAAa;AAElF,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;EACA;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"],"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@transcend-io/mcp",
3
- "version": "0.6.12",
3
+ "version": "0.7.0",
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.4.12",
36
- "@transcend-io/mcp-server-assessment": "0.4.12",
37
- "@transcend-io/mcp-server-base": "0.7.0",
38
- "@transcend-io/mcp-server-consent": "0.5.0",
39
- "@transcend-io/mcp-server-discovery": "0.4.12",
40
- "@transcend-io/mcp-server-docs": "0.3.4",
41
- "@transcend-io/mcp-server-dsr": "0.4.12",
42
- "@transcend-io/mcp-server-inventory": "0.4.12",
43
- "@transcend-io/mcp-server-preferences": "0.4.12",
44
- "@transcend-io/mcp-server-workflows": "0.4.12"
35
+ "@transcend-io/mcp-server-admin": "0.5.0",
36
+ "@transcend-io/mcp-server-assessment": "0.5.0",
37
+ "@transcend-io/mcp-server-base": "0.8.0",
38
+ "@transcend-io/mcp-server-consent": "0.6.0",
39
+ "@transcend-io/mcp-server-discovery": "0.5.0",
40
+ "@transcend-io/mcp-server-docs": "0.3.5",
41
+ "@transcend-io/mcp-server-dsr": "0.5.0",
42
+ "@transcend-io/mcp-server-inventory": "0.5.0",
43
+ "@transcend-io/mcp-server-preferences": "0.5.0",
44
+ "@transcend-io/mcp-server-workflows": "0.5.0"
45
45
  },
46
46
  "devDependencies": {
47
47
  "@arethetypeswrong/cli": "^0.18.2",
@@ -50,7 +50,7 @@
50
50
  "tsdown": "^0.21.2",
51
51
  "typescript": "^6.0.0",
52
52
  "vitest": "^4.0.18",
53
- "@transcend-io/privacy-types": "5.8.5"
53
+ "@transcend-io/privacy-types": "5.9.0"
54
54
  },
55
55
  "engines": {
56
56
  "node": ">=22.12.0"