@einlogic/mcp-fabric-api 2.0.0 → 2.1.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.
Files changed (58) hide show
  1. package/build/server.d.ts.map +1 -1
  2. package/build/server.js +18 -2
  3. package/build/server.js.map +1 -1
  4. package/build/tools/copy-job.d.ts +5 -0
  5. package/build/tools/copy-job.d.ts.map +1 -0
  6. package/build/tools/copy-job.js +144 -0
  7. package/build/tools/copy-job.js.map +1 -0
  8. package/build/tools/dataflow.d.ts.map +1 -1
  9. package/build/tools/dataflow.js +35 -0
  10. package/build/tools/dataflow.js.map +1 -1
  11. package/build/tools/deployment-pipeline.d.ts +5 -0
  12. package/build/tools/deployment-pipeline.d.ts.map +1 -0
  13. package/build/tools/deployment-pipeline.js +170 -0
  14. package/build/tools/deployment-pipeline.js.map +1 -0
  15. package/build/tools/external-data-share.d.ts +5 -0
  16. package/build/tools/external-data-share.d.ts.map +1 -0
  17. package/build/tools/external-data-share.js +61 -0
  18. package/build/tools/external-data-share.js.map +1 -0
  19. package/build/tools/git-integration.d.ts +5 -0
  20. package/build/tools/git-integration.d.ts.map +1 -0
  21. package/build/tools/git-integration.js +159 -0
  22. package/build/tools/git-integration.js.map +1 -0
  23. package/build/tools/kql-database.d.ts +5 -0
  24. package/build/tools/kql-database.d.ts.map +1 -0
  25. package/build/tools/kql-database.js +154 -0
  26. package/build/tools/kql-database.js.map +1 -0
  27. package/build/tools/lakehouse.d.ts +2 -1
  28. package/build/tools/lakehouse.d.ts.map +1 -1
  29. package/build/tools/lakehouse.js +151 -6
  30. package/build/tools/lakehouse.js.map +1 -1
  31. package/build/tools/mirrored-database.d.ts +5 -0
  32. package/build/tools/mirrored-database.d.ts.map +1 -0
  33. package/build/tools/mirrored-database.js +199 -0
  34. package/build/tools/mirrored-database.js.map +1 -0
  35. package/build/tools/ml-experiment.d.ts +5 -0
  36. package/build/tools/ml-experiment.d.ts.map +1 -0
  37. package/build/tools/ml-experiment.js +83 -0
  38. package/build/tools/ml-experiment.js.map +1 -0
  39. package/build/tools/ml-model.d.ts +5 -0
  40. package/build/tools/ml-model.d.ts.map +1 -0
  41. package/build/tools/ml-model.js +83 -0
  42. package/build/tools/ml-model.js.map +1 -0
  43. package/build/tools/pipeline.d.ts.map +1 -1
  44. package/build/tools/pipeline.js +66 -0
  45. package/build/tools/pipeline.js.map +1 -1
  46. package/build/tools/reflex.d.ts.map +1 -1
  47. package/build/tools/reflex.js +34 -2
  48. package/build/tools/reflex.js.map +1 -1
  49. package/build/tools/report.d.ts.map +1 -1
  50. package/build/tools/report.js +38 -0
  51. package/build/tools/report.js.map +1 -1
  52. package/build/tools/semantic-model.d.ts.map +1 -1
  53. package/build/tools/semantic-model.js +37 -0
  54. package/build/tools/semantic-model.js.map +1 -1
  55. package/build/tools/warehouse.d.ts.map +1 -1
  56. package/build/tools/warehouse.js +66 -0
  57. package/build/tools/warehouse.js.map +1 -1
  58. package/package.json +1 -1
