@einlogic/mcp-fabric-api 1.0.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.
Files changed (107) hide show
  1. package/LICENSE +661 -0
  2. package/README.md +241 -0
  3. package/build/auth/oauth-handler.d.ts +14 -0
  4. package/build/auth/oauth-handler.d.ts.map +1 -0
  5. package/build/auth/oauth-handler.js +32 -0
  6. package/build/auth/oauth-handler.js.map +1 -0
  7. package/build/auth/token-manager.d.ts +15 -0
  8. package/build/auth/token-manager.d.ts.map +1 -0
  9. package/build/auth/token-manager.js +61 -0
  10. package/build/auth/token-manager.js.map +1 -0
  11. package/build/client/fabric-client.d.ts +24 -0
  12. package/build/client/fabric-client.d.ts.map +1 -0
  13. package/build/client/fabric-client.js +91 -0
  14. package/build/client/fabric-client.js.map +1 -0
  15. package/build/client/powerbi-client.d.ts +15 -0
  16. package/build/client/powerbi-client.d.ts.map +1 -0
  17. package/build/client/powerbi-client.js +62 -0
  18. package/build/client/powerbi-client.js.map +1 -0
  19. package/build/core/errors.d.ts +14 -0
  20. package/build/core/errors.d.ts.map +1 -0
  21. package/build/core/errors.js +33 -0
  22. package/build/core/errors.js.map +1 -0
  23. package/build/core/job-scheduler.d.ts +7 -0
  24. package/build/core/job-scheduler.d.ts.map +1 -0
  25. package/build/core/job-scheduler.js +20 -0
  26. package/build/core/job-scheduler.js.map +1 -0
  27. package/build/core/lro.d.ts +9 -0
  28. package/build/core/lro.d.ts.map +1 -0
  29. package/build/core/lro.js +35 -0
  30. package/build/core/lro.js.map +1 -0
  31. package/build/core/pagination.d.ts +3 -0
  32. package/build/core/pagination.d.ts.map +1 -0
  33. package/build/core/pagination.js +27 -0
  34. package/build/core/pagination.js.map +1 -0
  35. package/build/core/types.d.ts +86 -0
  36. package/build/core/types.d.ts.map +1 -0
  37. package/build/core/types.js +2 -0
  38. package/build/core/types.js.map +1 -0
  39. package/build/index.d.ts +3 -0
  40. package/build/index.d.ts.map +1 -0
  41. package/build/index.js +85 -0
  42. package/build/index.js.map +1 -0
  43. package/build/server.d.ts +7 -0
  44. package/build/server.d.ts.map +1 -0
  45. package/build/server.js +42 -0
  46. package/build/server.js.map +1 -0
  47. package/build/tools/auth.d.ts +4 -0
  48. package/build/tools/auth.d.ts.map +1 -0
  49. package/build/tools/auth.js +119 -0
  50. package/build/tools/auth.js.map +1 -0
  51. package/build/tools/dataflow.d.ts +4 -0
  52. package/build/tools/dataflow.d.ts.map +1 -0
  53. package/build/tools/dataflow.js +100 -0
  54. package/build/tools/dataflow.js.map +1 -0
  55. package/build/tools/eventhouse.d.ts +4 -0
  56. package/build/tools/eventhouse.d.ts.map +1 -0
  57. package/build/tools/eventhouse.js +80 -0
  58. package/build/tools/eventhouse.js.map +1 -0
  59. package/build/tools/eventstream.d.ts +4 -0
  60. package/build/tools/eventstream.d.ts.map +1 -0
  61. package/build/tools/eventstream.js +135 -0
  62. package/build/tools/eventstream.js.map +1 -0
  63. package/build/tools/graphql-api.d.ts +5 -0
  64. package/build/tools/graphql-api.d.ts.map +1 -0
  65. package/build/tools/graphql-api.js +124 -0
  66. package/build/tools/graphql-api.js.map +1 -0
  67. package/build/tools/lakehouse.d.ts +4 -0
  68. package/build/tools/lakehouse.d.ts.map +1 -0
  69. package/build/tools/lakehouse.js +138 -0
  70. package/build/tools/lakehouse.js.map +1 -0
  71. package/build/tools/notebook.d.ts +4 -0
  72. package/build/tools/notebook.d.ts.map +1 -0
  73. package/build/tools/notebook.js +186 -0
  74. package/build/tools/notebook.js.map +1 -0
  75. package/build/tools/pipeline.d.ts +4 -0
  76. package/build/tools/pipeline.d.ts.map +1 -0
  77. package/build/tools/pipeline.js +214 -0
  78. package/build/tools/pipeline.js.map +1 -0
  79. package/build/tools/reflex.d.ts +4 -0
  80. package/build/tools/reflex.d.ts.map +1 -0
  81. package/build/tools/reflex.js +101 -0
  82. package/build/tools/reflex.js.map +1 -0
  83. package/build/tools/report.d.ts +5 -0
  84. package/build/tools/report.d.ts.map +1 -0
  85. package/build/tools/report.js +191 -0
  86. package/build/tools/report.js.map +1 -0
  87. package/build/tools/semantic-model.d.ts +5 -0
  88. package/build/tools/semantic-model.d.ts.map +1 -0
  89. package/build/tools/semantic-model.js +225 -0
  90. package/build/tools/semantic-model.js.map +1 -0
  91. package/build/tools/sql-endpoint.d.ts +4 -0
  92. package/build/tools/sql-endpoint.d.ts.map +1 -0
  93. package/build/tools/sql-endpoint.js +44 -0
  94. package/build/tools/sql-endpoint.js.map +1 -0
  95. package/build/tools/workspace.d.ts +4 -0
  96. package/build/tools/workspace.d.ts.map +1 -0
  97. package/build/tools/workspace.js +84 -0
  98. package/build/tools/workspace.js.map +1 -0
  99. package/build/utils/base64.d.ts +3 -0
  100. package/build/utils/base64.d.ts.map +1 -0
  101. package/build/utils/base64.js +7 -0
  102. package/build/utils/base64.js.map +1 -0
  103. package/build/utils/tmdl.d.ts +13 -0
  104. package/build/utils/tmdl.d.ts.map +1 -0
  105. package/build/utils/tmdl.js +21 -0
  106. package/build/utils/tmdl.js.map +1 -0
  107. package/package.json +35 -0
