@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/README.md CHANGED
@@ -1,26 +1,26 @@
1
1
  # DataBasin MCP Client
2
2
 
3
- Local stdio MCP client for DataBasin. It keeps Microsoft Entra credentials in the OS-protected MSAL cache and calls only the versioned DataBasin SvelteKit machine façade over HTTPS.
3
+ Local stdio MCP proxy for DataBasin. It keeps Microsoft Entra credentials in the OS-protected MSAL cache and connects to DataBasin's true Streamable HTTP MCP endpoint with the official MCP SDK.
4
4
 
5
5
  Production is the default. The non-production profile is selected with `--environment np`.
6
6
 
7
- ## NP beta pilot
7
+ ## Version 0.2.0 production release
8
8
 
9
- The `0.2.0-beta.1` candidate is for the DataBasin team and invited beta testers against NP only. Install the exact version so npm's production `latest` tag remains on the production-compatible `0.1.0` line:
9
+ Version `0.2.0` replaces the legacy REST adapter with a true MCP proxy for the deployed production server, including support tickets and notifications. Upgrade clients pinned to `0.1.0` or `0.2.0-beta.1`; those versions do not implement this transport. Production is the default:
10
10
 
11
11
  ```bash
12
- npx -y @databasin/mcp-client@0.2.0-beta.1 doctor --environment np
13
- npx -y @databasin/mcp-client@0.2.0-beta.1 login --environment np
12
+ npx -y @databasin/mcp-client@0.2.0 doctor
13
+ npx -y @databasin/mcp-client@0.2.0 login
14
14
  ```
15
15
 
16
- The beta requires Node.js 22.20+ or Node.js 24 and an available OS-protected credential store. `doctor` reports the selected fixed profile, runtime support, credential-store availability, and sign-in state; it never prints account identity, tokens, or credentials.
16
+ The client requires Node.js 22.20+ or Node.js 24 and an available OS-protected credential store. `doctor` reports the selected fixed profile, runtime support, credential-store availability, and sign-in state; it never prints account identity, tokens, or credentials.
17
17
 
18
- Use the exact beta version in the host configuration during the pilot:
18
+ For non-production, use the same stable package with the NP profile:
19
19
 
20
- | Host | NP beta setup |
20
+ | Host | NP setup |
21
21
  | --- | --- |
22
- | Codex | `codex mcp add databasin-np -- npx -y @databasin/mcp-client@0.2.0-beta.1 --environment np` |
23
- | Claude Code | `claude mcp add --transport stdio --scope user databasin-np -- npx -y @databasin/mcp-client@0.2.0-beta.1 --environment np` |
22
+ | Codex | `codex mcp add databasin-np -- npx -y @databasin/mcp-client@0.2.0 --environment np` |
23
+ | Claude Code | `claude mcp add --transport stdio --scope user databasin-np -- npx -y @databasin/mcp-client@0.2.0 --environment np` |
24
24
  | Claude Desktop / Cursor-compatible config | Use the `mcpServers` JSON below |
25
25
  | VS Code | Use the `servers` JSON below in user or workspace `mcp.json` |
26
26
  | OpenCode v2 | Use the `mcp.servers` JSON below in `opencode.jsonc` |
@@ -33,7 +33,7 @@ Claude Desktop and other hosts that accept the common `mcpServers` shape:
33
33
  "databasin-np": {
34
34
  "type": "stdio",
35
35
  "command": "npx",
36
- "args": ["-y", "@databasin/mcp-client@0.2.0-beta.1", "--environment", "np"]
36
+ "args": ["-y", "@databasin/mcp-client@0.2.0", "--environment", "np"]
37
37
  }
38
38
  }
39
39
  }
@@ -47,7 +47,7 @@ VS Code `mcp.json`:
47
47
  "databasinNp": {
48
48
  "type": "stdio",
49
49
  "command": "npx",
50
- "args": ["-y", "@databasin/mcp-client@0.2.0-beta.1", "--environment", "np"]
50
+ "args": ["-y", "@databasin/mcp-client@0.2.0", "--environment", "np"]
51
51
  }
52
52
  }
53
53
  }
@@ -62,19 +62,21 @@ OpenCode v2 `opencode.jsonc`:
62
62
  "servers": {
63
63
  "databasin-np": {
64
64
  "type": "local",
65
- "command": ["npx", "-y", "@databasin/mcp-client@0.2.0-beta.1", "--environment", "np"]
65
+ "command": ["npx", "-y", "@databasin/mcp-client@0.2.0", "--environment", "np"]
66
66
  }
67
67
  }
68
68
  }
69
69
  }
70
70
  ```
71
71
 
72
- On native Windows, a host that cannot launch `npx` directly should use `cmd` with arguments beginning `[/c, npx, ...]` (JSON string form: `["/c", "npx", ...]`). Restart the host after changing its MCP configuration so it refreshes the 13-tool inventory.
72
+ On native Windows, a host that cannot launch `npx` directly should use `cmd` with arguments beginning `[/c, npx, ...]` (JSON string form: `["/c", "npx", ...]`). Restart the host after changing its MCP configuration so it refreshes the server-owned tool inventory.
73
73
 
74
- The only remote façades are:
74
+ The only remote MCP endpoints are:
75
75
 
76
- - Production: `https://databasin.cloud/api/v1/mcp`
77
- - NP: `https://databasin-ui-np.grayriver-813df174.centralus.azurecontainerapps.io/api/v1/mcp`
76
+ - Production: `https://databasin.cloud/mcp`
77
+ - NP: `https://databasin-ui-np.grayriver-813df174.centralus.azurecontainerapps.io/mcp`
78
+
79
+ The downstream connection pins MCP `2026-07-28` and has no REST or legacy-protocol fallback. Tool discovery and listing are public protocol operations. The client obtains a local access token only for `tools/call`, adds it as a bearer credential to that request, and rejects HTTP redirects so credentials cannot cross origins.
78
80
 
79
81
  ## Install and connect
80
82
 
@@ -113,7 +115,7 @@ Before using an MSAL access token, the client fail-closes on its tenant, issuer,
113
115
 
114
116
  ## Tools
115
117
 