@@ -0,0 +1,159 @@
1
+ import { z } from "zod";
2
+ import { formatToolError } from "../core/errors.js";
3
+ import { pollOperation } from "../core/lro.js";
4
+ export function registerGitIntegrationTools(server, fabricClient, workspaceGuard) {
5
+ server.tool("git_get_connection", "Get the Git connection details for a workspace", { workspaceId: z.string().describe("The workspace ID") }, async ({ workspaceId }) => {
6
+ try {
7
+ const response = await fabricClient.get(`/workspaces/${workspaceId}/git/connection`);
8
+ return { content: [{ type: "text", text: JSON.stringify(response.data, null, 2) }] };
9
+ }
10
+ catch (error) {
11
+ return formatToolError(error);
12
+ }
13
+ });
14
+ server.tool("git_get_status", "Get the Git status of items in a workspace (shows sync state between workspace and remote)", { workspaceId: z.string().describe("The workspace ID") }, async ({ workspaceId }) => {
15
+ try {
16
+ const response = await fabricClient.get(`/workspaces/${workspaceId}/git/status`);
17
+ return { content: [{ type: "text", text: JSON.stringify(response.data, null, 2) }] };
18
+ }
19
+ catch (error) {
20
+ return formatToolError(error);
21
+ }
22
+ });
23
+ server.tool("git_connect", "Connect a workspace to a Git repository (Azure DevOps or GitHub)", {
24
+ workspaceId: z.string().describe("The workspace ID"),
25
+ gitProviderDetails: z.object({
26
+ gitProviderType: z.enum(["AzureDevOps", "GitHub"]).describe("Git provider type"),
27
+ organizationName: z.string().describe("Organization or account name"),
28
+ projectName: z.string().optional().describe("Project name (required for Azure DevOps)"),
29
+ repositoryName: z.string().describe("Repository name"),
30
+ branchName: z.string().describe("Branch name to connect to"),
31
+ directoryName: z.string().optional().describe("Directory path within the repository"),
32
+ }).describe("Git provider connection details"),
33
+ }, async ({ workspaceId, gitProviderDetails }) => {
34
+ try {
35
+ await workspaceGuard.assertWorkspaceAllowed(fabricClient, workspaceId);
36
+ const response = await fabricClient.post(`/workspaces/${workspaceId}/git/connect`, { gitProviderDetails });
37
+ return { content: [{ type: "text", text: response.data ? JSON.stringify(response.data, null, 2) : "Git connection established successfully" }] };
38
+ }
39
+ catch (error) {
40
+ return formatToolError(error);
41
+ }
42
+ });
43
+ server.tool("git_disconnect", "Disconnect a workspace from its Git repository", { workspaceId: z.string().describe("The workspace ID") }, async ({ workspaceId }) => {
44
+ try {
45
+ await workspaceGuard.assertWorkspaceAllowed(fabricClient, workspaceId);
46
+ await fabricClient.post(`/workspaces/${workspaceId}/git/disconnect`);
47
+ return { content: [{ type: "text", text: "Git connection disconnected successfully" }] };
48
+ }
49
+ catch (error) {
50
+ return formatToolError(error);
51
+ }
52
+ });
53
+ server.tool("git_initialize_connection", "Initialize a Git connection after connecting (long-running). Chooses whether workspace or remote content takes precedence.", {
54
+ workspaceId: z.string().describe("The workspace ID"),
55
+ initializationStrategy: z.enum(["PreferWorkspace", "PreferRemote"]).describe("Strategy for resolving conflicts during initialization"),
56
+ }, async ({ workspaceId, initializationStrategy }) => {
57
+ try {
58
+ await workspaceGuard.assertWorkspaceAllowed(fabricClient, workspaceId);
59
+ const response = await fabricClient.post(`/workspaces/${workspaceId}/git/initializeConnection`, { initializationStrategy });
60
+ if (response.lro) {
61
+ const state = await pollOperation(fabricClient, response.lro.operationId);
62
+ return { content: [{ type: "text", text: JSON.stringify(state, null, 2) }] };
63
+ }
64
+ return { content: [{ type: "text", text: response.data ? JSON.stringify(response.data, null, 2) : "Git connection initialized successfully" }] };
65
+ }
66
+ catch (error) {
67
+ return formatToolError(error);
68
+ }
69
+ });
70
+ server.tool("git_commit_to_git", "Commit workspace changes to the connected Git repository (long-running)", {
71
+ workspaceId: z.string().describe("The workspace ID"),
72
+ mode: z.enum(["All", "Selective"]).describe("Commit mode: All items or Selective"),
73
+ comment: z.string().optional().describe("Commit comment/message"),
74
+ items: z.array(z.object({
75
+ objectId: z.string().describe("The item object ID"),
76
+ logicalId: z.string().optional().describe("The item logical ID"),
77
+ })).optional().describe("Items to commit (required when mode is Selective)"),
78
+ workspaceHead: z.string().optional().describe("Workspace head object ID for concurrency control"),
79
+ }, async ({ workspaceId, mode, comment, items, workspaceHead }) => {
80
+ try {
81
+ await workspaceGuard.assertWorkspaceAllowed(fabricClient, workspaceId);
82
+ const body = { mode };
83
+ if (comment)
84
+ body.comment = comment;
85
+ if (items)
86
+ body.items = items;
87
+ if (workspaceHead)
88
+ body.workspaceHead = workspaceHead;
89
+ const response = await fabricClient.post(`/workspaces/${workspaceId}/git/commitToGit`, body);
90
+ if (response.lro) {
91
+ const state = await pollOperation(fabricClient, response.lro.operationId);
92
+ return { content: [{ type: "text", text: JSON.stringify(state, null, 2) }] };
93
+ }
94
+ return { content: [{ type: "text", text: response.data ? JSON.stringify(response.data, null, 2) : "Changes committed to Git successfully" }] };
95
+ }
96
+ catch (error) {
97
+ return formatToolError(error);
98
+ }
99
+ });
100
+ server.tool("git_update_from_git", "Update workspace from the connected Git repository (long-running)", {
101
+ workspaceId: z.string().describe("The workspace ID"),
102
+ remoteCommitHash: z.string().describe("The remote commit hash to update to"),
103
+ conflictResolution: z.object({
104
+ conflictResolutionType: z.enum(["Workspace", "Remote"]).describe("How to resolve conflicts"),
105
+ conflictResolutionPolicy: z.enum(["PreferWorkspace", "PreferRemote"]).optional().describe("Conflict resolution policy"),
106
+ }).optional().describe("Conflict resolution settings"),
107
+ workspaceHead: z.string().optional().describe("Workspace head object ID for concurrency control"),
108
+ options: z.object({
109
+ allowOverrideItems: z.boolean().optional().describe("Allow overriding workspace items"),
110
+ }).optional().describe("Update options"),
111
+ }, async ({ workspaceId, remoteCommitHash, conflictResolution, workspaceHead, options }) => {
112
+ try {
113
+ await workspaceGuard.assertWorkspaceAllowed(fabricClient, workspaceId);
114
+ const body = { remoteCommitHash };
115
+ if (conflictResolution)
116
+ body.conflictResolution = conflictResolution;
117
+ if (workspaceHead)
118
+ body.workspaceHead = workspaceHead;
119
+ if (options)
120
+ body.options = options;
121
+ const response = await fabricClient.post(`/workspaces/${workspaceId}/git/updateFromGit`, body);
122
+ if (response.lro) {
123
+ const state = await pollOperation(fabricClient, response.lro.operationId);
124
+ return { content: [{ type: "text", text: JSON.stringify(state, null, 2) }] };
125
+ }
126
+ return { content: [{ type: "text", text: response.data ? JSON.stringify(response.data, null, 2) : "Workspace updated from Git successfully" }] };
127
+ }
128
+ catch (error) {
129
+ return formatToolError(error);
130
+ }
131
+ });
132
+ server.tool("git_get_credentials", "Get the Git credentials configuration for the current user in a workspace", { workspaceId: z.string().describe("The workspace ID") }, async ({ workspaceId }) => {
133
+ try {
134
+ const response = await fabricClient.get(`/workspaces/${workspaceId}/git/myGitCredentials`);
135
+ return { content: [{ type: "text", text: JSON.stringify(response.data, null, 2) }] };
136
+ }
137
+ catch (error) {
138
+ return formatToolError(error);
139
+ }
140
+ });
141
+ server.tool("git_update_credentials", "Update the Git credentials configuration for the current user in a workspace", {
142
+ workspaceId: z.string().describe("The workspace ID"),
143
+ source: z.enum(["Automatic", "None", "ConfiguredConnection"]).describe("Credential source type"),
144
+ connectionId: z.string().optional().describe("Connection ID (required when source is ConfiguredConnection)"),
145
+ }, async ({ workspaceId, source, connectionId }) => {
146
+ try {
147
+ await workspaceGuard.assertWorkspaceAllowed(fabricClient, workspaceId);
148
+ const body = { source };
149
+ if (connectionId)
150
+ body.connectionId = connectionId;
151
+ const response = await fabricClient.patch(`/workspaces/${workspaceId}/git/myGitCredentials`, body);
152
+ return { content: [{ type: "text", text: response.data ? JSON.stringify(response.data, null, 2) : "Git credentials updated successfully" }] };
153
+ }
154
+ catch (error) {
155
+ return formatToolError(error);
156
+ }
157
+ });
158
+ }
159
+ //# sourceMappingURL=git-integration.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"git-integration.js","sourceRoot":"","sources":["../../src/tools/git-integration.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAG/C,MAAM,UAAU,2BAA2B,CAAC,MAAiB,EAAE,YAA0B,EAAE,cAA8B;IACvH,MAAM,CAAC,IAAI,CACT,oBAAoB,EACpB,gDAAgD,EAChD,EAAE,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,kBAAkB,CAAC,EAAE,EACxD,KAAK,EAAE,EAAE,WAAW,EAAE,EAAE,EAAE;QACxB,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,YAAY,CAAC,GAAG,CAAC,eAAe,WAAW,iBAAiB,CAAC,CAAC;YACrF,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;QACvF,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,eAAe,CAAC,KAAK,CAAC,CAAC;QAChC,CAAC;IACH,CAAC,CACF,CAAC;IAEF,MAAM,CAAC,IAAI,CACT,gBAAgB,EAChB,4FAA4F,EAC5F,EAAE,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,kBAAkB,CAAC,EAAE,EACxD,KAAK,EAAE,EAAE,WAAW,EAAE,EAAE,EAAE;QACxB,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,YAAY,CAAC,GAAG,CAAC,eAAe,WAAW,aAAa,CAAC,CAAC;YACjF,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;QACvF,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,eAAe,CAAC,KAAK,CAAC,CAAC;QAChC,CAAC;IACH,CAAC,CACF,CAAC;IAEF,MAAM,CAAC,IAAI,CACT,aAAa,EACb,kEAAkE,EAClE;QACE,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,kBAAkB,CAAC;QACpD,kBAAkB,EAAE,CAAC,CAAC,MAAM,CAAC;YAC3B,eAAe,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,aAAa,EAAE,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,mBAAmB,CAAC;YAChF,gBAAgB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,8BAA8B,CAAC;YACrE,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,0CAA0C,CAAC;YACvF,cAAc,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,iBAAiB,CAAC;YACtD,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,2BAA2B,CAAC;YAC5D,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,sCAAsC,CAAC;SACtF,CAAC,CAAC,QAAQ,CAAC,iCAAiC,CAAC;KAC/C,EACD,KAAK,EAAE,EAAE,WAAW,EAAE,kBAAkB,EAAE,EAAE,EAAE;QAC5C,IAAI,CAAC;YACH,MAAM,cAAc,CAAC,sBAAsB,CAAC,YAAY,EAAE,WAAW,CAAC,CAAC;YACvE,MAAM,QAAQ,GAAG,MAAM,YAAY,CAAC,IAAI,CAAC,eAAe,WAAW,cAAc,EAAE,EAAE,kBAAkB,EAAE,CAAC,CAAC;YAC3G,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,yCAAyC,EAAE,CAAC,EAAE,CAAC;QACnJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,eAAe,CAAC,KAAK,CAAC,CAAC;QAChC,CAAC;IACH,CAAC,CACF,CAAC;IAEF,MAAM,CAAC,IAAI,CACT,gBAAgB,EAChB,gDAAgD,EAChD,EAAE,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,kBAAkB,CAAC,EAAE,EACxD,KAAK,EAAE,EAAE,WAAW,EAAE,EAAE,EAAE;QACxB,IAAI,CAAC;YACH,MAAM,cAAc,CAAC,sBAAsB,CAAC,YAAY,EAAE,WAAW,CAAC,CAAC;YACvE,MAAM,YAAY,CAAC,IAAI,CAAC,eAAe,WAAW,iBAAiB,CAAC,CAAC;YACrE,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,0CAA0C,EAAE,CAAC,EAAE,CAAC;QAC3F,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,eAAe,CAAC,KAAK,CAAC,CAAC;QAChC,CAAC;IACH,CAAC,CACF,CAAC;IAEF,MAAM,CAAC,IAAI,CACT,2BAA2B,EAC3B,4HAA4H,EAC5H;QACE,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,kBAAkB,CAAC;QACpD,sBAAsB,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,iBAAiB,EAAE,cAAc,CAAC,CAAC,CAAC,QAAQ,CAAC,wDAAwD,CAAC;KACvI,EACD,KAAK,EAAE,EAAE,WAAW,EAAE,sBAAsB,EAAE,EAAE,EAAE;QAChD,IAAI,CAAC;YACH,MAAM,cAAc,CAAC,sBAAsB,CAAC,YAAY,EAAE,WAAW,CAAC,CAAC;YACvE,MAAM,QAAQ,GAAG,MAAM,YAAY,CAAC,IAAI,CAAC,eAAe,WAAW,2BAA2B,EAAE,EAAE,sBAAsB,EAAE,CAAC,CAAC;YAC5H,IAAI,QAAQ,CAAC,GAAG,EAAE,CAAC;gBACjB,MAAM,KAAK,GAAG,MAAM,aAAa,CAAC,YAAY,EAAE,QAAQ,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;gBAC1E,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;YAC/E,CAAC;YACD,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,yCAAyC,EAAE,CAAC,EAAE,CAAC;QACnJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,eAAe,CAAC,KAAK,CAAC,CAAC;QAChC,CAAC;IACH,CAAC,CACF,CAAC;IAEF,MAAM,CAAC,IAAI,CACT,mBAAmB,EACnB,yEAAyE,EACzE;QACE,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,kBAAkB,CAAC;QACpD,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC,CAAC,QAAQ,CAAC,qCAAqC,CAAC;QAClF,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,wBAAwB,CAAC;QACjE,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC;YACtB,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,oBAAoB,CAAC;YACnD,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,qBAAqB,CAAC;SACjE,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,mDAAmD,CAAC;QAC5E,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,kDAAkD,CAAC;KAClG,EACD,KAAK,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,aAAa,EAAE,EAAE,EAAE;QAC7D,IAAI,CAAC;YACH,MAAM,cAAc,CAAC,sBAAsB,CAAC,YAAY,EAAE,WAAW,CAAC,CAAC;YACvE,MAAM,IAAI,GAA4B,EAAE,IAAI,EAAE,CAAC;YAC/C,IAAI,OAAO;gBAAE,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;YACpC,IAAI,KAAK;gBAAE,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;YAC9B,IAAI,aAAa;gBAAE,IAAI,CAAC,aAAa,GAAG,aAAa,CAAC;YACtD,MAAM,QAAQ,GAAG,MAAM,YAAY,CAAC,IAAI,CAAC,eAAe,WAAW,kBAAkB,EAAE,IAAI,CAAC,CAAC;YAC7F,IAAI,QAAQ,CAAC,GAAG,EAAE,CAAC;gBACjB,MAAM,KAAK,GAAG,MAAM,aAAa,CAAC,YAAY,EAAE,QAAQ,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;gBAC1E,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;YAC/E,CAAC;YACD,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,uCAAuC,EAAE,CAAC,EAAE,CAAC;QACjJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,eAAe,CAAC,KAAK,CAAC,CAAC;QAChC,CAAC;IACH,CAAC,CACF,CAAC;IAEF,MAAM,CAAC,IAAI,CACT,qBAAqB,EACrB,mEAAmE,EACnE;QACE,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,kBAAkB,CAAC;QACpD,gBAAgB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,qCAAqC,CAAC;QAC5E,kBAAkB,EAAE,CAAC,CAAC,MAAM,CAAC;YAC3B,sBAAsB,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,0BAA0B,CAAC;YAC5F,wBAAwB,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,iBAAiB,EAAE,cAAc,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,4BAA4B,CAAC;SACxH,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,8BAA8B,CAAC;QACtD,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,kDAAkD,CAAC;QACjG,OAAO,EAAE,CAAC,CAAC,MAAM,CAAC;YAChB,kBAAkB,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,kCAAkC,CAAC;SACxF,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,gBAAgB,CAAC;KACzC,EACD,KAAK,EAAE,EAAE,WAAW,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,aAAa,EAAE,OAAO,EAAE,EAAE,EAAE;QACtF,IAAI,CAAC;YACH,MAAM,cAAc,CAAC,sBAAsB,CAAC,YAAY,EAAE,WAAW,CAAC,CAAC;YACvE,MAAM,IAAI,GAA4B,EAAE,gBAAgB,EAAE,CAAC;YAC3D,IAAI,kBAAkB;gBAAE,IAAI,CAAC,kBAAkB,GAAG,kBAAkB,CAAC;YACrE,IAAI,aAAa;gBAAE,IAAI,CAAC,aAAa,GAAG,aAAa,CAAC;YACtD,IAAI,OAAO;gBAAE,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;YACpC,MAAM,QAAQ,GAAG,MAAM,YAAY,CAAC,IAAI,CAAC,eAAe,WAAW,oBAAoB,EAAE,IAAI,CAAC,CAAC;YAC/F,IAAI,QAAQ,CAAC,GAAG,EAAE,CAAC;gBACjB,MAAM,KAAK,GAAG,MAAM,aAAa,CAAC,YAAY,EAAE,QAAQ,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;gBAC1E,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;YAC/E,CAAC;YACD,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,yCAAyC,EAAE,CAAC,EAAE,CAAC;QACnJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,eAAe,CAAC,KAAK,CAAC,CAAC;QAChC,CAAC;IACH,CAAC,CACF,CAAC;IAEF,MAAM,CAAC,IAAI,CACT,qBAAqB,EACrB,2EAA2E,EAC3E,EAAE,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,kBAAkB,CAAC,EAAE,EACxD,KAAK,EAAE,EAAE,WAAW,EAAE,EAAE,EAAE;QACxB,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,YAAY,CAAC,GAAG,CAAC,eAAe,WAAW,uBAAuB,CAAC,CAAC;YAC3F,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;QACvF,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,eAAe,CAAC,KAAK,CAAC,CAAC;QAChC,CAAC;IACH,CAAC,CACF,CAAC;IAEF,MAAM,CAAC,IAAI,CACT,wBAAwB,EACxB,8EAA8E,EAC9E;QACE,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,kBAAkB,CAAC;QACpD,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE,MAAM,EAAE,sBAAsB,CAAC,CAAC,CAAC,QAAQ,CAAC,wBAAwB,CAAC;QAChG,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,8DAA8D,CAAC;KAC7G,EACD,KAAK,EAAE,EAAE,WAAW,EAAE,MAAM,EAAE,YAAY,EAAE,EAAE,EAAE;QAC9C,IAAI,CAAC;YACH,MAAM,cAAc,CAAC,sBAAsB,CAAC,YAAY,EAAE,WAAW,CAAC,CAAC;YACvE,MAAM,IAAI,GAA4B,EAAE,MAAM,EAAE,CAAC;YACjD,IAAI,YAAY;gBAAE,IAAI,CAAC,YAAY,GAAG,YAAY,CAAC;YACnD,MAAM,QAAQ,GAAG,MAAM,YAAY,CAAC,KAAK,CAAC,eAAe,WAAW,uBAAuB,EAAE,IAAI,CAAC,CAAC;YACnG,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,sCAAsC,EAAE,CAAC,EAAE,CAAC;QAChJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,eAAe,CAAC,KAAK,CAAC,CAAC;QAChC,CAAC;IACH,CAAC,CACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,5 @@
1
+ import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ import { FabricClient } from "../client/fabric-client.js";
3
+ import { WorkspaceGuard } from "../core/workspace-guard.js";
4
+ export declare function registerKqlDatabaseTools(server: McpServer, fabricClient: FabricClient, workspaceGuard: WorkspaceGuard): void;
5
+ //# sourceMappingURL=kql-database.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"kql-database.d.ts","sourceRoot":"","sources":["../../src/tools/kql-database.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAEpE,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAK1D,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAI5D,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,SAAS,EAAE,YAAY,EAAE,YAAY,EAAE,cAAc,EAAE,cAAc,QAuLrH"}
@@ -0,0 +1,154 @@
1
+ import { z } from "zod";
2
+ import { formatToolError } from "../core/errors.js";
3
+ import { paginateAll } from "../core/pagination.js";
4
+ import { pollOperation, getOperationResult } from "../core/lro.js";
5
+ import { encodeBase64, decodeBase64 } from "../utils/base64.js";
6
+ import { resolveFilesOrDirectory, writeFilesToDirectory } from "../utils/file-utils.js";
7
+ export function registerKqlDatabaseTools(server, fabricClient, workspaceGuard) {
8
+ server.tool("kql_database_list", "List all KQL databases in a workspace", { workspaceId: z.string().describe("The workspace ID") }, async ({ workspaceId }) => {
9
+ try {
10
+ const items = await paginateAll(fabricClient, `/workspaces/${workspaceId}/kqlDatabases`);
11
+ return { content: [{ type: "text", text: JSON.stringify(items, null, 2) }] };
12
+ }
13
+ catch (error) {
14
+ return formatToolError(error);
15
+ }
16
+ });
17
+ server.tool("kql_database_get", "Get details of a specific KQL database", {
18
+ workspaceId: z.string().describe("The workspace ID"),
19
+ kqlDatabaseId: z.string().describe("The KQL database ID"),
20
+ }, async ({ workspaceId, kqlDatabaseId }) => {
21
+ try {
22
+ const response = await fabricClient.get(`/workspaces/${workspaceId}/kqlDatabases/${kqlDatabaseId}`);
23
+ return { content: [{ type: "text", text: JSON.stringify(response.data, null, 2) }] };
24
+ }
25
+ catch (error) {
26
+ return formatToolError(error);
27
+ }
28
+ });
29
+ server.tool("kql_database_create", "Create a new KQL database in a workspace (long-running). Requires a parent eventhouse.", {
30
+ workspaceId: z.string().describe("The workspace ID"),
31
+ displayName: z.string().describe("Display name for the KQL database"),
32
+ description: z.string().optional().describe("Description of the KQL database"),
33
+ databaseType: z.enum(["ReadWrite", "ReadOnlyShortcut"]).describe("Database type"),
34
+ parentEventhouseItemId: z.string().describe("Parent eventhouse item ID"),
35
+ }, async ({ workspaceId, displayName, description, databaseType, parentEventhouseItemId }) => {
36
+ try {
37
+ await workspaceGuard.assertWorkspaceAllowed(fabricClient, workspaceId);
38
+ const body = {
39
+ displayName,
40
+ creationPayload: { databaseType, parentEventhouseItemId },
41
+ };
42
+ if (description)
43
+ body.description = description;
44
+ const response = await fabricClient.post(`/workspaces/${workspaceId}/kqlDatabases`, body);
45
+ if (response.lro) {
46
+ const state = await pollOperation(fabricClient, response.lro.operationId);
47
+ const result = await getOperationResult(fabricClient, response.lro.operationId);
48
+ return { content: [{ type: "text", text: JSON.stringify({ operation: state, item: result ?? response.data }, null, 2) }] };
49
+ }
50
+ return { content: [{ type: "text", text: JSON.stringify(response.data, null, 2) }] };
51
+ }
52
+ catch (error) {
53
+ return formatToolError(error);
54
+ }
55
+ });
56
+ server.tool("kql_database_update", "Update a KQL database's name or description", {
57
+ workspaceId: z.string().describe("The workspace ID"),
58
+ kqlDatabaseId: z.string().describe("The KQL database ID"),
59
+ displayName: z.string().optional().describe("New display name"),
60
+ description: z.string().optional().describe("New description"),
61
+ }, async ({ workspaceId, kqlDatabaseId, displayName, description }) => {
62
+ try {
63
+ await workspaceGuard.assertWorkspaceAllowed(fabricClient, workspaceId);
64
+ const body = {};
65
+ if (displayName !== undefined)
66
+ body.displayName = displayName;
67
+ if (description !== undefined)
68
+ body.description = description;
69
+ const response = await fabricClient.patch(`/workspaces/${workspaceId}/kqlDatabases/${kqlDatabaseId}`, body);
70
+ return { content: [{ type: "text", text: JSON.stringify(response.data, null, 2) }] };
71
+ }
72
+ catch (error) {
73
+ return formatToolError(error);
74
+ }
75
+ });
76
+ server.tool("kql_database_delete", "Delete a KQL database", {
77
+ workspaceId: z.string().describe("The workspace ID"),
78
+ kqlDatabaseId: z.string().describe("The KQL database ID"),
79
+ }, async ({ workspaceId, kqlDatabaseId }) => {
80
+ try {
81
+ await workspaceGuard.assertWorkspaceAllowed(fabricClient, workspaceId);
82
+ await fabricClient.delete(`/workspaces/${workspaceId}/kqlDatabases/${kqlDatabaseId}`);
83
+ return { content: [{ type: "text", text: `KQL database ${kqlDatabaseId} deleted successfully` }] };
84
+ }
85
+ catch (error) {
86
+ return formatToolError(error);
87
+ }
88
+ });
89
+ server.tool("kql_database_get_definition", "Get the definition of a KQL database (long-running). Writes definition files to the specified output directory.", {
90
+ workspaceId: z.string().describe("The workspace ID"),
91
+ kqlDatabaseId: z.string().describe("The KQL database ID"),
92
+ outputDirectoryPath: z.string().describe("Directory path where definition files will be written"),
93
+ }, async ({ workspaceId, kqlDatabaseId, outputDirectoryPath }) => {
94
+ try {
95
+ const response = await fabricClient.post(`/workspaces/${workspaceId}/kqlDatabases/${kqlDatabaseId}/getDefinition`);
96
+ let parts;
97
+ if (response.lro) {
98
+ await pollOperation(fabricClient, response.lro.operationId);
99
+ const result = await getOperationResult(fabricClient, response.lro.operationId);
100
+ if (result?.definition) {
101
+ parts = result.definition.parts;
102
+ }
103
+ }
104
+ if (!parts && response.data?.definition) {
105
+ parts = response.data.definition.parts;
106
+ }
107
+ if (!parts) {
108
+ return { content: [{ type: "text", text: "No definition returned from Fabric API" }], isError: true };
109
+ }
110
+ const files = parts.map((part) => ({
111
+ path: part.path,
112
+ content: part.payloadType === "InlineBase64" ? decodeBase64(part.payload) : part.payload,
113
+ }));
114
+ const written = await writeFilesToDirectory(outputDirectoryPath, files);
115
+ return { content: [{ type: "text", text: `KQL database definition written to: ${outputDirectoryPath}\nFiles:\n${written.map((f) => ` ${f}`).join("\n")}` }] };
116
+ }
117
+ catch (error) {
118
+ return formatToolError(error);
119
+ }
120
+ });
121
+ server.tool("kql_database_update_definition", "Update a KQL database's definition (long-running). Accepts definition parts inline or a directory path.", {
122
+ workspaceId: z.string().describe("The workspace ID"),
123
+ kqlDatabaseId: z.string().describe("The KQL database ID"),
124
+ parts: z.array(z.object({
125
+ path: z.string().describe("The definition part path"),
126
+ content: z.string().describe("The file content as a string"),
127
+ })).optional().describe("Array of definition parts to upload"),
128
+ partsDirectoryPath: z.string().optional().describe("Path to a directory containing definition files"),
129
+ }, async ({ workspaceId, kqlDatabaseId, parts, partsDirectoryPath }) => {
130
+ try {
131
+ await workspaceGuard.assertWorkspaceAllowed(fabricClient, workspaceId);
132
+ const resolved = await resolveFilesOrDirectory(parts, partsDirectoryPath);
133
+ const body = {
134
+ definition: {
135
+ parts: resolved.map((part) => ({
136
+ path: part.path,
137
+ payload: encodeBase64(part.content),
138
+ payloadType: "InlineBase64",
139
+ })),
140
+ },
141
+ };
142
+ const response = await fabricClient.post(`/workspaces/${workspaceId}/kqlDatabases/${kqlDatabaseId}/updateDefinition`, body);
143
+ if (response.lro) {
144
+ const state = await pollOperation(fabricClient, response.lro.operationId);
145
+ return { content: [{ type: "text", text: JSON.stringify(state, null, 2) }] };
146
+ }
147
+ return { content: [{ type: "text", text: "KQL database definition updated successfully" }] };
148
+ }
149
+ catch (error) {
150
+ return formatToolError(error);
151
+ }
152
+ });
153
+ }
154
+ //# sourceMappingURL=kql-database.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"kql-database.js","sourceRoot":"","sources":["../../src/tools/kql-database.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,6 @@
1
1
  import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
