@databasin/mcp-client 0.2.0-beta.1 → 0.2.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 (69) hide show
  1. package/README.md +30 -26
  2. package/dist/auth-schema.d.ts +23 -0
  3. package/dist/auth-schema.d.ts.map +1 -0
  4. package/dist/auth-schema.js +42 -0
  5. package/dist/auth-schema.js.map +1 -0
  6. package/dist/auth-tools.d.ts +10 -0
  7. package/dist/auth-tools.d.ts.map +1 -0
  8. package/dist/auth-tools.js +60 -0
  9. package/dist/auth-tools.js.map +1 -0
  10. package/dist/cli.d.ts.map +1 -1
  11. package/dist/cli.js +2 -1
  12. package/dist/cli.js.map +1 -1
  13. package/dist/index.d.ts +1 -1
  14. package/dist/index.d.ts.map +1 -1
  15. package/dist/index.js +1 -1
  16. package/dist/index.js.map +1 -1
  17. package/dist/mcp-endpoint.d.ts +5 -0
  18. package/dist/mcp-endpoint.d.ts.map +1 -0
  19. package/dist/mcp-endpoint.js +22 -0
  20. package/dist/mcp-endpoint.js.map +1 -0
  21. package/dist/proxy-tools.d.ts +5 -0
  22. package/dist/proxy-tools.d.ts.map +1 -0
  23. package/dist/proxy-tools.js +39 -0
  24. package/dist/proxy-tools.js.map +1 -0
  25. package/dist/remote-mcp.d.ts +27 -0
  26. package/dist/remote-mcp.d.ts.map +1 -0
  27. package/dist/remote-mcp.js +70 -0
  28. package/dist/remote-mcp.js.map +1 -0
  29. package/dist/server.d.ts +3 -3
  30. package/dist/server.d.ts.map +1 -1
  31. package/dist/server.js +16 -6
  32. package/dist/server.js.map +1 -1
  33. package/dist/version.d.ts +1 -1
  34. package/dist/version.d.ts.map +1 -1
  35. package/dist/version.js +1 -1
  36. package/dist/version.js.map +1 -1
  37. package/package.json +3 -2
  38. package/dist/abort.d.ts +0 -5
  39. package/dist/abort.d.ts.map +0 -1
  40. package/dist/abort.js +0 -25
  41. package/dist/abort.js.map +0 -1
  42. package/dist/api-client.d.ts +0 -58
  43. package/dist/api-client.d.ts.map +0 -1
  44. package/dist/api-client.js +0 -151
  45. package/dist/api-client.js.map +0 -1
  46. package/dist/api-contract.d.ts +0 -59
  47. package/dist/api-contract.d.ts.map +0 -1
  48. package/dist/api-contract.js +0 -47
  49. package/dist/api-contract.js.map +0 -1
  50. package/dist/api-profile.d.ts +0 -5
  51. package/dist/api-profile.d.ts.map +0 -1
  52. package/dist/api-profile.js +0 -38
  53. package/dist/api-profile.js.map +0 -1
  54. package/dist/api-request.d.ts +0 -27
  55. package/dist/api-request.d.ts.map +0 -1
  56. package/dist/api-request.js +0 -147
  57. package/dist/api-request.js.map +0 -1
  58. package/dist/api-response.d.ts +0 -9
  59. package/dist/api-response.d.ts.map +0 -1
  60. package/dist/api-response.js +0 -206
  61. package/dist/api-response.js.map +0 -1
  62. package/dist/schemas.d.ts +0 -431
  63. package/dist/schemas.d.ts.map +0 -1
  64. package/dist/schemas.js +0 -289
  65. package/dist/schemas.js.map +0 -1
  66. package/dist/tools.d.ts +0 -28
  67. package/dist/tools.d.ts.map +0 -1
  68. package/dist/tools.js +0 -328
  69. package/dist/tools.js.map +0 -1