116
- The MCP server exposes thirteen tools in two deliberately separate groups. Eleven product tools call the remote DataBasin façade:
118
+ The production server currently exposes twenty product tools, plus this client's two local authentication helpers (twenty-two total). Product tools are discovered dynamically from the remote DataBasin MCP server and mirrored over local stdio. Their names, descriptions, annotations, input/output schemas, and timeout metadata are server-owned; this package does not keep a second product-tool contract. The current server catalog is:
117
119
 
118
120
  - `databasin_get_capabilities` — fetch the server-owned capability allowlist.
119
121
  - `databasin_get_context` — fetch authorized project and connector metadata.
@@ -127,19 +129,21 @@ The MCP server exposes thirteen tools in two deliberately separate groups. Eleve
127
129
  - `databasin_cancel_query` — request cancellation and report the server’s truthful state.
128
130
  - `databasin_run_assistant` — run the read-only DataBasin assistant (a server-side Claude Code agent) that browses metadata and runs DataBasin skills over multiple steps to answer a natural-language request.
129
131
 
130
- The other two tools, `databasin_auth_status` and `databasin_login`, are client-local authentication helpers. They interact only with the local MSAL credential manager and Microsoft sign-in; they are not part of the eleven-tool DataBasin product façade and do not call DataBasin product routes.
132
+ Support tools are also discovered: `databasin_get_support_context`, `databasin_list_support_tickets`, `databasin_get_support_ticket`, `databasin_create_support_ticket`, `databasin_add_support_ticket_message`, `databasin_update_support_ticket`, `databasin_list_support_notifications`, `databasin_mark_support_notification_read`, and `databasin_mark_all_support_notifications_read`. Support operations include writes; follow their server-owned schemas and annotations. Ticket/message data includes authorized email fields, and optional values may be null.
133
+
134
+ The other two tools, `databasin_auth_status` and `databasin_login`, are client-local authentication helpers. They interact only with the local MSAL credential manager and Microsoft sign-in; they are not part of the remote product catalog.
131
135
 
132
136
  No organization configuration is required. Unscoped `databasin_get_context` and `databasin_search` discover metadata only across organizations the signed-in user is authorized to access. A project-scoped search must include its `institutionId`; account discovery is not a wildcard and never broadens server-side authorization.
133
137
 
134
- The client does not expose arbitrary SQL, shell commands, connector credentials, arbitrary URLs, or arbitrary headers. `databasin_run_query` accepts only a single read-only `SELECT`/`WITH` statement, enforced server-side; multi-statement text and any mutating keyword are rejected outright, and `language`/`sessionId`/`timeoutSeconds` are never caller-facing (`language` is always `sql`; `timeoutSeconds` is a fixed server-side constant). Every remote success is the strict envelope `{ "data": T, "correlationId": "..." }` and must match the response `X-Correlation-Id` header.
138
+ The client does not expose arbitrary SQL, shell commands, connector credentials, arbitrary URLs, or arbitrary headers. The remote server validates product inputs, authorization, output safety, query policy, and response bounds. `databasin_run_query` accepts only a single read-only `SELECT`/`WITH` statement under that server-owned contract. Every product success is the MCP result returned by the server, including its structured `{ "data": T, "correlationId": "..." }` payload.
135
139
 
136
- `databasin_run_agent` accepts `institutionId`, `prompt`, an optional JSON-object `context`, optional `projectInternalId`, `connectorId`, `model`, and top-level `maxTurns` (`1..100`). The optional model is restricted to the server-owned `haiku` or `sonnet` allowlist; omitting it uses `haiku`. Its profile is always `metadata_readonly`. Agent creation and cancellation each accept an optional UUID `idempotencyKey` for replay after a lost response; otherwise the client generates one. The key is sent only as `Idempotency-Key`, never in the request body. Polling is bounded to 30 minutes with bounded backoff and honors MCP cancellation.
140
+ `databasin_run_agent` accepts the scope and execution fields advertised in its discovered schema and always uses the server-owned `metadata_readonly` profile. The remote MCP tool owns run creation, bounded polling, cancellation on MCP abort, authorization rechecks, and any idempotency behavior; the local proxy performs one `tools/call` and forwards its cancellation signal.
137
141
 
138
142
  Agent status, result, and cancellation responses include the complete server-authorized scope. A canonical run contains `runId`, the three scope IDs (nullable where optional), `profile`, `status`, bounded `result`/`error`, and `createdAt`/`updatedAt`. Cancellation reports the state returned by the server and does not imply completion before the server says `cancelled`.
139
143
 
140
- `databasin_run_query` accepts `connectorId`, `code` (the SQL text, 1–32768 bytes), and `maxRows` (`1..1000`, default `1000`). Unlike agent runs, query creation and cancellation take no idempotency key. Polling is bounded to 2 minutes with the same bounded backoff, since a query is meant to feel like a fast synchronous tool call rather than a long-running job; on timeout the last observed non-terminal status is returned with its `queryId` for `databasin_get_query_status`/`databasin_cancel_query` to follow up. A canonical query result contains `queryId`, `connectorId`, `status`, bounded `columns`/`data`/`rowCount` (populated once terminal, otherwise `null`), `truncated`, and `error`.
144
+ `databasin_run_query` accepts the bounded connector, SQL, and row-limit fields in the discovered schema. The remote MCP tool owns its bounded polling and timeout behavior. Status and cancellation remain explicit tools for follow-up. A canonical query result contains `queryId`, `connectorId`, `status`, bounded `columns`/`data`/`rowCount`, `truncated`, and `error`.
141
145
 
142
- `databasin_run_assistant` accepts `connectorId` (required, so the assistant has an LLM to route to), `prompt` (1–32768 bytes), an optional `context` string (up to 4096 characters), and `maxTurns` (`1..25`, default `6`). It never accepts `model`, `sessionId`, `options`, or any tool/permission override — the assistant is stateless per call in v1 (no session continuity), and the server-side agent's read-only tool policy is enforced entirely on the façade, not by this client. The call is synchronous and may take up to a few minutes; the client gives this one endpoint a longer request timeout than the shared default so a legitimate in-progress run is never cut off client-side first. A canonical result contains `status` (`completed`/`failed`/`incomplete`), bounded `text`, `turns`, and `error`. This tool is metadata-and-skills only — it never executes SQL; use `databasin_run_query` for that.
146
+ `databasin_run_assistant` remains the server's bounded, read-only assistant operation. It is metadata-and-skills only; use `databasin_run_query` for SQL. The server advertises the accepted input and output schemas plus the call timeout in MCP metadata, and the client mirrors them without local copies. This transport change does not replace or modify the server's existing Claude Agent SDK runtime.
143
147
 