2
  import { FabricClient } from "../client/fabric-client.js";
3
+ import { SqlClient } from "../client/sql-client.js";
3
4
  import { WorkspaceGuard } from "../core/workspace-guard.js";
4
- export declare function registerLakehouseTools(server: McpServer, fabricClient: FabricClient, workspaceGuard: WorkspaceGuard): void;
5
+ export declare function registerLakehouseTools(server: McpServer, fabricClient: FabricClient, sqlClient: SqlClient, workspaceGuard: WorkspaceGuard): void;
5
6
  //# sourceMappingURL=lakehouse.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"lakehouse.d.ts","sourceRoot":"","sources":["../../src/tools/lakehouse.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAEpE,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAI1D,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAE5D,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,SAAS,EAAE,YAAY,EAAE,YAAY,EAAE,cAAc,EAAE,cAAc,QA4QnH"}
1
+ {"version":3,"file":"lakehouse.d.ts","sourceRoot":"","sources":["../../src/tools/lakehouse.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAEpE,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAC1D,OAAO,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AAKpD,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAS5D,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,SAAS,EAAE,YAAY,EAAE,YAAY,EAAE,SAAS,EAAE,SAAS,EAAE,cAAc,EAAE,cAAc,QAiczI"}
@@ -1,8 +1,14 @@
1
1
  import { z } from "zod";
2
- import { formatToolError } from "../core/errors.js";
2
+ import { FabricApiError, formatToolError } from "../core/errors.js";
3
3
  import { paginateAll } from "../core/pagination.js";
4
- import { pollOperation } from "../core/lro.js";
5
- export function registerLakehouseTools(server, fabricClient, workspaceGuard) {
4
+ import { pollOperation, getOperationResult } from "../core/lro.js";
5
+ import { encodeBase64, decodeBase64 } from "../utils/base64.js";
6
+ import { resolveFilesOrDirectory, writeFilesToDirectory } from "../utils/file-utils.js";
7
+ function isSchemaEnabledError(error) {
8
+ return error instanceof FabricApiError &&
9
+ error.errorCode === "UnsupportedOperationForSchemasEnabledLakehouse";
10
+ }
11
+ export function registerLakehouseTools(server, fabricClient, sqlClient, workspaceGuard) {
6
12
  server.tool("lakehouse_list", "List all lakehouses in a workspace", { workspaceId: z.string().describe("The workspace ID") }, async ({ workspaceId }) => {
7
13
  try {
8
14
  const lakehouses = await paginateAll(fabricClient, `/workspaces/${workspaceId}/lakehouses`);
@@ -81,7 +87,7 @@ export function registerLakehouseTools(server, fabricClient, workspaceGuard) {
81
87
  return formatToolError(error);
82
88
  }
83
89
  });
84
- server.tool("lakehouse_list_tables", "List all tables in a lakehouse", {
90
+ server.tool("lakehouse_list_tables", "List all tables in a lakehouse. For schema-enabled lakehouses, automatically falls back to querying INFORMATION_SCHEMA via the SQL endpoint.", {
85
91
  workspaceId: z.string().describe("The workspace ID"),
86
92
  lakehouseId: z.string().describe("The lakehouse ID"),
87
93
  }, async ({ workspaceId, lakehouseId }) => {
@@ -90,10 +96,38 @@ export function registerLakehouseTools(server, fabricClient, workspaceGuard) {
90
96
  return { content: [{ type: "text", text: JSON.stringify(tables, null, 2) }] };
91
97
  }
92
98
  catch (error) {
93
- return formatToolError(error);
99
+ if (!isSchemaEnabledError(error)) {
100
+ return formatToolError(error);
101
+ }
102
+ // Fallback: query INFORMATION_SCHEMA via SQL endpoint for schema-enabled lakehouses
103
+ try {
104
+ const response = await fabricClient.get(`/workspaces/${workspaceId}/lakehouses/${lakehouseId}`);
105
+ const displayName = response.data.displayName;
106
+ const properties = response.data.properties;
107
+ const sqlEndpointProps = properties?.sqlEndpointProperties;
108
+ const connectionString = sqlEndpointProps?.connectionString;
109
+ if (!connectionString) {
110
+ return {
111
+ content: [{ type: "text", text: "This is a schema-enabled lakehouse and its SQL endpoint is not yet available. The endpoint may still be provisioning. Try again shortly or use sql_endpoint_execute_query once it's ready." }],
112
+ isError: true,
113
+ };
114
+ }
115
+ const server = connectionString.replace(/^.*?:\/\//, "").replace(/,.*$/, "").replace(/;.*$/, "");
116
+ const dbName = displayName ?? lakehouseId;
117
+ const result = await sqlClient.executeQuery(server, dbName, "SELECT TABLE_SCHEMA, TABLE_NAME, TABLE_TYPE FROM INFORMATION_SCHEMA.TABLES ORDER BY TABLE_SCHEMA, TABLE_NAME");
118
+ return {
119
+ content: [{
120
+ type: "text",
121
+ text: `Schema-enabled lakehouse — tables retrieved via SQL endpoint:\n${JSON.stringify(result, null, 2)}`,
122
+ }],
123
+ };
124
+ }
125
+ catch (fallbackError) {
126
+ return formatToolError(fallbackError);
127
+ }
94
128
  }
95
129
  });
96
- server.tool("lakehouse_load_table", "Load data into a lakehouse table from a file path (long-running operation)", {
130
+ server.tool("lakehouse_load_table", "Load data into a lakehouse table from a file path (long-running operation). Not supported for schema-enabled lakehouses — use sql_endpoint_execute_query with COPY INTO or notebooks instead.", {
97
131
  workspaceId: z.string().describe("The workspace ID"),
98
132
  lakehouseId: z.string().describe("The lakehouse ID"),
99
133
  tableName: z.string().describe("Target table name"),
@@ -121,6 +155,12 @@ export function registerLakehouseTools(server, fabricClient, workspaceGuard) {
121
155
  return { content: [{ type: "text", text: "Table load initiated successfully" }] };
122
156
  }
123
157
  catch (error) {
158
+ if (isSchemaEnabledError(error)) {
159
+ return {
160
+ content: [{ type: "text", text: "The table load API is not supported for schema-enabled lakehouses. Alternatives:\n• Use sql_endpoint_execute_query with a COPY INTO statement to load data via the SQL endpoint.\n• Use a notebook (notebook_run) with Spark to load data.\n• Recreate the lakehouse with enableSchemas=false if schemas are not needed." }],
161
+ isError: true,
162
+ };
163
+ }
124
164
  return formatToolError(error);
125
165
  }
126
166
  });
@@ -222,5 +262,110 @@ export function registerLakehouseTools(server, fabricClient, workspaceGuard) {
222
262
  return formatToolError(error);
223
263
  }
224
264
  });
265
+ server.tool("lakehouse_get_definition", "Get the definition of a lakehouse (long-running). Writes definition files to the specified output directory.", {
266
+ workspaceId: z.string().describe("The workspace ID"),
267
+ lakehouseId: z.string().describe("The lakehouse ID"),
268
+ outputDirectoryPath: z.string().describe("Directory path where definition files will be written"),
269
+ }, async ({ workspaceId, lakehouseId, outputDirectoryPath }) => {
270
+ try {
271
+ const response = await fabricClient.post(`/workspaces/${workspaceId}/lakehouses/${lakehouseId}/getDefinition`);
272
+ let parts;
273
+ if (response.lro) {
274
+ await pollOperation(fabricClient, response.lro.operationId);
275
+ const result = await getOperationResult(fabricClient, response.lro.operationId);
276
+ if (result?.definition) {
277
+ parts = result.definition.parts;
278
+ }
279
+ }
280
+ if (!parts && response.data?.definition) {
281
+ parts = response.data.definition.parts;
282
+ }
283
+ if (!parts) {
284
+ return { content: [{ type: "text", text: "No definition returned from Fabric API" }], isError: true };
285
+ }
286
+ const files = parts.map((part) => ({
287
+ path: part.path,
288
+ content: part.payloadType === "InlineBase64" ? decodeBase64(part.payload) : part.payload,
289
+ }));
290
+ const written = await writeFilesToDirectory(outputDirectoryPath, files);
291
+ return { content: [{ type: "text", text: `Lakehouse definition written to: ${outputDirectoryPath}\nFiles:\n${written.map((f) => ` ${f}`).join("\n")}` }] };
292
+ }
293
+ catch (error) {
294
+ return formatToolError(error);
295
+ }
296
+ });
297
+ server.tool("lakehouse_update_definition", "Update a lakehouse's definition (long-running). Accepts definition parts inline or a directory path.", {
298
+ workspaceId: z.string().describe("The workspace ID"),
299
+ lakehouseId: z.string().describe("The lakehouse ID"),
300
+ parts: z.array(z.object({
301
+ path: z.string().describe("The definition part path"),
302
+ content: z.string().describe("The file content as a string"),
303
+ })).optional().describe("Array of definition parts to upload"),
304
+ partsDirectoryPath: z.string().optional().describe("Path to a directory containing definition files"),
305
+ }, async ({ workspaceId, lakehouseId, parts, partsDirectoryPath }) => {
306
+ try {
307
+ await workspaceGuard.assertWorkspaceAllowed(fabricClient, workspaceId);
308
+ const resolved = await resolveFilesOrDirectory(parts, partsDirectoryPath);
309
+ const body = {
310
+ definition: {
311
+ parts: resolved.map((part) => ({
312
+ path: part.path,
313
+ payload: encodeBase64(part.content),
314
+ payloadType: "InlineBase64",
315
+ })),
316
+ },
317
+ };
318
+ const response = await fabricClient.post(`/workspaces/${workspaceId}/lakehouses/${lakehouseId}/updateDefinition`, body);
319
+ if (response.lro) {
320
+ const state = await pollOperation(fabricClient, response.lro.operationId);
321
+ return { content: [{ type: "text", text: JSON.stringify(state, null, 2) }] };
322
+ }
323
+ return { content: [{ type: "text", text: "Lakehouse definition updated successfully" }] };
324
+ }
325
+ catch (error) {
326
+ return formatToolError(error);
327
+ }
328
+ });
329
+ server.tool("lakehouse_list_shortcuts", "List all OneLake shortcuts in a lakehouse", {
330
+ workspaceId: z.string().describe("The workspace ID"),
331
+ lakehouseId: z.string().describe("The lakehouse ID"),
332
+ }, async ({ workspaceId, lakehouseId }) => {
333
+ try {
334
+ const shortcuts = await paginateAll(fabricClient, `/workspaces/${workspaceId}/items/${lakehouseId}/shortcuts`);
335
+ return { content: [{ type: "text", text: JSON.stringify(shortcuts, null, 2) }] };
336
+ }
337
+ catch (error) {
338
+ return formatToolError(error);
339
+ }
340
+ });
341
+ server.tool("lakehouse_get_shortcut", "Get details of a specific OneLake shortcut in a lakehouse", {
342
+ workspaceId: z.string().describe("The workspace ID"),
343
+ lakehouseId: z.string().describe("The lakehouse ID"),
344
+ shortcutPath: z.string().describe("The shortcut path (e.g., 'Tables' or 'Files/landingZone')"),
345
+ shortcutName: z.string().describe("The shortcut name"),
346
+ }, async ({ workspaceId, lakehouseId, shortcutPath, shortcutName }) => {
347
+ try {
348
+ const response = await fabricClient.get(`/workspaces/${workspaceId}/items/${lakehouseId}/shortcuts/${shortcutPath}/${shortcutName}`);
349
+ return { content: [{ type: "text", text: JSON.stringify(response.data, null, 2) }] };
350
+ }
351
+ catch (error) {
352
+ return formatToolError(error);
353
+ }
354
+ });
355
+ server.tool("lakehouse_delete_shortcut", "Delete a OneLake shortcut from a lakehouse", {
356
+ workspaceId: z.string().describe("The workspace ID"),
357
+ lakehouseId: z.string().describe("The lakehouse ID"),
358
+ shortcutPath: z.string().describe("The shortcut path (e.g., 'Tables' or 'Files/landingZone')"),
359
+ shortcutName: z.string().describe("The shortcut name"),
360
+ }, async ({ workspaceId, lakehouseId, shortcutPath, shortcutName }) => {
361
+ try {
362
+ await workspaceGuard.assertWorkspaceAllowed(fabricClient, workspaceId);
363
+ await fabricClient.delete(`/workspaces/${workspaceId}/items/${lakehouseId}/shortcuts/${shortcutPath}/${shortcutName}`);
364
+ return { content: [{ type: "text", text: `Shortcut ${shortcutName} at ${shortcutPath} deleted successfully` }] };
365
+ }
366
+ catch (error) {
367
+ return formatToolError(error);
368
+ }
369
+ });
225
370
  }
226
371
  //# sourceMappingURL=lakehouse.js.map