package/dist/tools.js DELETED
@@ -1,328 +0,0 @@
1
- import { randomUUID } from 'node:crypto';
2
- import { ZodError } from 'zod';
3
- import { abortableDelay } from './abort.js';
4
- import { safeCorrelationId } from './correlation.js';
5
- import { DataBasinError, publicError } from './errors.js';
6
- import { assertSafeOutput, sanitizeOutput } from './safety.js';
7
- import { AgentRunEnvelopeSchema, AgentRunLookupInputSchema, AgentRunRequestSchema, AgentRunToolInputSchema, AssistantAuthOutputSchema, AssistantEnvelopeSchema, CapabilitiesEnvelopeSchema, CancelAgentRunInputSchema, ContextEnvelopeSchema, GetSchemaEnvelopeSchema, GetSchemaInputSchema, QueryEnvelopeSchema, QueryLookupInputSchema, RunAssistantInputSchema, RunQueryInputSchema, SearchEnvelopeSchema, SearchInputSchema } from './schemas.js';
8
- export const LOCAL_AUTH_TOOL_NAMES = Object.freeze([
9
- 'databasin_auth_status',
10
- 'databasin_login'
11
- ]);
12
- export const REMOTE_PRODUCT_TOOL_NAMES = Object.freeze([
13
- 'databasin_get_capabilities',
14
- 'databasin_get_context',
15
- 'databasin_search',
16
- 'databasin_get_schema',
17
- 'databasin_run_agent',
18
- 'databasin_get_agent_run',
19
- 'databasin_cancel_agent_run',
20
- 'databasin_run_query',
21
- 'databasin_get_query_status',
22
- 'databasin_cancel_query',
23
- 'databasin_run_assistant'
24
- ]);
25
- export const TOOL_NAMES = Object.freeze([
26
- ...LOCAL_AUTH_TOOL_NAMES,
27
- ...REMOTE_PRODUCT_TOOL_NAMES
28
- ]);
29
- const DEFAULT_POLLING = {
30
- maxWaitMs: 30 * 60 * 1_000,
31
- initialDelayMs: 500,
32
- maxDelayMs: 10_000,
33
- sleep: abortableDelay,
34
- now: Date.now
35
- };
36
- // A query is meant to feel like a fast synchronous tool call, not a long-running
37
- // job like an agent run -- bounded to 2 minutes, not 30.
38
- const DEFAULT_QUERY_POLLING = {
39
- maxWaitMs: 120_000,
40
- initialDelayMs: 500,
41
- maxDelayMs: 10_000,
42
- sleep: abortableDelay,
43
- now: Date.now
44
- };
45
- export function registerDataBasinTools(server, dependencies) {
46
- const polling = { ...DEFAULT_POLLING, ...dependencies.polling };
47
- const queryPolling = { ...DEFAULT_QUERY_POLLING, ...dependencies.queryPolling };
48
- registerAuthTools(server, dependencies);
49
- registerReadTools(server, dependencies);
50
- registerAgentRunTool(server, dependencies, polling);
51
- registerAgentStatusTools(server, dependencies);
52
- registerQueryTool(server, dependencies, queryPolling);
53
- registerQueryStatusTools(server, dependencies);
54
- registerAssistantTool(server, dependencies);
55
- }
56
- function registerAuthTools(server, dependencies) {
57
- const authStatus = guardedTool(dependencies, {
58
- title: 'Check DataBasin sign-in',
59
- description: 'Check local sign-in state without returning account identity or credentials.',
60
- inputSchema: emptyInputSchema(),
61
- outputSchema: AssistantAuthOutputSchema,
62
- annotations: { readOnlyHint: true, destructiveHint: false, openWorldHint: false }
63
- }, async () => projectAuthOutput(await dependencies.auth.getLoginStatus()));
64
- server.registerTool('databasin_auth_status', authStatus.definition, authStatus.callback);
65
- const login = guardedTool(dependencies, {
66
- title: 'Sign in to DataBasin',
67
- description: 'Start Microsoft device sign-in. Enter credentials only on Microsoft\'s page; never provide credentials in chat.',
68
- inputSchema: emptyInputSchema(),
69
- outputSchema: AssistantAuthOutputSchema,
70
- annotations: { readOnlyHint: false, destructiveHint: false, openWorldHint: true }
71
- }, async () => projectAuthOutput(await dependencies.auth.startLogin()));
72
- server.registerTool('databasin_login', login.definition, login.callback);
73
- }
74
- function projectAuthOutput(raw) {
75
- const output = AssistantAuthOutputSchema.parse(sanitizeOutput(raw));
76
- return { ...output, message: authOutputMessage(output) };
77
- }
78
- function authOutputMessage(output) {
79
- if (output.status === 'pending') {
80
- return output.loginUrl === null
81
- ? 'Microsoft is preparing the device sign-in instructions.'
82
- : 'Microsoft device sign-in is ready. Use the approved login URL and user code, then call databasin_auth_status.';
83
- }
84
- if (output.status === 'authenticated')
85
- return 'DataBasin sign-in is complete.';
86
- if (output.status === 'not_authenticated')
87
- return 'DataBasin is not signed in. Call databasin_login to begin.';
88
- return 'DataBasin sign-in did not complete. Call databasin_login to try again.';
89
- }
90
- function registerReadTools(server, dependencies) {
91
- const capabilities = guardedTool(dependencies, {
92
- title: 'Get DataBasin capabilities',
93
- description: 'Fetch the server-owned allowlist before using other DataBasin capabilities.',
94
- inputSchema: emptyInputSchema(),
95
- outputSchema: CapabilitiesEnvelopeSchema,
96
- annotations: { readOnlyHint: true, destructiveHint: false, openWorldHint: false }
97
- }, async (_input, signal) => dependencies.api.getCapabilities(signal));
98
- server.registerTool('databasin_get_capabilities', capabilities.definition, capabilities.callback);
99
- const context = guardedTool(dependencies, {
100
- title: 'Get DataBasin context',
101
- description: 'Enumerate everything the signed-in user has access to: projects, connections (each with name, connector type/subtype, owning institution, and active status), and capabilities.',
102
- inputSchema: emptyInputSchema(),
103
- outputSchema: ContextEnvelopeSchema,
104
- annotations: { readOnlyHint: true, destructiveHint: false, openWorldHint: false }
105
- }, async (_input, signal) => dependencies.api.getContext(signal));
106
- server.registerTool('databasin_get_context', context.definition, context.callback);
107
- const search = guardedTool(dependencies, {
108
- title: 'Search DataBasin',
109
- description: 'Search: a bounded name/type substring match over the signed-in user\'s authorized scope (max 25 results). Not a listing facility -- use databasin_get_context to enumerate everything the caller has access to.',
110
- inputSchema: SearchInputSchema,
111
- outputSchema: SearchEnvelopeSchema,
112
- annotations: { readOnlyHint: true, destructiveHint: false, openWorldHint: false }
113
- }, async (input, signal) => dependencies.api.search(input, signal));
114
- server.registerTool('databasin_search', search.definition, search.callback);
115
- const schema = guardedTool(dependencies, {
116
- title: 'Get DataBasin schema metadata',
117
- description: 'Read bounded non-secret catalogs, schemas, tables, or columns for one authorized connector. A POLICY_DENIED error may include a "reason" field with a specific, safe remediation hint (for example, which access is missing) when the server provides one.',
118
- inputSchema: GetSchemaInputSchema,
119
- outputSchema: GetSchemaEnvelopeSchema,
120
- annotations: { readOnlyHint: true, destructiveHint: false, openWorldHint: false }
121
- }, async (input, signal) => dependencies.api.getSchema(input, signal));
122
- server.registerTool('databasin_get_schema', schema.definition, schema.callback);
123
- }
124
- function registerAgentRunTool(server, dependencies, polling) {
125
- const runAgent = guardedTool(dependencies, {
126
- title: 'Run a DataBasin metadata agent',
127
- description: 'Start the fixed metadata_readonly agent profile for an explicit institution and optional project/connector scope. No arbitrary SQL, commands, URLs, headers, or credentials are accepted. If the run is still not finished after the 30-minute polling limit, the last observed non-terminal run (for example status "running") is returned with its runId; use databasin_get_agent_run or databasin_cancel_agent_run to follow up.',
128
- inputSchema: AgentRunToolInputSchema,
129
- outputSchema: AgentRunEnvelopeSchema,
130
- annotations: { readOnlyHint: false, destructiveHint: false, openWorldHint: true }
131
- }, async (input, signal) => {
132
- const { idempotencyKey, ...rawRequest } = input;
133
- const request = AgentRunRequestSchema.parse(rawRequest);
134
- const created = await dependencies.api.createAgentRun(request, idempotencyKey ?? randomUUID(), signal);
135
- if (isTerminal(created.data.status))
136
- return created;
137
- try {
138
- return await pollAgentRun(dependencies.api, created, signal, polling);
139
- }
140
- catch (error) {
141
- if (isCallerAbort(error, signal))
142
- await requestCancellation(dependencies.api, created.data.runId);
143
- throw error;
144
- }
145
- });
146
- server.registerTool('databasin_run_agent', runAgent.definition, runAgent.callback);
147
- }
148
- function registerAgentStatusTools(server, dependencies) {
149
- const getRun = guardedTool(dependencies, {
150
- title: 'Get a DataBasin agent run',
151
- description: 'Read the current bounded status/result and complete server-authorized scope of an agent run.',
152
- inputSchema: AgentRunLookupInputSchema,
153
- outputSchema: AgentRunEnvelopeSchema,
154
- annotations: { readOnlyHint: true, destructiveHint: false, openWorldHint: false }
155
- }, async (input, signal) => dependencies.api.getAgentRun(input.runId, signal));
156
- server.registerTool('databasin_get_agent_run', getRun.definition, getRun.callback);
157
- const cancelRun = guardedTool(dependencies, {
158
- title: 'Cancel a DataBasin agent run',
159
- description: 'Request cancellation of an authorized agent run. A running provider may remain running until it acknowledges cancellation; this tool never claims cancellation before the server reports it.',
160
- inputSchema: CancelAgentRunInputSchema,
161
- outputSchema: AgentRunEnvelopeSchema,
162
- annotations: { readOnlyHint: false, destructiveHint: true, openWorldHint: false }
163
- }, async (input, signal) => dependencies.api.cancelAgentRun(input.runId, input.idempotencyKey ?? randomUUID(), input.reason, signal));
164
- server.registerTool('databasin_cancel_agent_run', cancelRun.definition, cancelRun.callback);
165
- }
166
- function registerQueryTool(server, dependencies, polling) {
167
- const runQuery = guardedTool(dependencies, {
168
- title: 'Run a read-only DataBasin SQL query',
169
- description: 'Execute a single read-only SELECT or WITH statement against an authorized connector and return up to maxRows rows (default and hard max 1000). No INSERT, UPDATE, DELETE, DDL, or other mutating statements are accepted, and multi-statement text is rejected outright. If the query is still not finished after the 2-minute polling limit, the last observed non-terminal status (for example "running") is returned with its queryId; use databasin_get_query_status or databasin_cancel_query to follow up.',
170
- inputSchema: RunQueryInputSchema,
171
- outputSchema: QueryEnvelopeSchema,
172
- annotations: { readOnlyHint: true, destructiveHint: false, openWorldHint: true }
173
- }, async (input, signal) => {
174
- const created = await dependencies.api.runQuery(input, signal);
175
- if (isQueryTerminal(created.data.status))
176
- return created;
177
- try {
178
- return await pollQuery(dependencies.api, created, signal, polling);
179
- }
180
- catch (error) {
181
- if (isCallerAbort(error, signal))
182
- await requestQueryCancellation(dependencies.api, created.data.queryId);
183
- throw error;
184
- }
185
- });
186
- server.registerTool('databasin_run_query', runQuery.definition, runQuery.callback);
187
- }
188
- function registerQueryStatusTools(server, dependencies) {
189
- const getStatus = guardedTool(dependencies, {
190
- title: 'Get a DataBasin query status',
191
- description: 'Read the current bounded status of a query started by databasin_run_query, including its columns, rows (capped at the run\'s maxRows), and error once the query reaches a terminal status.',
192
- inputSchema: QueryLookupInputSchema,
193
- outputSchema: QueryEnvelopeSchema,
194
- annotations: { readOnlyHint: true, destructiveHint: false, openWorldHint: false }
195
- }, async (input, signal) => dependencies.api.getQueryStatus(input.queryId, signal));
196
- server.registerTool('databasin_get_query_status', getStatus.definition, getStatus.callback);
197
- const cancelQuery = guardedTool(dependencies, {
198
- title: 'Cancel a DataBasin query',
199
- description: 'Request cancellation of an authorized, in-progress query. A running engine may remain running until it acknowledges cancellation; this tool never claims cancellation before the server reports it.',
200
- inputSchema: QueryLookupInputSchema,
201
- outputSchema: QueryEnvelopeSchema,
202
- annotations: { readOnlyHint: false, destructiveHint: true, openWorldHint: false }
203
- }, async (input, signal) => dependencies.api.cancelQuery(input.queryId, signal));
204
- server.registerTool('databasin_cancel_query', cancelQuery.definition, cancelQuery.callback);
205
- }
206
- function registerAssistantTool(server, dependencies) {
207
- const runAssistant = guardedTool(dependencies, {
208
- title: 'Run the DataBasin assistant',
209
- description: 'A read-only DataBasin assistant (a server-side Claude Code agent) that can browse metadata and run DataBasin skills over multiple steps to answer a natural-language request. Requires an LLM connectorId. Read-only: no data writes and no SQL execution -- use databasin_run_query for SQL. Synchronous, and may take up to a few minutes to return.',
210
- inputSchema: RunAssistantInputSchema,
211
- outputSchema: AssistantEnvelopeSchema,
212
- annotations: { readOnlyHint: true, destructiveHint: false, openWorldHint: true }
213
- }, async (input, signal) => dependencies.api.runAssistant(input, signal));
214
- server.registerTool('databasin_run_assistant', runAssistant.definition, runAssistant.callback);
215
- }
216
- async function pollAgentRun(api, initial, signal, options) {
217
- let current = initial;
218
- let delay = options.initialDelayMs;
219
- const deadline = options.now() + options.maxWaitMs;
220
- while (!isTerminal(current.data.status)) {
221
- if (signal?.aborted)
222
- throw new DataBasinError('REQUEST_ABORTED', 'The DataBasin request was cancelled by the caller.');
223
- const remaining = deadline - options.now();
224
- if (remaining <= 0)
225
- return current;
226
- try {
227
- await options.sleep(Math.min(delay, remaining), signal);
228
- }
229
- catch (error) {
230
- if (signal?.aborted) {
231
- throw new DataBasinError('REQUEST_ABORTED', 'The DataBasin request was cancelled by the caller.');
232
- }
233
- throw error;
234
- }
235
- current = await api.getAgentRun(current.data.runId, signal);
236
- delay = Math.min(delay * 2, options.maxDelayMs);
237
- }
238
- return current;
239
- }
240
- async function requestCancellation(api, runId) {
241
- const controller = new AbortController();
242
- const timeout = setTimeout(() => controller.abort(), 5_000);
243
- try {
244
- await api.cancelAgentRun(runId, randomUUID(), 'user_requested', controller.signal);
245
- }
246
- catch {
247
- // The caller's cancellation remains authoritative; do not claim a server state.
248
- }
249
- finally {
250
- clearTimeout(timeout);
251
- }
252
- }
253
- function isTerminal(status) {
254
- return status === 'completed' || status === 'failed' || status === 'cancelled';
255
- }
256
- async function pollQuery(api, initial, signal, options) {
257
- let current = initial;
258
- let delay = options.initialDelayMs;
259
- const deadline = options.now() + options.maxWaitMs;
260
- while (!isQueryTerminal(current.data.status)) {
261
- if (signal?.aborted)
262
- throw new DataBasinError('REQUEST_ABORTED', 'The DataBasin request was cancelled by the caller.');
263
- const remaining = deadline - options.now();
264
- if (remaining <= 0)
265
- return current;
266
- try {
267
- await options.sleep(Math.min(delay, remaining), signal);
268
- }
269
- catch (error) {
270
- if (signal?.aborted) {
271
- throw new DataBasinError('REQUEST_ABORTED', 'The DataBasin request was cancelled by the caller.');
272
- }
273
- throw error;
274
- }
275
- current = await api.getQueryStatus(current.data.queryId, signal);
276
- delay = Math.min(delay * 2, options.maxDelayMs);
277
- }
278
- return current;
279
- }
280
- async function requestQueryCancellation(api, queryId) {
281
- const controller = new AbortController();
282
- const timeout = setTimeout(() => controller.abort(), 5_000);
283
- try {
284
- await api.cancelQuery(queryId, controller.signal);
285
- }
286
- catch {
287
- // The caller's cancellation remains authoritative; do not claim a server state.
288
- }
289
- finally {
290
- clearTimeout(timeout);
291
- }
292
- }
293
- function isQueryTerminal(status) {
294
- return status === 'completed' || status === 'failed' || status === 'cancelled';
295
- }
296
- function isCallerAbort(error, signal) {
297
- return signal?.aborted === true || error instanceof DataBasinError && error.code === 'REQUEST_ABORTED';
298
- }
299
- function guardedTool(dependencies, definition, handler) {
300
- const callback = async (rawInput, context) => {
301
- try {
302
- const input = definition.inputSchema.parse(rawInput ?? {});
303
- const output = definition.outputSchema.parse(sanitizeOutput(await handler(input, context.mcpReq.signal)));
304
- assertSafeOutput(output, dependencies.maxOutputBytes);
305
- return {
306
- content: [{ type: 'text', text: JSON.stringify(output) }],
307
- structuredContent: output
308
- };
309
- }
310
- catch (error) {
311
- const normalized = error instanceof ZodError
312
- ? new DataBasinError('INVALID_ARGUMENT', error.issues[0]?.message ?? 'The tool arguments are invalid.')
313
- : error;
314
- const visible = publicError(normalized);
315
- const { correlationId: upstreamCorrelation, ...publicFields } = visible;
316
- const safe = {
317
- ...publicFields,
318
- correlationId: safeCorrelationId(upstreamCorrelation)
319
- };
320
- return { content: [{ type: 'text', text: JSON.stringify(safe) }], isError: true };
321
- }
322
- };
323
- return Object.freeze({ definition, callback });
324
- }
325
- function emptyInputSchema() {
326
- return AgentRunLookupInputSchema.pick({}).strict();
327
- }
328
- //# sourceMappingURL=tools.js.map
package/dist/tools.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"tools.js","sourceRoot":"","sources":["../src/tools.ts"],"names":[],"mappings":"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"}