144
148
  ## CLI fallback
145
149
 
@@ -164,12 +168,12 @@ npm run verify:package
164
168
 
165
169
  `npm run verify` runs the TypeScript check, unit tests, build, and stdio child-process E2E. CI runs those checks on Node 22 and 24 across Linux, macOS, and Windows, audits production dependencies, and verifies the exact package allowlist with `npm pack --dry-run --json`.
166
170
 
167
- Release qualification uses an exact local tarball, never a mutable dist-tag. After `npm pack`, an authorized tester with an existing NP session can run the read-only qualification:
171
+ Release qualification uses an exact local tarball, never a mutable dist-tag. After `npm pack`, an authorized tester with an existing production session can run the read-only qualification:
168
172
 
169
173
  ```bash
170
- DATABASIN_MCP_BETA_TARBALL=./databasin-mcp-client-0.2.0-beta.1.tgz npm run qualify:np
174
+ DATABASIN_MCP_TARBALL=./databasin-mcp-client-0.2.0.tgz npm run qualify:package
171
175
  ```
172
176
 
173
- The release owner may add `DATABASIN_MCP_QUALIFY_STATEFUL=1` plus explicit authorized connector/scope environment variables to exercise all 13 tools, including the agent, query, and assistant lifecycles. The command emits only package/version, counts, mode, and terminal statuses; resource identifiers, names, responses, and credentials are not evidence output.
177
+ Set `DATABASIN_MCP_QUALIFY_ENVIRONMENT=np` to qualify against NP instead. This check installs the exact artifact in a temporary directory, starts its stdio executable, checks local sign-in and the twenty-two-tool inventory, and calls only context/search/support read operations. It never creates agent jobs, executes SQL, or changes support data, and does not print credentials or business content. The old `qualify:np` script remains only for historical beta lifecycle qualification.
174
178
 
175
179
  Release approval still requires proof of the Entra registration, tenant, issuer, audience, delegated scope, and wrong-claim rejection behavior for each environment.