@@ -0,0 +1,7 @@
1
+ import { FabricClient } from "../client/fabric-client.js";
2
+ import type { JobInstance } from "./types.js";
3
+ export declare function runOnDemandJob(client: FabricClient, workspaceId: string, itemId: string, jobType: string, executionData?: Record<string, unknown>): Promise<JobInstance>;
4
+ export declare function getJobInstance(client: FabricClient, workspaceId: string, itemId: string, jobInstanceId: string): Promise<JobInstance>;
5
+ export declare function cancelJobInstance(client: FabricClient, workspaceId: string, itemId: string, jobInstanceId: string): Promise<void>;
6
+ export declare function listJobInstances(client: FabricClient, workspaceId: string, itemId: string): Promise<JobInstance[]>;
7
+ //# sourceMappingURL=job-scheduler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"job-scheduler.d.ts","sourceRoot":"","sources":["../../src/core/job-scheduler.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAC1D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAE9C,wBAAsB,cAAc,CAClC,MAAM,EAAE,YAAY,EACpB,WAAW,EAAE,MAAM,EACnB,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,MAAM,EACf,aAAa,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GACtC,OAAO,CAAC,WAAW,CAAC,CAUtB;AAED,wBAAsB,cAAc,CAClC,MAAM,EAAE,YAAY,EACpB,WAAW,EAAE,MAAM,EACnB,MAAM,EAAE,MAAM,EACd,aAAa,EAAE,MAAM,GACpB,OAAO,CAAC,WAAW,CAAC,CAKtB;AAED,wBAAsB,iBAAiB,CACrC,MAAM,EAAE,YAAY,EACpB,WAAW,EAAE,MAAM,EACnB,MAAM,EAAE,MAAM,EACd,aAAa,EAAE,MAAM,GACpB,OAAO,CAAC,IAAI,CAAC,CAIf;AAED,wBAAsB,gBAAgB,CACpC,MAAM,EAAE,YAAY,EACpB,WAAW,EAAE,MAAM,EACnB,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,WAAW,EAAE,CAAC,CAKxB"}
@@ -0,0 +1,20 @@
1
+ export async function runOnDemandJob(client, workspaceId, itemId, jobType, executionData) {
2
+ const body = {};
3
+ if (executionData) {
4
+ body.executionData = executionData;
5
+ }
6
+ const response = await client.post(`/workspaces/${workspaceId}/items/${itemId}/jobs/instances?jobType=${jobType}`, Object.keys(body).length > 0 ? body : undefined);
7
+ return response.data;
8
+ }
9
+ export async function getJobInstance(client, workspaceId, itemId, jobInstanceId) {
10
+ const response = await client.get(`/workspaces/${workspaceId}/items/${itemId}/jobs/instances/${jobInstanceId}`);
11
+ return response.data;
12
+ }
13
+ export async function cancelJobInstance(client, workspaceId, itemId, jobInstanceId) {
14
+ await client.post(`/workspaces/${workspaceId}/items/${itemId}/jobs/instances/${jobInstanceId}/cancel`);
15
+ }
16
+ export async function listJobInstances(client, workspaceId, itemId) {
17
+ const response = await client.get(`/workspaces/${workspaceId}/items/${itemId}/jobs/instances`);
18
+ return response.data.value ?? [];
19
+ }
20
+ //# sourceMappingURL=job-scheduler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"job-scheduler.js","sourceRoot":"","sources":["../../src/core/job-scheduler.ts"],"names":[],"mappings":"AAGA,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,MAAoB,EACpB,WAAmB,EACnB,MAAc,EACd,OAAe,EACf,aAAuC;IAEvC,MAAM,IAAI,GAA4B,EAAE,CAAC;IACzC,IAAI,aAAa,EAAE,CAAC;QAClB,IAAI,CAAC,aAAa,GAAG,aAAa,CAAC;IACrC,CAAC;IACD,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,IAAI,CAChC,eAAe,WAAW,UAAU,MAAM,2BAA2B,OAAO,EAAE,EAC9E,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAChD,CAAC;IACF,OAAO,QAAQ,CAAC,IAAI,CAAC;AACvB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,MAAoB,EACpB,WAAmB,EACnB,MAAc,EACd,aAAqB;IAErB,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,GAAG,CAC/B,eAAe,WAAW,UAAU,MAAM,mBAAmB,aAAa,EAAE,CAC7E,CAAC;IACF,OAAO,QAAQ,CAAC,IAAI,CAAC;AACvB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACrC,MAAoB,EACpB,WAAmB,EACnB,MAAc,EACd,aAAqB;IAErB,MAAM,MAAM,CAAC,IAAI,CACf,eAAe,WAAW,UAAU,MAAM,mBAAmB,aAAa,SAAS,CACpF,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,MAAoB,EACpB,WAAmB,EACnB,MAAc;IAEd,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,GAAG,CAC/B,eAAe,WAAW,UAAU,MAAM,iBAAiB,CAC5D,CAAC;IACF,OAAO,QAAQ,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC;AACnC,CAAC"}
@@ -0,0 +1,9 @@
1
+ import { FabricClient } from "../client/fabric-client.js";
2
+ import type { OperationState } from "./types.js";
3
+ export interface LroOptions {
4
+ pollIntervalMs?: number;
5
+ timeoutMs?: number;
6
+ }
7
+ export declare function pollOperation(client: FabricClient, operationId: string, options?: LroOptions): Promise<OperationState>;
8
+ export declare function getOperationResult<T>(client: FabricClient, operationId: string): Promise<T | undefined>;
9
+ //# sourceMappingURL=lro.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lro.d.ts","sourceRoot":"","sources":["../../src/core/lro.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAE1D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAEjD,MAAM,WAAW,UAAU;IACzB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AASD,wBAAsB,aAAa,CACjC,MAAM,EAAE,YAAY,EACpB,WAAW,EAAE,MAAM,EACnB,OAAO,CAAC,EAAE,UAAU,GACnB,OAAO,CAAC,cAAc,CAAC,CA8BzB;AAED,wBAAsB,kBAAkB,CAAC,CAAC,EACxC,MAAM,EAAE,YAAY,EACpB,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,CAAC,GAAG,SAAS,CAAC,CAOxB"}
@@ -0,0 +1,35 @@
1
+ import { FabricApiError } from "./errors.js";
2
+ const DEFAULT_POLL_INTERVAL = 2000;
3
+ const DEFAULT_TIMEOUT = 300000; // 5 minutes
4
+ function sleep(ms) {
5
+ return new Promise((resolve) => setTimeout(resolve, ms));
6
+ }
7
+ export async function pollOperation(client, operationId, options) {
8
+ const pollInterval = options?.pollIntervalMs ?? DEFAULT_POLL_INTERVAL;
9
+ const timeout = options?.timeoutMs ?? DEFAULT_TIMEOUT;
10
+ const start = Date.now();
11
+ while (true) {
12
+ const response = await client.get(`/operations/${operationId}`);
13
+ const state = response.data;
14
+ if (state.status === "Succeeded" || state.status === "Failed" || state.status === "Cancelled") {
15
+ if (state.status === "Failed") {
16
+ throw new FabricApiError(state.error?.message ?? "Operation failed", 500, state.error?.errorCode);
17
+ }
18
+ return state;
19
+ }
20
+ if (Date.now() - start > timeout) {
21
+ throw new FabricApiError(`Operation ${operationId} timed out after ${timeout / 1000}s`, 408, "OperationTimeout");
22
+ }
23
+ await sleep(pollInterval);
24
+ }
25
+ }
26
+ export async function getOperationResult(client, operationId) {
27
+ try {
28
+ const response = await client.get(`/operations/${operationId}/result`);
29
+ return response.data;
30
+ }
31
+ catch {
32
+ return undefined;
33
+ }
34
+ }
35
+ //# sourceMappingURL=lro.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lro.js","sourceRoot":"","sources":["../../src/core/lro.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAQ7C,MAAM,qBAAqB,GAAG,IAAI,CAAC;AACnC,MAAM,eAAe,GAAG,MAAM,CAAC,CAAC,YAAY;AAE5C,SAAS,KAAK,CAAC,EAAU;IACvB,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC;AAC3D,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,aAAa,CACjC,MAAoB,EACpB,WAAmB,EACnB,OAAoB;IAEpB,MAAM,YAAY,GAAG,OAAO,EAAE,cAAc,IAAI,qBAAqB,CAAC;IACtE,MAAM,OAAO,GAAG,OAAO,EAAE,SAAS,IAAI,eAAe,CAAC;IACtD,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAEzB,OAAO,IAAI,EAAE,CAAC;QACZ,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,GAAG,CAAiB,eAAe,WAAW,EAAE,CAAC,CAAC;QAChF,MAAM,KAAK,GAAG,QAAQ,CAAC,IAAI,CAAC;QAE5B,IAAI,KAAK,CAAC,MAAM,KAAK,WAAW,IAAI,KAAK,CAAC,MAAM,KAAK,QAAQ,IAAI,KAAK,CAAC,MAAM,KAAK,WAAW,EAAE,CAAC;YAC9F,IAAI,KAAK,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;gBAC9B,MAAM,IAAI,cAAc,CACtB,KAAK,CAAC,KAAK,EAAE,OAAO,IAAI,kBAAkB,EAC1C,GAAG,EACH,KAAK,CAAC,KAAK,EAAE,SAAS,CACvB,CAAC;YACJ,CAAC;YACD,OAAO,KAAK,CAAC;QACf,CAAC;QAED,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,GAAG,OAAO,EAAE,CAAC;YACjC,MAAM,IAAI,cAAc,CACtB,aAAa,WAAW,oBAAoB,OAAO,GAAG,IAAI,GAAG,EAC7D,GAAG,EACH,kBAAkB,CACnB,CAAC;QACJ,CAAC;QAED,MAAM,KAAK,CAAC,YAAY,CAAC,CAAC;IAC5B,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACtC,MAAoB,EACpB,WAAmB;IAEnB,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,GAAG,CAAI,eAAe,WAAW,SAAS,CAAC,CAAC;QAC1E,OAAO,QAAQ,CAAC,IAAI,CAAC;IACvB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAC;IACnB,CAAC;AACH,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { FabricClient } from "../client/fabric-client.js";
2
+ export declare function paginateAll<T>(client: FabricClient, path: string, resultKey?: string): Promise<T[]>;
3
+ //# sourceMappingURL=pagination.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pagination.d.ts","sourceRoot":"","sources":["../../src/core/pagination.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAG1D,wBAAsB,WAAW,CAAC,CAAC,EACjC,MAAM,EAAE,YAAY,EACpB,IAAI,EAAE,MAAM,EACZ,SAAS,GAAE,MAAgB,GAC1B,OAAO,CAAC,CAAC,EAAE,CAAC,CA4Bd"}
@@ -0,0 +1,27 @@
1
+ export async function paginateAll(client, path, resultKey = "value") {
2
+ const all = [];
3
+ let currentPath = path;
4
+ while (currentPath) {
5
+ const isFullUrl = currentPath.startsWith("http");
6
+ const response = isFullUrl
7
+ ? await client.getFullUrl(currentPath)
8
+ : await client.get(currentPath);
9
+ const data = response.data;
10
+ const items = data[resultKey] ?? [];
11
+ all.push(...items);
12
+ const continuationUri = data.continuationUri;
13
+ const continuationToken = data.continuationToken;
14
+ if (continuationUri) {
15
+ currentPath = continuationUri;
16
+ }
17
+ else if (continuationToken) {
18
+ const separator = path.includes("?") ? "&" : "?";
19
+ currentPath = `${path}${separator}continuationToken=${continuationToken}`;
20
+ }
21
+ else {
22
+ currentPath = null;
23
+ }
24
+ }
25
+ return all;
26
+ }
27
+ //# sourceMappingURL=pagination.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pagination.js","sourceRoot":"","sources":["../../src/core/pagination.ts"],"names":[],"mappings":"AAGA,MAAM,CAAC,KAAK,UAAU,WAAW,CAC/B,MAAoB,EACpB,IAAY,EACZ,YAAoB,OAAO;IAE3B,MAAM,GAAG,GAAQ,EAAE,CAAC;IACpB,IAAI,WAAW,GAAkB,IAAI,CAAC;IAEtC,OAAO,WAAW,EAAE,CAAC;QACnB,MAAM,SAAS,GAAG,WAAW,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;QACjD,MAAM,QAAQ,GAAG,SAAS;YACxB,CAAC,CAAC,MAAM,MAAM,CAAC,UAAU,CAA0B,WAAW,CAAC;YAC/D,CAAC,CAAC,MAAM,MAAM,CAAC,GAAG,CAA0B,WAAW,CAAC,CAAC;QAE3D,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC;QAC3B,MAAM,KAAK,GAAI,IAAI,CAAC,SAAS,CAAS,IAAI,EAAE,CAAC;QAC7C,GAAG,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,CAAC;QAEnB,MAAM,eAAe,GAAG,IAAI,CAAC,eAA4C,CAAC;QAC1E,MAAM,iBAAiB,GAAG,IAAI,CAAC,iBAA8C,CAAC;QAE9E,IAAI,eAAe,EAAE,CAAC;YACpB,WAAW,GAAG,eAAe,CAAC;QAChC,CAAC;aAAM,IAAI,iBAAiB,EAAE,CAAC;YAC7B,MAAM,SAAS,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC;YACjD,WAAW,GAAG,GAAG,IAAI,GAAG,SAAS,qBAAqB,iBAAiB,EAAE,CAAC;QAC5E,CAAC;aAAM,CAAC;YACN,WAAW,GAAG,IAAI,CAAC;QACrB,CAAC;IACH,CAAC;IAED,OAAO,GAAG,CAAC;AACb,CAAC"}
@@ -0,0 +1,86 @@
1
+ export interface FabricItem {
2
+ id: string;
3
+ displayName: string;
4
+ description?: string;
5
+ type: string;
6
+ workspaceId: string;
7
+ }
8
+ export interface ItemDefinitionPart {
9
+ path: string;
10
+ payload: string;
11
+ payloadType: string;
12
+ }
13
+ export interface ItemDefinition {
14
+ definition: {
15
+ parts: ItemDefinitionPart[];
16
+ };
17
+ }
18
+ export interface OperationState {
19
+ id: string;
20
+ status: "NotStarted" | "Running" | "Succeeded" | "Failed" | "Cancelled" | "Undefined";
21
+ createdTimeUtc?: string;
22
+ lastUpdatedTimeUtc?: string;
23
+ error?: {
24
+ errorCode: string;
25
+ message: string;
26
+ };
27
+ percentComplete?: number;
28
+ }
29
+ export interface JobInstance {
30
+ id: string;
31
+ itemId: string;
32
+ jobType: string;
33
+ invokeType: string;
34
+ status: "NotStarted" | "InProgress" | "Completed" | "Failed" | "Cancelled" | "Deduped";
35
+ startTimeUtc?: string;
36
+ endTimeUtc?: string;
37
+ failureReason?: {
38
+ message: string;
39
+ errorCode: string;
40
+ };
41
+ }
42
+ export interface PaginatedResponse<T> {
43
+ value: T[];
44
+ continuationUri?: string | null;
45
+ continuationToken?: string | null;
46
+ }
47
+ export interface Workspace {
48
+ id: string;
49
+ displayName: string;
50
+ description?: string;
51
+ type: string;
52
+ capacityId?: string;
53
+ capacityAssignmentProgress?: string;
54
+ }
55
+ export interface LakehouseProperties {
56
+ oneLakeTablesPath?: string;
57
+ oneLakeFilesPath?: string;
58
+ sqlEndpointProperties?: {
59
+ id: string;
60
+ connectionString: string;
61
+ provisioningStatus: string;
62
+ };
63
+ }
64
+ export interface Lakehouse extends FabricItem {
65
+ properties?: LakehouseProperties;
66
+ }
67
+ export interface LakehouseTable {
68
+ name: string;
69
+ type: string;
70
+ location: string;
71
+ format: string;
72
+ }
73
+ export interface ScheduleConfig {
74
+ id?: string;
75
+ enabled: boolean;
76
+ configuration: {
77
+ type: string;
78
+ startDateTime: string;
79
+ endDateTime?: string;
80
+ localTimeZoneId?: string;
81
+ times?: string[];
82
+ interval?: number;
83
+ weekDays?: string[];
84
+ };
85
+ }
86
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/core/types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/core/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":""}
package/build/index.js ADDED
@@ -0,0 +1,85 @@
1
+ #!/usr/bin/env node
2
+ import { createServer } from "./server.js";
3
+ const transport = process.env.TRANSPORT ?? "stdio";
4
+ async function startStdio() {
5
+ const { StdioServerTransport } = await import("@modelcontextprotocol/sdk/server/stdio.js");
6
+ const server = createServer();
7
+ const stdioTransport = new StdioServerTransport();
8
+ await server.connect(stdioTransport);
9
+ console.error("MCP Fabric API server running on stdio");
10
+ }
11
+ async function startHttp() {
12
+ const { default: express } = await import("express");
13
+ const { StreamableHTTPServerTransport } = await import("@modelcontextprotocol/sdk/server/streamableHttp.js");
14
+ const { randomUUID } = await import("node:crypto");
15
+ const { getOAuthConfig, createOAuthMetadataHandler, createTokenValidationMiddleware, } = await import("./auth/oauth-handler.js");
16
+ const config = getOAuthConfig();
17
+ const port = parseInt(process.env.PORT ?? "3000", 10);
18
+ const app = express();
19
+ app.use(express.json());
20
+ // OAuth protected resource metadata
21
+ app.get("/.well-known/oauth-protected-resource", createOAuthMetadataHandler(config));
22
+ // Token validation middleware for MCP endpoint
23
+ app.use("/mcp", createTokenValidationMiddleware(config));
24
+ // Map to store transports by session ID
25
+ const transports = new Map();
26
+ // Handle MCP requests
27
+ app.post("/mcp", async (req, res) => {
28
+ const sessionId = req.headers["mcp-session-id"];
29
+ if (sessionId && transports.has(sessionId)) {
30
+ const sessionTransport = transports.get(sessionId);
31
+ await sessionTransport.handleRequest(req, res, req.body);
32
+ return;
33
+ }
34
+ const sessionTransport = new StreamableHTTPServerTransport({
35
+ sessionIdGenerator: () => randomUUID(),
36
+ onsessioninitialized: (newSessionId) => {
37
+ transports.set(newSessionId, sessionTransport);
38
+ },
39
+ });
40
+ sessionTransport.onclose = () => {
41
+ const sid = sessionTransport.sessionId;
42
+ if (sid)
43
+ transports.delete(sid);
44
+ };
45
+ const server = createServer();
46
+ await server.connect(sessionTransport);
47
+ await sessionTransport.handleRequest(req, res, req.body);
48
+ });
49
+ // Handle SSE for server-to-client notifications
50
+ app.get("/mcp", async (req, res) => {
51
+ const sessionId = req.headers["mcp-session-id"];
52
+ if (!sessionId || !transports.has(sessionId)) {
53
+ res.status(400).json({ error: "Invalid or missing session ID" });
54
+ return;
55
+ }
56
+ const sessionTransport = transports.get(sessionId);
57
+ await sessionTransport.handleRequest(req, res);
58
+ });
59
+ // Handle session deletion
60
+ app.delete("/mcp", async (req, res) => {
61
+ const sessionId = req.headers["mcp-session-id"];
62
+ if (!sessionId || !transports.has(sessionId)) {
63
+ res.status(400).json({ error: "Invalid or missing session ID" });
64
+ return;
65
+ }
66
+ const sessionTransport = transports.get(sessionId);
67
+ await sessionTransport.handleRequest(req, res);
68
+ });
69
+ app.listen(port, () => {
70
+ console.error(`MCP Fabric API server running on http://localhost:${port}/mcp`);
71
+ });
72
+ }
73
+ if (transport === "http") {
74
+ startHttp().catch((error) => {
75
+ console.error("Failed to start HTTP server:", error);
76
+ process.exit(1);
77
+ });
78
+ }
79
+ else {
80
+ startStdio().catch((error) => {
81
+ console.error("Failed to start stdio server:", error);
82
+ process.exit(1);
83
+ });
84
+ }
85
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ import { TokenManager } from "./auth/token-manager.js";
3
+ export interface CreateServerOptions {
4
+ tokenManager?: TokenManager;
5
+ }
6
+ export declare function createServer(options?: CreateServerOptions): McpServer;
7
+ //# sourceMappingURL=server.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAiBvD,MAAM,WAAW,mBAAmB;IAClC,YAAY,CAAC,EAAE,YAAY,CAAC;CAC7B;AAED,wBAAgB,YAAY,CAAC,OAAO,CAAC,EAAE,mBAAmB,GAAG,SAAS,CA0BrE"}
@@ -0,0 +1,42 @@
1
+ import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ import { TokenManager } from "./auth/token-manager.js";
3
+ import { FabricClient } from "./client/fabric-client.js";
4
+ import { PowerBIClient } from "./client/powerbi-client.js";
5
+ import { registerWorkspaceTools } from "./tools/workspace.js";
6
+ import { registerLakehouseTools } from "./tools/lakehouse.js";
7
+ import { registerNotebookTools } from "./tools/notebook.js";
8
+ import { registerPipelineTools } from "./tools/pipeline.js";
9
+ import { registerSemanticModelTools } from "./tools/semantic-model.js";
10
+ import { registerReportTools } from "./tools/report.js";
11
+ import { registerDataflowTools } from "./tools/dataflow.js";
12
+ import { registerEventhouseTools } from "./tools/eventhouse.js";
13
+ import { registerEventstreamTools } from "./tools/eventstream.js";
14
+ import { registerReflexTools } from "./tools/reflex.js";
15
+ import { registerGraphQLApiTools } from "./tools/graphql-api.js";
16
+ import { registerSqlEndpointTools } from "./tools/sql-endpoint.js";
17
+ import { registerAuthTools } from "./tools/auth.js";
18
+ export function createServer(options) {
19
+ const server = new McpServer({
20
+ name: "mcp-fabric-api",
21
+ version: "1.0.0",
22
+ });
23
+ const tokenManager = options?.tokenManager ?? new TokenManager();
24
+ const fabricClient = new FabricClient(tokenManager);
25
+ const powerBIClient = new PowerBIClient(tokenManager);
26
+ // Register all domain tools
27
+ registerWorkspaceTools(server, fabricClient);
28
+ registerLakehouseTools(server, fabricClient);
29
+ registerNotebookTools(server, fabricClient);
30
+ registerPipelineTools(server, fabricClient);
31
+ registerSemanticModelTools(server, fabricClient, powerBIClient);
32
+ registerReportTools(server, fabricClient, powerBIClient);
33
+ registerDataflowTools(server, fabricClient);
34
+ registerEventhouseTools(server, fabricClient);
35
+ registerEventstreamTools(server, fabricClient);
36
+ registerReflexTools(server, fabricClient);
37
+ registerGraphQLApiTools(server, fabricClient, powerBIClient);
38
+ registerSqlEndpointTools(server, fabricClient);
39
+ registerAuthTools(server, tokenManager);
40
+ return server;
41
+ }
42
+ //# sourceMappingURL=server.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AACvD,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AACzD,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAC3D,OAAO,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AAC9D,OAAO,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AAC9D,OAAO,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAC5D,OAAO,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAC5D,OAAO,EAAE,0BAA0B,EAAE,MAAM,2BAA2B,CAAC;AACvE,OAAO,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AACxD,OAAO,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAC5D,OAAO,EAAE,uBAAuB,EAAE,MAAM,uBAAuB,CAAC;AAChE,OAAO,EAAE,wBAAwB,EAAE,MAAM,wBAAwB,CAAC;AAClE,OAAO,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AACxD,OAAO,EAAE,uBAAuB,EAAE,MAAM,wBAAwB,CAAC;AACjE,OAAO,EAAE,wBAAwB,EAAE,MAAM,yBAAyB,CAAC;AACnE,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AAMpD,MAAM,UAAU,YAAY,CAAC,OAA6B;IACxD,MAAM,MAAM,GAAG,IAAI,SAAS,CAAC;QAC3B,IAAI,EAAE,gBAAgB;QACtB,OAAO,EAAE,OAAO;KACjB,CAAC,CAAC;IAEH,MAAM,YAAY,GAAG,OAAO,EAAE,YAAY,IAAI,IAAI,YAAY,EAAE,CAAC;IACjE,MAAM,YAAY,GAAG,IAAI,YAAY,CAAC,YAAY,CAAC,CAAC;IACpD,MAAM,aAAa,GAAG,IAAI,aAAa,CAAC,YAAY,CAAC,CAAC;IAEtD,4BAA4B;IAC5B,sBAAsB,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;IAC7C,sBAAsB,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;IAC7C,qBAAqB,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;IAC5C,qBAAqB,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;IAC5C,0BAA0B,CAAC,MAAM,EAAE,YAAY,EAAE,aAAa,CAAC,CAAC;IAChE,mBAAmB,CAAC,MAAM,EAAE,YAAY,EAAE,aAAa,CAAC,CAAC;IACzD,qBAAqB,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;IAC5C,uBAAuB,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;IAC9C,wBAAwB,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;IAC/C,mBAAmB,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;IAC1C,uBAAuB,CAAC,MAAM,EAAE,YAAY,EAAE,aAAa,CAAC,CAAC;IAC7D,wBAAwB,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;IAC/C,iBAAiB,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;IAExC,OAAO,MAAM,CAAC;AAChB,CAAC"}
@@ -0,0 +1,4 @@
1
+ import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ import { TokenManager } from "../auth/token-manager.js";
3
+ export declare function registerAuthTools(server: McpServer, tokenManager: TokenManager): void;
4
+ //# sourceMappingURL=auth.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../src/tools/auth.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAIpE,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAcxD,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,SAAS,EAAE,YAAY,EAAE,YAAY,QA4I9E"}
@@ -0,0 +1,119 @@
1
+ import { z } from "zod";
2
+ import { execFile } from "node:child_process";
3
+ import { promisify } from "node:util";
4
+ import { formatToolError } from "../core/errors.js";
5
+ const execFileAsync = promisify(execFile);
6
+ function decodeJwtPayload(token) {
7
+ const parts = token.split(".");
8
+ if (parts.length !== 3) {
9
+ throw new Error("Invalid JWT: expected 3 parts");
10
+ }
11
+ const payload = Buffer.from(parts[1], "base64url").toString("utf-8");
12
+ return JSON.parse(payload);
13
+ }
14
+ export function registerAuthTools(server, tokenManager) {
15
+ server.tool("auth_get_current_account", "Show the current Azure identity, tenant, and token expiry by decoding the Fabric JWT", {}, async () => {
16
+ try {
17
+ const token = await tokenManager.getFabricToken();
18
+ const claims = decodeJwtPayload(token);
19
+ const info = {
20
+ tenantId: claims.tid ?? tokenManager.getCurrentTenantId() ?? "unknown",
21
+ objectId: claims.oid ?? "unknown",
22
+ appId: claims.appid ?? claims.azp ?? "unknown",
23
+ upn: claims.upn ?? claims.unique_name ?? "unknown",
24
+ name: claims.name ?? "unknown",
25
+ expiresAt: claims.exp
26
+ ? new Date(claims.exp * 1000).toISOString()
27
+ : "unknown",
28
+ issuedAt: claims.iat
29
+ ? new Date(claims.iat * 1000).toISOString()
30
+ : "unknown",
31
+ scopes: claims.scp ?? claims.roles ?? "unknown",
32
+ };
33
+ return { content: [{ type: "text", text: JSON.stringify(info, null, 2) }] };
34
+ }
35
+ catch (error) {
36
+ return formatToolError(error);
37
+ }
38
+ });
39
+ server.tool("auth_list_available_accounts", "List Azure subscriptions and tenants the local user has logged into via 'az login'. Reads local CLI state only — does not query Entra ID or list other users.", {}, async () => {
40
+ try {
41
+ const { stdout } = await execFileAsync("az", ["account", "list", "--output", "json"], {
42
+ timeout: 15_000,
43
+ });
44
+ const accounts = JSON.parse(stdout);
45
+ // Group by tenant
46
+ const byTenant = new Map();
47
+ for (const acct of accounts) {
48
+ const tid = String(acct.tenantId ?? "unknown");
49
+ if (!byTenant.has(tid))
50
+ byTenant.set(tid, []);
51
+ byTenant.get(tid).push({
52
+ name: acct.name,
53
+ id: acct.id,
54
+ isDefault: acct.isDefault,
55
+ state: acct.state,
56
+ user: acct.user,
57
+ });
58
+ }
59
+ const result = Object.fromEntries(byTenant);
60
+ return { content: [{ type: "text", text: JSON.stringify(result, null, 2) }] };
61
+ }
62
+ catch (error) {
63
+ const message = error instanceof Error ? error.message : String(error);
64
+ if (message.includes("ENOENT") || message.includes("not found") || message.includes("not recognized")) {
65
+ return formatToolError(new Error("Azure CLI ('az') is not installed or not on PATH. Install it from https://aka.ms/installazurecli"));
66
+ }
67
+ if (message.includes("az login") || message.includes("Please run")) {
68
+ return formatToolError(new Error("Not logged in to Azure CLI. Run 'az login' first."));
69
+ }
70
+ return formatToolError(error);
71
+ }
72
+ });
73
+ server.tool("auth_switch_tenant", "Switch to a different Azure tenant. Acquires a new token to verify access; rolls back on failure.", {
74
+ tenantId: z.string().describe("The Azure AD tenant ID (GUID) to switch to"),
75
+ }, async ({ tenantId }) => {
76
+ const previousTenantId = tokenManager.getCurrentTenantId();
77
+ try {
78
+ tokenManager.switchTenant(tenantId);
79
+ // Verify the new tenant works by acquiring a token
80
+ const token = await tokenManager.getFabricToken();
81
+ const claims = decodeJwtPayload(token);
82
+ const info = {
83
+ switched: true,
84
+ previousTenantId: previousTenantId ?? "default",
85
+ newTenantId: tenantId,
86
+ identity: claims.upn ?? claims.unique_name ?? claims.oid ?? "unknown",
87
+ expiresAt: claims.exp
88
+ ? new Date(claims.exp * 1000).toISOString()
89
+ : "unknown",
90
+ };
91
+ return { content: [{ type: "text", text: JSON.stringify(info, null, 2) }] };
92
+ }
93
+ catch (error) {
94
+ // Rollback to previous tenant
95
+ tokenManager.switchTenant(previousTenantId);
96
+ const message = error instanceof Error ? error.message : String(error);
97
+ return formatToolError(new Error(`Failed to switch to tenant ${tenantId}. Rolled back to ${previousTenantId ?? "default"}.\nDetails: ${message}`));
98
+ }
99
+ });
100
+ server.tool("auth_clear_token_cache", "Clear cached authentication tokens to force re-acquisition on next API call", {}, async () => {
101
+ try {
102
+ tokenManager.clearCache();
103
+ return {
104
+ content: [{
105
+ type: "text",
106
+ text: JSON.stringify({
107
+ cleared: true,
108
+ currentTenantId: tokenManager.getCurrentTenantId() ?? "default",
109
+ message: "Token cache cleared. Next API call will acquire fresh tokens.",
110
+ }, null, 2),
111
+ }],
112
+ };
113
+ }
114
+ catch (error) {
115
+ return formatToolError(error);
116
+ }
117
+ });
118
+ }
119
+ //# sourceMappingURL=auth.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth.js","sourceRoot":"","sources":["../../src/tools/auth.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ import { FabricClient } from "../client/fabric-client.js";
3
+ export declare function registerDataflowTools(server: McpServer, fabricClient: FabricClient): void;
4
+ //# sourceMappingURL=dataflow.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dataflow.d.ts","sourceRoot":"","sources":["../../src/tools/dataflow.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAEpE,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAK1D,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,SAAS,EAAE,YAAY,EAAE,YAAY,QA6HlF"}