@@ -0,0 +1,23 @@
1
+ import { z } from 'zod';
2
+ export declare const AssistantAuthOutputSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
3
+ status: z.ZodLiteral<"pending">;
4
+ environment: z.ZodEnum<{
5
+ prod: "prod";
6
+ np: "np";
7
+ }>;
8
+ loginUrl: z.ZodNullable<z.ZodString>;
9
+ userCode: z.ZodOptional<z.ZodString>;
10
+ expiresAt: z.ZodOptional<z.ZodISODateTime>;
11
+ message: z.ZodString;
12
+ }, z.core.$strict>, ...z.ZodObject<{
13
+ status: z.ZodLiteral<"authenticated" | "not_authenticated" | "failed">;
14
+ environment: z.ZodEnum<{
15
+ prod: "prod";
16
+ np: "np";
17
+ }>;
18
+ loginUrl: z.ZodNull;
19
+ userCode: z.ZodOptional<z.ZodNever>;
20
+ expiresAt: z.ZodOptional<z.ZodNever>;
21
+ message: z.ZodString;
22
+ }, z.core.$strict>[]], "status">;
23
+ //# sourceMappingURL=auth-schema.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth-schema.d.ts","sourceRoot":"","sources":["../src/auth-schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAoBxB,eAAO,MAAM,yBAAyB;;;;;;;;;;;;;;;;;;;;gCAuBpC,CAAC"}
@@ -0,0 +1,42 @@
1
+ import { z } from 'zod';
2
+ import { validateDeviceLoginUrl } from './login-url.js';
3
+ const authEnvironment = z.enum(['prod', 'np']);
4
+ const URL_LIKE_AUTH_MESSAGE = /(?:\b(?:https?|hxxps?|ftp|file|data|javascript)\s*:\s*(?:[/\\]\s*){0,2}|\bwww\s*(?:\.|\[\.\]|\(\.\))|(?:\b|@)(?:[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?(?:\.|\[\.\]|\(\.\)))+[a-z]{2,63}(?=\b|[/:?#])|\b(?:localhost|(?:\d{1,3}\.){3}\d{1,3})(?=[:/\s]|$))/iu;
5
+ const authMessage = z.string().max(1_000).refine((value) => !URL_LIKE_AUTH_MESSAGE.test(normalizeAuthMessage(value)), 'The authentication message was rejected.');
6
+ const safeDeviceLoginUrl = z.string().max(4_096).superRefine((value, context) => {
7
+ try {
8
+ validateDeviceLoginUrl(value);
9
+ }
10
+ catch {
11
+ context.addIssue({ code: 'custom', message: 'The authentication result was rejected.' });
12
+ }
13
+ });
14
+ export const AssistantAuthOutputSchema = z.discriminatedUnion('status', [
15
+ z.object({
16
+ status: z.literal('pending'),
17
+ environment: authEnvironment,
18
+ loginUrl: safeDeviceLoginUrl.nullable(),
19
+ userCode: z.string().trim().regex(/^[A-Z0-9-]{4,32}$/iu).optional(),
20
+ expiresAt: z.iso.datetime().optional(),
21
+ message: authMessage
22
+ }).strict(),
23
+ ...['authenticated', 'not_authenticated', 'failed'].map((status) => z.object({
24
+ status: z.literal(status),
25
+ environment: authEnvironment,
26
+ loginUrl: z.null(),
27
+ userCode: z.never().optional(),
28
+ expiresAt: z.never().optional(),
29
+ message: authMessage
30
+ }).strict())
31
+ ]).superRefine((value, context) => {
32
+ if (value.status !== 'pending')
33
+ return;
34
+ const hasPrompt = value.loginUrl !== null;
35
+ if (hasPrompt !== (value.userCode !== undefined) || hasPrompt !== (value.expiresAt !== undefined)) {
36
+ context.addIssue({ code: 'custom', message: 'The authentication result has an invalid pending state.' });
37
+ }
38
+ });
39
+ function normalizeAuthMessage(value) {
40
+ return value.normalize('NFKC').replace(/[\u200B-\u200D\u2060\uFEFF]/gu, '').replace(/\s+/gu, ' ');
41
+ }
42
+ //# sourceMappingURL=auth-schema.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth-schema.js","sourceRoot":"","sources":["../src/auth-schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,sBAAsB,EAAE,MAAM,gBAAgB,CAAC;AAExD,MAAM,eAAe,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC;AAC/C,MAAM,qBAAqB,GACzB,2PAA2P,CAAC;AAE9P,MAAM,WAAW,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,MAAM,CAC9C,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,qBAAqB,CAAC,IAAI,CAAC,oBAAoB,CAAC,KAAK,CAAC,CAAC,EACnE,0CAA0C,CAC3C,CAAC;AAEF,MAAM,kBAAkB,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,WAAW,CAAC,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE;IAC9E,IAAI,CAAC;QACH,sBAAsB,CAAC,KAAK,CAAC,CAAC;IAChC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,CAAC,QAAQ,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,yCAAyC,EAAE,CAAC,CAAC;IAC3F,CAAC;AACH,CAAC,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,yBAAyB,GAAG,CAAC,CAAC,kBAAkB,CAAC,QAAQ,EAAE;IACtE,CAAC,CAAC,MAAM,CAAC;QACP,MAAM,EAAE,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC;QAC5B,WAAW,EAAE,eAAe;QAC5B,QAAQ,EAAE,kBAAkB,CAAC,QAAQ,EAAE;QACvC,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,qBAAqB,CAAC,CAAC,QAAQ,EAAE;QACnE,SAAS,EAAE,CAAC,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE;QACtC,OAAO,EAAE,WAAW;KACrB,CAAC,CAAC,MAAM,EAAE;IACX,GAAI,CAAC,eAAe,EAAE,mBAAmB,EAAE,QAAQ,CAAW,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC;QACtF,MAAM,EAAE,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC;QACzB,WAAW,EAAE,eAAe;QAC5B,QAAQ,EAAE,CAAC,CAAC,IAAI,EAAE;QAClB,QAAQ,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC,QAAQ,EAAE;QAC9B,SAAS,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC,QAAQ,EAAE;QAC/B,OAAO,EAAE,WAAW;KACrB,CAAC,CAAC,MAAM,EAAE,CAAC;CACb,CAAC,CAAC,WAAW,CAAC,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE;IAChC,IAAI,KAAK,CAAC,MAAM,KAAK,SAAS;QAAE,OAAO;IACvC,MAAM,SAAS,GAAG,KAAK,CAAC,QAAQ,KAAK,IAAI,CAAC;IAC1C,IAAI,SAAS,KAAK,CAAC,KAAK,CAAC,QAAQ,KAAK,SAAS,CAAC,IAAI,SAAS,KAAK,CAAC,KAAK,CAAC,SAAS,KAAK,SAAS,CAAC,EAAE,CAAC;QAClG,OAAO,CAAC,QAAQ,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,yDAAyD,EAAE,CAAC,CAAC;IAC3G,CAAC;AACH,CAAC,CAAC,CAAC;AAEH,SAAS,oBAAoB,CAAC,KAAa;IACzC,OAAO,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,+BAA+B,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;AACpG,CAAC"}
@@ -0,0 +1,10 @@
1
+ import { McpServer } from '@modelcontextprotocol/server';
2
+ import type { AssistantAuthResult } from './auth.js';
3
+ export declare const LOCAL_AUTH_TOOL_NAMES: readonly ["databasin_auth_status", "databasin_login"];
4
+ type AuthTools = Readonly<{
5
+ startLogin(): Promise<AssistantAuthResult>;
6
+ getLoginStatus(): Promise<AssistantAuthResult>;
7
+ }>;
8
+ export declare function registerAuthTools(server: McpServer, auth: AuthTools): void;
9
+ export {};
10
+ //# sourceMappingURL=auth-tools.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth-tools.d.ts","sourceRoot":"","sources":["../src/auth-tools.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAsB,MAAM,8BAA8B,CAAC;AAE7E,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,WAAW,CAAC;AAMrD,eAAO,MAAM,qBAAqB,uDAGvB,CAAC;AAEZ,KAAK,SAAS,GAAG,QAAQ,CAAC;IACxB,UAAU,IAAI,OAAO,CAAC,mBAAmB,CAAC,CAAC;IAC3C,cAAc,IAAI,OAAO,CAAC,mBAAmB,CAAC,CAAC;CAChD,CAAC,CAAC;AAKH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS,GAAG,IAAI,CAgB1E"}
@@ -0,0 +1,60 @@
1
+ import { z, ZodError } from 'zod';
2
+ import { AssistantAuthOutputSchema } from './auth-schema.js';
3
+ import { safeCorrelationId } from './correlation.js';
4
+ import { DataBasinError, publicError } from './errors.js';
5
+ import { assertSafeOutput, sanitizeOutput } from './safety.js';
6
+ export const LOCAL_AUTH_TOOL_NAMES = Object.freeze([
7
+ 'databasin_auth_status',
8
+ 'databasin_login'
9
+ ]);
10
+ const emptyInput = z.object({}).strict();
11
+ const annotations = { readOnlyHint: true, destructiveHint: false, openWorldHint: false };
12
+ export function registerAuthTools(server, auth) {
13
+ server.registerTool(LOCAL_AUTH_TOOL_NAMES[0], {
14
+ title: 'Check DataBasin sign-in',
15
+ description: 'Check local sign-in state without returning account identity or credentials.',
16
+ inputSchema: emptyInput,
17
+ outputSchema: AssistantAuthOutputSchema,
18
+ annotations
19
+ }, async (_input, context) => authToolResult(() => auth.getLoginStatus(), context));
20
+ server.registerTool(LOCAL_AUTH_TOOL_NAMES[1], {
21
+ title: 'Sign in to DataBasin',
22
+ description: 'Start Microsoft device sign-in. Enter credentials only on Microsoft\'s page; never provide credentials in chat.',
23
+ inputSchema: emptyInput,
24
+ outputSchema: AssistantAuthOutputSchema,
25
+ annotations: { ...annotations, readOnlyHint: false, openWorldHint: true }
26
+ }, async (_input, context) => authToolResult(() => auth.startLogin(), context));
27
+ }
28
+ async function authToolResult(operation, _context) {
29
+ try {
30
+ const output = AssistantAuthOutputSchema.parse(sanitizeOutput(await operation()));
31
+ const result = { ...output, message: authOutputMessage(output) };
32
+ assertSafeOutput(result);
33
+ return {
34
+ content: [{ type: 'text', text: JSON.stringify(result) }],
35
+ structuredContent: result
36
+ };
37
+ }
38
+ catch (error) {
39
+ const normalized = error instanceof ZodError
40
+ ? new DataBasinError('INVALID_ARGUMENT', error.issues[0]?.message ?? 'The tool arguments are invalid.')
41
+ : error;
42
+ const visible = publicError(normalized);
43
+ const { correlationId, ...publicFields } = visible;
44
+ const safe = { ...publicFields, correlationId: safeCorrelationId(correlationId) };
45
+ return { content: [{ type: 'text', text: JSON.stringify(safe) }], isError: true };
46
+ }
47
+ }
48
+ function authOutputMessage(output) {
49
+ if (output.status === 'pending') {
50
+ return output.loginUrl === null
51
+ ? 'Microsoft is preparing the device sign-in instructions.'
52
+ : 'Microsoft device sign-in is ready. Use the approved login URL and user code, then call databasin_auth_status.';
53
+ }
54
+ if (output.status === 'authenticated')
55
+ return 'DataBasin sign-in is complete.';
56
+ if (output.status === 'not_authenticated')
57
+ return 'DataBasin is not signed in. Call databasin_login to begin.';
58
+ return 'DataBasin sign-in did not complete. Call databasin_login to try again.';
59
+ }
60
+ //# sourceMappingURL=auth-tools.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth-tools.js","sourceRoot":"","sources":["../src/auth-tools.ts"],"names":[],"mappings":"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"}
package/dist/cli.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AAMA,OAAO,EAAkC,KAAK,oBAAoB,EAAE,MAAM,aAAa,CAAC;AAIxF,KAAK,OAAO,GAAG,OAAO,GAAG,OAAO,GAAG,QAAQ,GAAG,QAAQ,GAAG,QAAQ,GAAG,MAAM,GAAG,SAAS,CAAC;AAEvF,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,OAAO,CAAC;IACjB,WAAW,EAAE,oBAAoB,CAAC;CACnC;AAED,UAAU,OAAO;IACf,KAAK,IAAI,OAAO,CAAC;QAAE,QAAQ,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACxC,MAAM,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC;IAC1B,MAAM,IAAI,OAAO,CAAC;QAAE,aAAa,EAAE,OAAO,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CAClE;AAED,UAAU,eAAe;IACvB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACxB;AAED,MAAM,WAAW,eAAe;IAC9B,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACnC,UAAU,CAAC,WAAW,EAAE,oBAAoB,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAChE,KAAK,CAAC,WAAW,EAAE,oBAAoB,GAAG,OAAO,CAAC,eAAe,CAAC,CAAC;IACnE,UAAU,CAAC,MAAM,EAAE,QAAQ,GAAG,SAAS,EAAE,QAAQ,EAAE,MAAM,IAAI,GAAG,IAAI,CAAC;IACrE,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,eAAe,CAAC,EAAE,MAAM,CAAC,QAAQ,CAAC;CACnC;AAED,MAAM,WAAW,sBAAsB;IACrC,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACnC,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IAClC,IAAI,IAAI,IAAI,CAAC;CACd;AAeD,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,UAAU,CAMvD;AAuCD,wBAAsB,MAAM,CAC1B,IAAI,EAAE,MAAM,EAAE,EACd,YAAY,GAAE,eAAsC,GACnD,OAAO,CAAC,IAAI,CAAC,CAef;AAuED,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAM/D;AA4CD,wBAAsB,aAAa,CACjC,IAAI,EAAE,MAAM,EAAE,EACd,YAAY,GAAE,sBAAwD,GACrE,OAAO,CAAC,IAAI,CAAC,CAQf;AAED,wBAAgB,YAAY,CAC1B,cAAc,GAAE,MAAM,GAAG,SAA2B,EACpD,UAAU,SAAiC,GAC1C,OAAO,CAOT"}
1
+ {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AAMA,OAAO,EAAkC,KAAK,oBAAoB,EAAE,MAAM,aAAa,CAAC;AAKxF,KAAK,OAAO,GAAG,OAAO,GAAG,OAAO,GAAG,QAAQ,GAAG,QAAQ,GAAG,QAAQ,GAAG,MAAM,GAAG,SAAS,CAAC;AAEvF,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,OAAO,CAAC;IACjB,WAAW,EAAE,oBAAoB,CAAC;CACnC;AAED,UAAU,OAAO;IACf,KAAK,IAAI,OAAO,CAAC;QAAE,QAAQ,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACxC,MAAM,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC;IAC1B,MAAM,IAAI,OAAO,CAAC;QAAE,aAAa,EAAE,OAAO,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CAClE;AAED,UAAU,eAAe;IACvB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACxB;AAED,MAAM,WAAW,eAAe;IAC9B,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACnC,UAAU,CAAC,WAAW,EAAE,oBAAoB,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAChE,KAAK,CAAC,WAAW,EAAE,oBAAoB,GAAG,OAAO,CAAC,eAAe,CAAC,CAAC;IACnE,UAAU,CAAC,MAAM,EAAE,QAAQ,GAAG,SAAS,EAAE,QAAQ,EAAE,MAAM,IAAI,GAAG,IAAI,CAAC;IACrE,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,eAAe,CAAC,EAAE,MAAM,CAAC,QAAQ,CAAC;CACnC;AAED,MAAM,WAAW,sBAAsB;IACrC,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACnC,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IAClC,IAAI,IAAI,IAAI,CAAC;CACd;AAeD,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,UAAU,CAMvD;AAuCD,wBAAsB,MAAM,CAC1B,IAAI,EAAE,MAAM,EAAE,EACd,YAAY,GAAE,eAAsC,GACnD,OAAO,CAAC,IAAI,CAAC,CAef;AAuED,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAM/D;AA4CD,wBAAsB,aAAa,CACjC,IAAI,EAAE,MAAM,EAAE,EACd,YAAY,GAAE,sBAAwD,GACrE,OAAO,CAAC,IAAI,CAAC,CAQf;AAED,wBAAgB,YAAY,CAC1B,cAAc,GAAE,MAAM,GAAG,SAA2B,EACpD,UAAU,SAAiC,GAC1C,OAAO,CAOT"}
package/dist/cli.js CHANGED
@@ -3,6 +3,7 @@ import { realpathSync } from 'node:fs';
3
3
  import { fileURLToPath } from 'node:url';
4
4
  import { AuthManager } from './auth.js';
5
5
  import { getProfile, resolveEnvironment } from './config.js';
6
+ import { mcpEndpointForProfile } from './mcp-endpoint.js';
6
7
  import { serveDataBasinStdio } from './server.js';
7
8
  import { VERSION } from './version.js';
8
9
  const COMMAND_FLAGS = Object.freeze({
@@ -114,7 +115,7 @@ async function runDoctor(profile, auth, dependencies) {
114
115
  `Environment: ${profile.label} (${profile.environment})`,
115
116
  `Node.js: ${runtimeVersion} (${supported ? 'supported' : 'unsupported'})`,
116
117
  `Platform: ${runtimePlatform}`,
117
- `Facade: ${profile.apiBaseUrl}`
118
+ `MCP endpoint: ${mcpEndpointForProfile(profile)}`
118
119
  ];
119
120
  try {
120
121
  const status = await auth.status();
package/dist/cli.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -1,3 +1,3 @@
1
1
  export { SUPPORTED_ENVIRONMENTS, type DataBasinEnvironment } from './config.js';
2
- export { TOOL_NAMES } from './tools.js';
2
+ export { LOCAL_AUTH_TOOL_NAMES } from './auth-tools.js';
3
3
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,KAAK,oBAAoB,EAAE,MAAM,aAAa,CAAC;AAChF,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,KAAK,oBAAoB,EAAE,MAAM,aAAa,CAAC;AAChF,OAAO,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAC"}
package/dist/index.js CHANGED
@@ -1,3 +1,3 @@
1
1
  export { SUPPORTED_ENVIRONMENTS } from './config.js';
2
- export { TOOL_NAMES } from './tools.js';
2
+ export { LOCAL_AUTH_TOOL_NAMES } from './auth-tools.js';
3
3
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAA6B,MAAM,aAAa,CAAC;AAChF,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAA6B,MAAM,aAAa,CAAC;AAChF,OAAO,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAC"}
@@ -0,0 +1,5 @@
1
+ import { type DataBasinProfile } from './config.js';
2
+ export declare const MCP_ENDPOINT_PATH: "/mcp";
3
+ export declare function mcpEndpointForProfile(profile: DataBasinProfile): URL;
4
+ export declare function assertBuiltInProfile(profile: DataBasinProfile): void;
5
+ //# sourceMappingURL=mcp-endpoint.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcp-endpoint.d.ts","sourceRoot":"","sources":["../src/mcp-endpoint.ts"],"names":[],"mappings":"AAAA,OAAO,EAAc,KAAK,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAEhE,eAAO,MAAM,iBAAiB,EAAG,MAAe,CAAC;AAEjD,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,gBAAgB,GAAG,GAAG,CAOpE;AAED,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,gBAAgB,GAAG,IAAI,CASpE"}
@@ -0,0 +1,22 @@
1
+ import { getProfile } from './config.js';
2
+ export const MCP_ENDPOINT_PATH = '/mcp';
3
+ export function mcpEndpointForProfile(profile) {
4
+ assertBuiltInProfile(profile);
5
+ const endpoint = new URL(profile.apiBaseUrl);
6
+ endpoint.pathname = MCP_ENDPOINT_PATH;
7
+ endpoint.search = '';
8
+ endpoint.hash = '';
9
+ return endpoint;
10
+ }
11
+ export function assertBuiltInProfile(profile) {
12
+ const expected = getProfile(profile.environment);
13
+ const matches = profile.label === expected.label
14
+ && profile.apiBaseUrl === expected.apiBaseUrl
15
+ && profile.tenantId === expected.tenantId
16
+ && profile.clientId === expected.clientId
17
+ && profile.scopes.length === expected.scopes.length
18
+ && profile.scopes.every((scope, index) => scope === expected.scopes[index]);
19
+ if (!matches)
20
+ throw new Error('Only the built-in DataBasin production and NP profiles are permitted.');
21
+ }
22
+ //# sourceMappingURL=mcp-endpoint.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcp-endpoint.js","sourceRoot":"","sources":["../src/mcp-endpoint.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAyB,MAAM,aAAa,CAAC;AAEhE,MAAM,CAAC,MAAM,iBAAiB,GAAG,MAAe,CAAC;AAEjD,MAAM,UAAU,qBAAqB,CAAC,OAAyB;IAC7D,oBAAoB,CAAC,OAAO,CAAC,CAAC;IAC9B,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;IAC7C,QAAQ,CAAC,QAAQ,GAAG,iBAAiB,CAAC;IACtC,QAAQ,CAAC,MAAM,GAAG,EAAE,CAAC;IACrB,QAAQ,CAAC,IAAI,GAAG,EAAE,CAAC;IACnB,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,OAAyB;IAC5D,MAAM,QAAQ,GAAG,UAAU,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;IACjD,MAAM,OAAO,GAAG,OAAO,CAAC,KAAK,KAAK,QAAQ,CAAC,KAAK;WAC3C,OAAO,CAAC,UAAU,KAAK,QAAQ,CAAC,UAAU;WAC1C,OAAO,CAAC,QAAQ,KAAK,QAAQ,CAAC,QAAQ;WACtC,OAAO,CAAC,QAAQ,KAAK,QAAQ,CAAC,QAAQ;WACtC,OAAO,CAAC,MAAM,CAAC,MAAM,KAAK,QAAQ,CAAC,MAAM,CAAC,MAAM;WAChD,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE,CAAC,KAAK,KAAK,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;IAC9E,IAAI,CAAC,OAAO;QAAE,MAAM,IAAI,KAAK,CAAC,uEAAuE,CAAC,CAAC;AACzG,CAAC"}
@@ -0,0 +1,5 @@
1
+ import { type Tool } from '@modelcontextprotocol/client';
2
+ import { McpServer } from '@modelcontextprotocol/server';
3
+ import type { RemoteMcp } from './remote-mcp.js';
4
+ export declare function registerRemoteTools(server: McpServer, remote: RemoteMcp, tools: readonly Tool[]): readonly string[];
5
+ //# sourceMappingURL=proxy-tools.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"proxy-tools.d.ts","sourceRoot":"","sources":["../src/proxy-tools.ts"],"names":[],"mappings":"AAAA,OAAO,EAAuC,KAAK,IAAI,EAAE,MAAM,8BAA8B,CAAC;AAC9F,OAAO,EAAE,SAAS,EAAE,MAAM,8BAA8B,CAAC;AAIzD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAEjD,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,SAAS,EACjB,MAAM,EAAE,SAAS,EACjB,KAAK,EAAE,SAAS,IAAI,EAAE,GACrB,SAAS,MAAM,EAAE,CAQnB"}
@@ -0,0 +1,39 @@
1
+ import { fromJsonSchema } from '@modelcontextprotocol/client';
2
+ import { safeCorrelationId } from './correlation.js';
3
+ import { publicError } from './errors.js';
4
+ import { LOCAL_AUTH_TOOL_NAMES } from './auth-tools.js';
5
+ export function registerRemoteTools(server, remote, tools) {
6
+ const names = new Set(LOCAL_AUTH_TOOL_NAMES);
7
+ for (const tool of tools) {
8
+ if (names.has(tool.name))
9
+ throw new Error(`The remote MCP server advertised duplicate tool "${tool.name}".`);
10
+ names.add(tool.name);
11
+ registerRemoteTool(server, remote, tool);
12
+ }
13
+ return tools.map((tool) => tool.name);
14
+ }
15
+ function registerRemoteTool(server, remote, tool) {
16
+ const outputSchema = tool.outputSchema
17
+ ? fromJsonSchema(tool.outputSchema)
18
+ : undefined;
19
+ server.registerTool(tool.name, {
20
+ ...(tool.title ? { title: tool.title } : {}),
21
+ ...(tool.description ? { description: tool.description } : {}),
22
+ inputSchema: fromJsonSchema(tool.inputSchema),
23
+ ...(outputSchema ? { outputSchema } : {}),
24
+ ...(tool.annotations ? { annotations: tool.annotations } : {}),
25
+ ...(tool.icons ? { icons: [...tool.icons] } : {}),
26
+ ...(tool._meta ? { _meta: tool._meta } : {})
27
+ }, async (args, context) => {
28
+ try {
29
+ return await remote.callTool(tool, args, context.mcpReq.signal);
30
+ }
31
+ catch (error) {
32
+ const visible = publicError(error);
33
+ const { correlationId, ...publicFields } = visible;
34
+ const safe = { ...publicFields, correlationId: safeCorrelationId(correlationId) };
35
+ return { content: [{ type: 'text', text: JSON.stringify(safe) }], isError: true };
36
+ }
37
+ });
38
+ }
39
+ //# sourceMappingURL=proxy-tools.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"proxy-tools.js","sourceRoot":"","sources":["../src/proxy-tools.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,27 @@
1
+ import { type CallToolResult, type FetchLike, type Tool } from '@modelcontextprotocol/client';
2
+ import type { DataBasinProfile } from './config.js';
3
+ export declare const REMOTE_PROTOCOL_VERSION: "2026-07-28";
4
+ export interface RemoteMcp {
5
+ connect(): Promise<readonly Tool[]>;
6
+ callTool(tool: Tool, args: unknown, signal?: AbortSignal): Promise<CallToolResult>;
7
+ close(): Promise<void>;
8
+ }
9
+ export type RemoteAuth = Readonly<{
10
+ profile: DataBasinProfile;
11
+ getAccessToken(): Promise<string>;
12
+ }>;
13
+ export type OfficialRemoteMcpOptions = Readonly<{
14
+ auth: RemoteAuth;
15
+ fetchImpl?: FetchLike;
16
+ }>;
17
+ export declare class OfficialRemoteMcp implements RemoteMcp {
18
+ private readonly client;
19
+ private readonly transport;
20
+ private connected;
21
+ constructor(options: OfficialRemoteMcpOptions);
22
+ connect(): Promise<readonly Tool[]>;
23
+ callTool(tool: Tool, args: unknown, signal?: AbortSignal): Promise<CallToolResult>;
24
+ close(): Promise<void>;
25
+ }
26
+ export declare function authenticatedFetch(auth: RemoteAuth, fetchImpl: FetchLike): FetchLike;
27
+ //# sourceMappingURL=remote-mcp.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"remote-mcp.d.ts","sourceRoot":"","sources":["../src/remote-mcp.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,KAAK,cAAc,EACnB,KAAK,SAAS,EACd,KAAK,IAAI,EACV,MAAM,8BAA8B,CAAC;AAEtC,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAIpD,eAAO,MAAM,uBAAuB,EAAG,YAAqB,CAAC;AAE7D,MAAM,WAAW,SAAS;IACxB,OAAO,IAAI,OAAO,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC;IACpC,QAAQ,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,cAAc,CAAC,CAAC;IACnF,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACxB;AAED,MAAM,MAAM,UAAU,GAAG,QAAQ,CAAC;IAChC,OAAO,EAAE,gBAAgB,CAAC;IAC1B,cAAc,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC;CACnC,CAAC,CAAC;AAEH,MAAM,MAAM,wBAAwB,GAAG,QAAQ,CAAC;IAC9C,IAAI,EAAE,UAAU,CAAC;IACjB,SAAS,CAAC,EAAE,SAAS,CAAC;CACvB,CAAC,CAAC;AAEH,qBAAa,iBAAkB,YAAW,SAAS;IACjD,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAgC;IAC1D,OAAO,CAAC,SAAS,CAAS;gBAEd,OAAO,EAAE,wBAAwB;IAevC,OAAO,IAAI,OAAO,CAAC,SAAS,IAAI,EAAE,CAAC;IAazC,QAAQ,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,cAAc,CAAC;IAW5E,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;CAI7B;AAED,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,UAAU,EAAE,SAAS,EAAE,SAAS,GAAG,SAAS,CAWpF"}
@@ -0,0 +1,70 @@
1
+ import { Client, StreamableHTTPClientTransport } from '@modelcontextprotocol/client';
2
+ import { randomUUID } from 'node:crypto';
3
+ import { mcpEndpointForProfile } from './mcp-endpoint.js';
4
+ import { VERSION } from './version.js';
5
+ export const REMOTE_PROTOCOL_VERSION = '2026-07-28';
6
+ export class OfficialRemoteMcp {
7
+ client;
8
+ transport;
9
+ connected = false;
10
+ constructor(options) {
11
+ const fetchImpl = authenticatedFetch(options.auth, options.fetchImpl ?? globalThis.fetch);
12
+ this.client = new Client({ name: 'databasin-mcp-client-proxy', version: VERSION }, {
13
+ enforceStrictCapabilities: true,
14
+ versionNegotiation: { mode: { pin: REMOTE_PROTOCOL_VERSION } }
15
+ });
16
+ this.transport = new StreamableHTTPClientTransport(mcpEndpointForProfile(options.auth.profile), {
17
+ fetch: fetchImpl,
18
+ onInsufficientScope: 'throw'
19
+ });
20
+ }
21
+ async connect() {
22
+ if (!this.connected) {
23
+ try {
24
+ await this.client.connect(this.transport);
25
+ this.connected = true;
26
+ }
27
+ catch (error) {
28
+ await this.close();
29
+ throw error;
30
+ }
31
+ }
32
+ return (await this.client.listTools(undefined, { cacheMode: 'refresh' })).tools;
33
+ }
34
+ callTool(tool, args, signal) {
35
+ return this.client.callTool({ name: tool.name, arguments: asArguments(args) }, {
36
+ toolDefinition: tool,
37
+ timeout: requestTimeout(tool),
38
+ ...(signal ? { signal } : {})
39
+ });
40
+ }
41
+ async close() {
42
+ this.connected = false;
43
+ await this.client.close();
44
+ }
45
+ }
46
+ export function authenticatedFetch(auth, fetchImpl) {
47
+ return async (url, init = {}) => {
48
+ const headers = new Headers(init.headers);
49
+ if (headers.get('Mcp-Method') === 'tools/call') {
50
+ headers.set('Authorization', `Bearer ${await auth.getAccessToken()}`);
51
+ headers.set('X-Correlation-Id', randomUUID());
52
+ }
53
+ else {
54
+ headers.delete('Authorization');
55
+ }
56
+ return fetchImpl(url, { ...init, redirect: 'error', headers });
57
+ };
58
+ }
59
+ function asArguments(value) {
60
+ return value && typeof value === 'object' && !Array.isArray(value)
61
+ ? value
62
+ : {};
63
+ }
64
+ function requestTimeout(tool) {
65
+ const value = tool._meta?.['com.databasin/requestTimeoutMs'];
66
+ return typeof value === 'number' && Number.isSafeInteger(value) && value >= 1_000 && value <= 2_000_000
67
+ ? value
68
+ : 60_000;
69
+ }
70
+ //# sourceMappingURL=remote-mcp.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"remote-mcp.js","sourceRoot":"","sources":["../src/remote-mcp.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,MAAM,EACN,6BAA6B,EAI9B,MAAM,8BAA8B,CAAC;AACtC,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAEzC,OAAO,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAC;AAC1D,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAEvC,MAAM,CAAC,MAAM,uBAAuB,GAAG,YAAqB,CAAC;AAkB7D,MAAM,OAAO,iBAAiB;IACX,MAAM,CAAS;IACf,SAAS,CAAgC;IAClD,SAAS,GAAG,KAAK,CAAC;IAE1B,YAAY,OAAiC;QAC3C,MAAM,SAAS,GAAG,kBAAkB,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,SAAS,IAAI,UAAU,CAAC,KAAK,CAAC,CAAC;QAC1F,IAAI,CAAC,MAAM,GAAG,IAAI,MAAM,CACtB,EAAE,IAAI,EAAE,4BAA4B,EAAE,OAAO,EAAE,OAAO,EAAE,EACxD;YACE,yBAAyB,EAAE,IAAI;YAC/B,kBAAkB,EAAE,EAAE,IAAI,EAAE,EAAE,GAAG,EAAE,uBAAuB,EAAE,EAAE;SAC/D,CACF,CAAC;QACF,IAAI,CAAC,SAAS,GAAG,IAAI,6BAA6B,CAAC,qBAAqB,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE;YAC9F,KAAK,EAAE,SAAS;YAChB,mBAAmB,EAAE,OAAO;SAC7B,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,OAAO;QACX,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;YACpB,IAAI,CAAC;gBACH,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;gBAC1C,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;YACxB,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,MAAM,IAAI,CAAC,KAAK,EAAE,CAAC;gBACnB,MAAM,KAAK,CAAC;YACd,CAAC;QACH,CAAC;QACD,OAAO,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC;IAClF,CAAC;IAED,QAAQ,CAAC,IAAU,EAAE,IAAa,EAAE,MAAoB;QACtD,OAAO,IAAI,CAAC,MAAM,CAAC,QAAQ,CACzB,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,SAAS,EAAE,WAAW,CAAC,IAAI,CAAC,EAAE,EACjD;YACE,cAAc,EAAE,IAAI;YACpB,OAAO,EAAE,cAAc,CAAC,IAAI,CAAC;YAC7B,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SAC9B,CACF,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,KAAK;QACT,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;QACvB,MAAM,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;IAC5B,CAAC;CACF;AAED,MAAM,UAAU,kBAAkB,CAAC,IAAgB,EAAE,SAAoB;IACvE,OAAO,KAAK,EAAE,GAAG,EAAE,IAAI,GAAG,EAAE,EAAE,EAAE;QAC9B,MAAM,OAAO,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAC1C,IAAI,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,KAAK,YAAY,EAAE,CAAC;YAC/C,OAAO,CAAC,GAAG,CAAC,eAAe,EAAE,UAAU,MAAM,IAAI,CAAC,cAAc,EAAE,EAAE,CAAC,CAAC;YACtE,OAAO,CAAC,GAAG,CAAC,kBAAkB,EAAE,UAAU,EAAE,CAAC,CAAC;QAChD,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC;QAClC,CAAC;QACD,OAAO,SAAS,CAAC,GAAG,EAAE,EAAE,GAAG,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,CAAC;IACjE,CAAC,CAAC;AACJ,CAAC;AAED,SAAS,WAAW,CAAC,KAAc;IACjC,OAAO,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QAChE,CAAC,CAAC,KAAgC;QAClC,CAAC,CAAC,EAAE,CAAC;AACT,CAAC;AAED,SAAS,cAAc,CAAC,IAAU;IAChC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC,gCAAgC,CAAC,CAAC;IAC7D,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,IAAI,KAAK,IAAI,KAAK,IAAI,KAAK,IAAI,SAAS;QACrG,CAAC,CAAC,KAAK;QACP,CAAC,CAAC,MAAM,CAAC;AACb,CAAC"}