mcp-dataverse 0.1.8 → 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.
- package/CAPABILITIES.md +8 -20
- package/README.md +147 -52
- package/dist/auth/auth-provider.factory.d.ts.map +1 -1
- package/dist/auth/auth-provider.factory.js +2 -12
- package/dist/auth/auth-provider.factory.js.map +1 -1
- package/dist/auth/device-code-auth-provider.d.ts +18 -0
- package/dist/auth/device-code-auth-provider.d.ts.map +1 -0
- package/dist/auth/device-code-auth-provider.js +167 -0
- package/dist/auth/device-code-auth-provider.js.map +1 -0
- package/dist/auth/pac-auth-provider.d.ts +3 -4
- package/dist/auth/pac-auth-provider.d.ts.map +1 -1
- package/dist/auth/pac-auth-provider.js +82 -67
- package/dist/auth/pac-auth-provider.js.map +1 -1
- package/dist/config/config.loader.d.ts.map +1 -1
- package/dist/config/config.loader.js +0 -15
- package/dist/config/config.loader.js.map +1 -1
- package/dist/config/config.schema.d.ts +0 -15
- package/dist/config/config.schema.d.ts.map +1 -1
- package/dist/config/config.schema.js +0 -5
- package/dist/config/config.schema.js.map +1 -1
- package/dist/server.js +9 -0
- package/dist/server.js.map +1 -1
- package/dist/setup-auth.d.ts +1 -0
- package/dist/setup-auth.js +29 -16
- package/dist/setup-auth.js.map +1 -1
- package/package.json +3 -2
- package/server.json +4 -39
package/CAPABILITIES.md
CHANGED
|
@@ -46,7 +46,7 @@
|
|
|
46
46
|
| ------------------------- | ------------------------------------------------------------- |
|
|
47
47
|
| **Node.js** | v20+ |
|
|
48
48
|
| **Dataverse Environment** | Active URL (`https://<org>.crm<N>.dynamics.com`) |
|
|
49
|
-
| **Authentication** |
|
|
49
|
+
| **Authentication** | Device code flow (interactive) via MSAL |
|
|
50
50
|
|
|
51
51
|
### Installation & Configuration
|
|
52
52
|
|
|
@@ -59,11 +59,6 @@ Create `config.json` (see `config.example.json`):
|
|
|
59
59
|
```json
|
|
60
60
|
{
|
|
61
61
|
"environmentUrl": "https://yourorg.crm.dynamics.com",
|
|
62
|
-
"authMode": "pac",
|
|
63
|
-
"pacProfileName": "default",
|
|
64
|
-
"tenantId": "",
|
|
65
|
-
"clientId": "",
|
|
66
|
-
"clientSecret": "",
|
|
67
62
|
"requestTimeoutMs": 30000,
|
|
68
63
|
"maxRetries": 3
|
|
69
64
|
}
|
|
@@ -72,19 +67,14 @@ Create `config.json` (see `config.example.json`):
|
|
|
72
67
|
| Field | Type | Description |
|
|
73
68
|
| ---------------------------------------- | --------------- | ------------------------------------------------------- |
|
|
74
69
|
| `environmentUrl` | `string` | Dataverse environment URL (**required**, must be HTTPS) |
|
|
75
|
-
| `authMode` | `"pac"\|"msal"` | Auth strategy (default: `"pac"`) |
|
|
76
|
-
| `pacProfileName` | `string` | PAC CLI profile (default: `"default"`) |
|
|
77
|
-
| `tenantId` / `clientId` / `clientSecret` | `string` | Required for `authMode: "msal"` |
|
|
78
70
|
| `requestTimeoutMs` | `number` | HTTP timeout ms (default: `30000`) |
|
|
79
71
|
| `maxRetries` | `number` | Max retry attempts 0–10 (default: `3`) |
|
|
80
72
|
|
|
81
|
-
Env vars override config: `DATAVERSE_ENV_URL`, `
|
|
73
|
+
Env vars override config: `DATAVERSE_ENV_URL`, `REQUEST_TIMEOUT_MS`, `MAX_RETRIES`.
|
|
82
74
|
|
|
83
75
|
### Authentication
|
|
84
76
|
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
**MSAL (headless/CI):** Set `authMode: "msal"` with `tenantId`, `clientId`, `clientSecret`. Tokens acquired via OAuth2 `client_credentials`.
|
|
77
|
+
The server uses Microsoft’s device code flow (MSAL Public Client). On first launch, a sign-in code is displayed in the VS Code Output panel. Open `https://microsoft.com/devicelogin`, paste the code, and sign in with your Power Platform work account. Tokens are cached in `~/.mcp-dataverse/` (encrypted) and renewed automatically.
|
|
88
78
|
|
|
89
79
|
### Running
|
|
90
80
|
|
|
@@ -983,12 +973,12 @@ Dataverse error bodies are formatted as `Dataverse error <code>: <message>`. Tim
|
|
|
983
973
|
|
|
984
974
|
## Security
|
|
985
975
|
|
|
986
|
-
| Mode
|
|
987
|
-
|
|
|
988
|
-
| **
|
|
989
|
-
| **msal** | MSAL Confidential Client → `client_credentials` | CI/CD, headless |
|
|
976
|
+
| Mode | Flow | Use Case |
|
|
977
|
+
| ----------------- | ------------------------------------------------- | ---------------------- |
|
|
978
|
+
| **Device Code** | MSAL Public Client → device code + silent refresh | Local dev, interactive |
|
|
990
979
|
|
|
991
980
|
- `clientSecret` is never logged or returned in tool responses.
|
|
981
|
+
- Token cache is encrypted (AES-256-GCM) at `~/.mcp-dataverse/` and should not be shared.
|
|
992
982
|
- OData path segments use `esc()` (single-quote doubling) to prevent OData injection.
|
|
993
983
|
- `columnName` in file tools is validated against `/^[a-zA-Z0-9_]+$/` to prevent path traversal.
|
|
994
984
|
- `MSCRMCallerId` for impersonation is set per-call and cleaned up in a `finally` block regardless of outcome.
|
|
@@ -1026,9 +1016,7 @@ Dataverse error bodies are formatted as `Dataverse error <code>: <message>`. Tim
|
|
|
1026
1016
|
|
|
1027
1017
|
| Limitation | Details |
|
|
1028
1018
|
| ----------------------- | ---------------------------------------------------------------- |
|
|
1029
|
-
| **
|
|
1030
|
-
| **PAC token expiry** | If the refresh token expires, re-run `npm run auth:setup`. |
|
|
1031
|
-
| **MSAL multi-tenant** | Requires explicit `tenantId`; no `common` authority support. |
|
|
1019
|
+
| **Token expiry** | If the refresh token expires (~90 days), re-run `npm run auth:setup`. |
|
|
1032
1020
|
|
|
1033
1021
|
### Dependencies & Solutions
|
|
1034
1022
|
|
package/README.md
CHANGED
|
@@ -8,29 +8,45 @@ MCP server that exposes the Microsoft Dataverse Web API as **50 AI-callable tool
|
|
|
8
8
|
|
|
9
9
|
## Install
|
|
10
10
|
|
|
11
|
-
###
|
|
11
|
+
### ✅ Recommended — VS Code Command Palette
|
|
12
12
|
|
|
13
|
-
|
|
13
|
+
This is the most reliable installation method, confirmed working on both VS Code and VS Code Insiders.
|
|
14
14
|
|
|
15
|
-
|
|
15
|
+
1. Open VS Code
|
|
16
|
+
2. Press **Ctrl+Shift+P** (or **Cmd+Shift+P** on macOS)
|
|
17
|
+
3. Type **`MCP: Add Server`** and select it
|
|
18
|
+
4. Choose **`NPM Package`**
|
|
19
|
+
5. Enter the package name: **`mcp-dataverse`**
|
|
20
|
+
6. Choose the scope: **User** (available in all workspaces) or **Workspace** (current project only)
|
|
16
21
|
|
|
17
|
-
|
|
22
|
+
VS Code will create or update `mcp.json` automatically. Then **edit the generated entry** to add your environment URL:
|
|
18
23
|
|
|
19
|
-
```
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
24
|
+
```jsonc
|
|
25
|
+
// ~/.config/Code/User/mcp.json (User scope)
|
|
26
|
+
// or .vscode/mcp.json (Workspace scope)
|
|
27
|
+
{
|
|
28
|
+
"servers": {
|
|
29
|
+
"mcp-dataverse": {
|
|
30
|
+
"type": "stdio",
|
|
31
|
+
"command": "npx",
|
|
32
|
+
"args": ["-y", "mcp-dataverse"],
|
|
33
|
+
"env": {
|
|
34
|
+
"DATAVERSE_ENV_URL": "https://yourorg.crm.dynamics.com",
|
|
35
|
+
},
|
|
36
|
+
},
|
|
37
|
+
},
|
|
38
|
+
}
|
|
25
39
|
```
|
|
26
40
|
|
|
27
|
-
|
|
41
|
+
Replace `https://yourorg.crm.dynamics.com` with your actual Dataverse environment URL.
|
|
42
|
+
|
|
43
|
+
---
|
|
28
44
|
|
|
29
45
|
### Manual (mcp.json)
|
|
30
46
|
|
|
31
|
-
|
|
47
|
+
Create or edit `.vscode/mcp.json` in your project (workspace scope) or the user-level `mcp.json`:
|
|
32
48
|
|
|
33
|
-
```
|
|
49
|
+
```jsonc
|
|
34
50
|
{
|
|
35
51
|
"servers": {
|
|
36
52
|
"dataverse": {
|
|
@@ -39,18 +55,117 @@ Add to your `.vscode/mcp.json` (or user settings):
|
|
|
39
55
|
"args": ["-y", "mcp-dataverse"],
|
|
40
56
|
"env": {
|
|
41
57
|
"DATAVERSE_ENV_URL": "https://yourorg.crm.dynamics.com",
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
}
|
|
58
|
+
},
|
|
59
|
+
},
|
|
60
|
+
},
|
|
46
61
|
}
|
|
47
62
|
```
|
|
48
63
|
|
|
64
|
+
---
|
|
65
|
+
|
|
66
|
+
### Command line (`code --add-mcp`)
|
|
67
|
+
|
|
68
|
+
> ⚠️ **PowerShell on Windows**: The single-quote JSON syntax is broken in PowerShell 5.1 (double quotes get stripped). Use one of the workarounds below.
|
|
69
|
+
|
|
70
|
+
**Bash / Git Bash / macOS / Linux:**
|
|
71
|
+
|
|
72
|
+
```bash
|
|
73
|
+
code --add-mcp '{"name":"dataverse","type":"stdio","command":"npx","args":["-y","mcp-dataverse"],"env":{"DATAVERSE_ENV_URL":"https://yourorg.crm.dynamics.com"}}'
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
**PowerShell (Windows) — use escaped quotes:**
|
|
77
|
+
|
|
78
|
+
```powershell
|
|
79
|
+
code --add-mcp '{\"name\":\"dataverse\",\"type\":\"stdio\",\"command\":\"npx\",\"args\":[\"-y\",\"mcp-dataverse\"],\"env\":{\"DATAVERSE_ENV_URL\":\"https://yourorg.crm.dynamics.com\"}}'
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
**PowerShell — alternative using a variable:**
|
|
83
|
+
|
|
84
|
+
```powershell
|
|
85
|
+
$cfg = '{"name":"dataverse","type":"stdio","command":"npx","args":["-y","mcp-dataverse"],"env":{"DATAVERSE_ENV_URL":"https://yourorg.crm.dynamics.com"}}'
|
|
86
|
+
code --add-mcp $cfg
|
|
87
|
+
```
|
|
88
|
+
|
|
89
|
+
Replace `https://yourorg.crm.dynamics.com` with your actual Dataverse environment URL.
|
|
90
|
+
|
|
91
|
+
---
|
|
92
|
+
|
|
93
|
+
## Authentication — automatic, no setup required
|
|
94
|
+
|
|
95
|
+
**No PAC CLI, no Azure AD app registration, no credentials to configure.**
|
|
96
|
+
|
|
97
|
+
The server uses Microsoft's device code flow (MSAL Public Client) — the same mechanism used by Power Platform CLI. Zero pre-configuration: just set your environment URL and the server handles the rest.
|
|
98
|
+
|
|
99
|
+
### First connection — what you'll see
|
|
100
|
+
|
|
101
|
+
Authentication is triggered on the **first tool call** after the server starts (e.g. asking Copilot _"Who am I in Dataverse?"_). Here is the exact sequence:
|
|
102
|
+
|
|
103
|
+
**Step 1 — Open the Output panel**
|
|
104
|
+
|
|
105
|
+
In VS Code: **View → Output** → select **MCP** in the dropdown.
|
|
106
|
+
|
|
107
|
+
**Step 2 — The sign-in prompt appears**
|
|
108
|
+
|
|
109
|
+
```
|
|
110
|
+
[mcp-dataverse] First-time authentication required.
|
|
111
|
+
Environment: https://yourorg.crm.dynamics.com
|
|
112
|
+
Open the URL below in your browser to sign in.
|
|
113
|
+
|
|
114
|
+
[mcp-dataverse] Sign in required
|
|
115
|
+
|
|
116
|
+
1. Open https://microsoft.com/devicelogin in your browser
|
|
117
|
+
(use the browser profile linked to your Power Platform account)
|
|
118
|
+
2. Paste the code: ABCD-1234 (already copied to your clipboard)
|
|
119
|
+
3. Sign in with your work account
|
|
120
|
+
```
|
|
121
|
+
|
|
122
|
+
**Step 3 — Sign in**
|
|
123
|
+
|
|
124
|
+
1. Open `https://microsoft.com/devicelogin` in the browser/profile linked to your **Power Platform work account**
|
|
125
|
+
2. Paste the code — it's already in your clipboard
|
|
126
|
+
3. Complete Microsoft sign-in with your work account
|
|
127
|
+
|
|
128
|
+
**Step 4 — Confirmation in the Output panel**
|
|
129
|
+
|
|
130
|
+
```
|
|
131
|
+
[mcp-dataverse] Authenticated ✓ Token cached — no sign-in needed next time.
|
|
132
|
+
```
|
|
133
|
+
|
|
134
|
+
The tool call that triggered auth now completes. All 50 tools are ready to use.
|
|
135
|
+
|
|
136
|
+
> ⏱ The code expires after **5 minutes**. If it times out, retry the tool call — a new code will be generated.
|
|
137
|
+
|
|
138
|
+
> **Why not auto-open the browser?** Consultants often work with multiple browser profiles (personal vs. work). Device code flow intentionally lets _you_ choose the right browser and profile.
|
|
139
|
+
|
|
140
|
+
### Subsequent launches
|
|
141
|
+
|
|
142
|
+
The token is cached encrypted (AES-256-GCM) in `~/.mcp-dataverse/`. On all future server starts, renewal is **completely silent** — no prompt, no browser.
|
|
143
|
+
|
|
144
|
+
You only need to re-authenticate if the refresh token expires (~90 days of inactivity) or you reset it manually:
|
|
145
|
+
|
|
146
|
+
```bash
|
|
147
|
+
npx mcp-dataverse-auth https://yourorg.crm.dynamics.com
|
|
148
|
+
```
|
|
149
|
+
|
|
150
|
+
When re-auth is needed, the Output panel shows:
|
|
151
|
+
|
|
152
|
+
```
|
|
153
|
+
[mcp-dataverse] Session expired — re-authenticating.
|
|
154
|
+
Open the URL below in your browser to sign in again.
|
|
155
|
+
|
|
156
|
+
[mcp-dataverse] Sign in required
|
|
157
|
+
...
|
|
158
|
+
```
|
|
159
|
+
|
|
160
|
+
The same device code process applies.
|
|
161
|
+
|
|
162
|
+
---
|
|
163
|
+
|
|
49
164
|
## Prerequisites
|
|
50
165
|
|
|
51
166
|
- Node.js 20+
|
|
52
|
-
- PAC CLI installed & authenticated → [aka.ms/PowerAppsCLI](https://aka.ms/PowerAppsCLI)
|
|
53
167
|
- VS Code + GitHub Copilot (Agent mode)
|
|
168
|
+
- A Dataverse environment with a licensed user account
|
|
54
169
|
|
|
55
170
|
## Quick Start (< 5 min)
|
|
56
171
|
|
|
@@ -72,8 +187,6 @@ Edit `config.json`:
|
|
|
72
187
|
| Field | Description |
|
|
73
188
|
| ------------------ | ----------------------------------------------------- |
|
|
74
189
|
| `environmentUrl` | Your org URL, e.g. `https://yourorg.crm.dynamics.com` |
|
|
75
|
-
| `authMode` | `"pac"` (recommended) or `"msal"` |
|
|
76
|
-
| `pacProfileName` | PAC CLI profile name (default: `"default"`) |
|
|
77
190
|
| `requestTimeoutMs` | HTTP timeout in ms (default: `30000`) |
|
|
78
191
|
| `maxRetries` | Retry count on transient errors (default: `3`) |
|
|
79
192
|
|
|
@@ -83,9 +196,7 @@ Edit `config.json`:
|
|
|
83
196
|
npm run auth:setup
|
|
84
197
|
```
|
|
85
198
|
|
|
86
|
-
Runs device code authentication. Follow the URL printed to the terminal — sign in with your Power Platform account. Token is cached
|
|
87
|
-
|
|
88
|
-
> Only required for `authMode: "pac"`. Skip if PAC CLI (`pac auth create`) is already authenticated.
|
|
199
|
+
Runs device code authentication. Follow the URL printed to the terminal — sign in with your Power Platform account. Token is cached and silently renewed.
|
|
89
200
|
|
|
90
201
|
### 4. Build
|
|
91
202
|
|
|
@@ -185,24 +296,6 @@ WhoAmI result: { UserId: 'xxxxxxxx-...', BusinessUnitId: 'xxxxxxxx-...', Organiz
|
|
|
185
296
|
|
|
186
297
|
---
|
|
187
298
|
|
|
188
|
-
## Advanced Configuration (MSAL)
|
|
189
|
-
|
|
190
|
-
For service-principal auth (CI/CD, unattended), set `authMode: "msal"` in `config.json`:
|
|
191
|
-
|
|
192
|
-
```json
|
|
193
|
-
{
|
|
194
|
-
"environmentUrl": "https://yourorg.crm.dynamics.com",
|
|
195
|
-
"authMode": "msal",
|
|
196
|
-
"tenantId": "<azure-ad-tenant-id>",
|
|
197
|
-
"clientId": "<app-registration-client-id>",
|
|
198
|
-
"clientSecret": "<client-secret>"
|
|
199
|
-
}
|
|
200
|
-
```
|
|
201
|
-
|
|
202
|
-
> The app registration must have the **Dynamics CRM → user_impersonation** API permission and the corresponding Dataverse security role.
|
|
203
|
-
|
|
204
|
-
---
|
|
205
|
-
|
|
206
299
|
## Scripts
|
|
207
300
|
|
|
208
301
|
| Command | Description |
|
|
@@ -221,29 +314,31 @@ For service-principal auth (CI/CD, unattended), set `authMode: "msal"` in `confi
|
|
|
221
314
|
|
|
222
315
|
## Architecture
|
|
223
316
|
|
|
224
|
-
TypeScript MCP server over **stdio** transport.
|
|
317
|
+
TypeScript MCP server over **stdio** transport. The `DeviceCodeAuthProvider` (MSAL device code flow) injects Bearer tokens into a native-`fetch`-based `HttpClient` wrapped by `DataverseClient`. Each tool module registers handlers with the MCP `Server` instance.
|
|
225
318
|
|
|
226
319
|
```
|
|
227
320
|
GitHub Copilot → stdio → MCP Server → Tool Router → DataverseClient → Dataverse Web API v9.2
|
|
228
|
-
└──
|
|
321
|
+
└── DeviceCodeAuthProvider (MSAL)
|
|
229
322
|
```
|
|
230
323
|
|
|
231
324
|
---
|
|
232
325
|
|
|
233
326
|
## Security
|
|
234
327
|
|
|
235
|
-
- **Never commit `config.json`**
|
|
328
|
+
- **Never commit `config.json`** — it is in `.gitignore`
|
|
329
|
+
- Token cache (`~/.mcp-dataverse/`) is encrypted (AES-256-GCM) and should not be shared
|
|
236
330
|
- Tokens are never logged; only diagnostic messages are written to stderr
|
|
237
|
-
-
|
|
238
|
-
- Service principal (`msal`) should be assigned the least-privilege Dataverse security role
|
|
331
|
+
- Tokens are scoped to the authenticated user — no privilege escalation
|
|
239
332
|
|
|
240
333
|
---
|
|
241
334
|
|
|
242
335
|
## Troubleshooting
|
|
243
336
|
|
|
244
|
-
| Symptom | Fix
|
|
245
|
-
| ------------------------------------------ |
|
|
246
|
-
|
|
|
247
|
-
|
|
|
248
|
-
| `
|
|
249
|
-
|
|
|
337
|
+
| Symptom | Fix |
|
|
338
|
+
| ------------------------------------------ | -------------------------------------------------------------------------------- |
|
|
339
|
+
| No sign-in prompt appeared | Open **View → Output → MCP** in VS Code — the device code is displayed there |
|
|
340
|
+
| Browser didn't open automatically | Copy the URL from the Output panel manually: `https://microsoft.com/devicelogin` |
|
|
341
|
+
| `No MSAL accounts found` | Run `npx mcp-dataverse-auth` to re-authenticate, then restart the server |
|
|
342
|
+
| `Authentication timed out` | The 5-minute window expired — restart the MCP server to get a new code |
|
|
343
|
+
| `"https://" is required` | Check `DATAVERSE_ENV_URL` in your `mcp.json` — must start with `https://` |
|
|
344
|
+
| Server not appearing in Copilot Agent mode | Restart VS Code; check **Output → MCP** panel for errors |
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auth-provider.factory.d.ts","sourceRoot":"","sources":["../../src/auth/auth-provider.factory.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAC;
|
|
1
|
+
{"version":3,"file":"auth-provider.factory.d.ts","sourceRoot":"","sources":["../../src/auth/auth-provider.factory.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAC;AAEjE,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,4BAA4B,CAAC;AAEzD,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,MAAM,GAAG,YAAY,CAE/D"}
|
|
@@ -1,15 +1,5 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { MsalAuthProvider } from "./msal-auth-provider.js";
|
|
1
|
+
import { DeviceCodeAuthProvider } from "./device-code-auth-provider.js";
|
|
3
2
|
export function createAuthProvider(config) {
|
|
4
|
-
|
|
5
|
-
case "pac":
|
|
6
|
-
return new PacAuthProvider(config.environmentUrl);
|
|
7
|
-
case "msal":
|
|
8
|
-
return new MsalAuthProvider(config);
|
|
9
|
-
default: {
|
|
10
|
-
const _exhaustive = config.authMode;
|
|
11
|
-
throw new Error(`Unknown auth mode: ${_exhaustive}`);
|
|
12
|
-
}
|
|
13
|
-
}
|
|
3
|
+
return new DeviceCodeAuthProvider(config.environmentUrl);
|
|
14
4
|
}
|
|
15
5
|
//# sourceMappingURL=auth-provider.factory.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auth-provider.factory.js","sourceRoot":"","sources":["../../src/auth/auth-provider.factory.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"auth-provider.factory.js","sourceRoot":"","sources":["../../src/auth/auth-provider.factory.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,sBAAsB,EAAE,MAAM,gCAAgC,CAAC;AAGxE,MAAM,UAAU,kBAAkB,CAAC,MAAc;IAC/C,OAAO,IAAI,sBAAsB,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC;AAC3D,CAAC"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type { AuthProvider } from "./auth-provider.interface.js";
|
|
2
|
+
export declare class DeviceCodeAuthProvider implements AuthProvider {
|
|
3
|
+
readonly environmentUrl: string;
|
|
4
|
+
private readonly pca;
|
|
5
|
+
private cachedToken;
|
|
6
|
+
private tokenExpiresAt;
|
|
7
|
+
private pendingAuth;
|
|
8
|
+
constructor(environmentUrl: string);
|
|
9
|
+
getToken(): Promise<string>;
|
|
10
|
+
invalidateToken(): void;
|
|
11
|
+
isAuthenticated(): Promise<boolean>;
|
|
12
|
+
setupViaDeviceCode(): Promise<void>;
|
|
13
|
+
private refreshToken;
|
|
14
|
+
private acquireSilently;
|
|
15
|
+
private runDeviceCodeFlow;
|
|
16
|
+
private cacheResult;
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=device-code-auth-provider.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"device-code-auth-provider.d.ts","sourceRoot":"","sources":["../../src/auth/device-code-auth-provider.ts"],"names":[],"mappings":"AAiBA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAC;AA+DjE,qBAAa,sBAAuB,YAAW,YAAY;IACzD,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAA0B;IAC9C,OAAO,CAAC,WAAW,CAAuB;IAC1C,OAAO,CAAC,cAAc,CAAa;IACnC,OAAO,CAAC,WAAW,CAAgC;gBAEvC,cAAc,EAAE,MAAM;IAQ5B,QAAQ,IAAI,OAAO,CAAC,MAAM,CAAC;IAQjC,eAAe,IAAI,IAAI;IAEjB,eAAe,IAAI,OAAO,CAAC,OAAO,CAAC;IAInC,kBAAkB,IAAI,OAAO,CAAC,IAAI,CAAC;YAE3B,YAAY;YAsBZ,eAAe;YASf,iBAAiB;IAuB/B,OAAO,CAAC,WAAW;CAIpB"}
|
|
@@ -0,0 +1,167 @@
|
|
|
1
|
+
import { PublicClientApplication, } from "@azure/msal-node";
|
|
2
|
+
import { existsSync, mkdirSync, readFileSync, writeFileSync } from "fs";
|
|
3
|
+
import { homedir } from "os";
|
|
4
|
+
import { join } from "path";
|
|
5
|
+
import { exec } from "child_process";
|
|
6
|
+
import { platform } from "process";
|
|
7
|
+
import { createCipheriv, createDecipheriv, createHash, randomBytes, } from "crypto";
|
|
8
|
+
function copyToClipboard(text) {
|
|
9
|
+
const cmd = platform === "win32" ? `echo|set /p="${text}"| clip`
|
|
10
|
+
: platform === "darwin" ? `printf '%s' '${text}' | pbcopy`
|
|
11
|
+
: `printf '%s' '${text}' | xclip -selection clipboard 2>/dev/null || printf '%s' '${text}' | xsel --clipboard 2>/dev/null`;
|
|
12
|
+
exec(cmd, () => { });
|
|
13
|
+
}
|
|
14
|
+
const PLATFORM_CLIENT_ID = "1950a258-227b-4e31-a9cf-717495945fc2";
|
|
15
|
+
const CACHE_DIR = join(homedir(), ".mcp-dataverse");
|
|
16
|
+
const TOKEN_CACHE_FILE = join(CACHE_DIR, "msal-cache.json");
|
|
17
|
+
const DEVICE_CODE_TIMEOUT_MS = 5 * 60 * 1000;
|
|
18
|
+
function getDerivedKey() {
|
|
19
|
+
const seed = [
|
|
20
|
+
process.env["COMPUTERNAME"] ?? process.env["HOSTNAME"] ?? "",
|
|
21
|
+
process.env["USERNAME"] ?? process.env["USER"] ?? "",
|
|
22
|
+
"mcp-dataverse-cache-v1",
|
|
23
|
+
].join(".");
|
|
24
|
+
return createHash("sha256").update(seed).digest();
|
|
25
|
+
}
|
|
26
|
+
function encryptForDisk(plaintext) {
|
|
27
|
+
const key = getDerivedKey();
|
|
28
|
+
const iv = randomBytes(16);
|
|
29
|
+
const cipher = createCipheriv("aes-256-gcm", key, iv);
|
|
30
|
+
const encrypted = Buffer.concat([cipher.update(plaintext, "utf-8"), cipher.final()]);
|
|
31
|
+
return JSON.stringify({ v: 1, iv: iv.toString("hex"), tag: cipher.getAuthTag().toString("hex"), d: encrypted.toString("hex") });
|
|
32
|
+
}
|
|
33
|
+
function decryptFromDisk(raw) {
|
|
34
|
+
const parsed = JSON.parse(raw);
|
|
35
|
+
if (parsed["v"] !== 1)
|
|
36
|
+
throw new Error("Unknown cache format version");
|
|
37
|
+
const iv = Buffer.from(parsed["iv"], "hex");
|
|
38
|
+
const tag = Buffer.from(parsed["tag"], "hex");
|
|
39
|
+
const encrypted = Buffer.from(parsed["d"], "hex");
|
|
40
|
+
const decipher = createDecipheriv("aes-256-gcm", getDerivedKey(), iv);
|
|
41
|
+
decipher.setAuthTag(tag);
|
|
42
|
+
return decipher.update(encrypted).toString("utf-8") + decipher.final("utf-8");
|
|
43
|
+
}
|
|
44
|
+
function createCachePlugin() {
|
|
45
|
+
return {
|
|
46
|
+
beforeCacheAccess: async (cacheContext) => {
|
|
47
|
+
if (existsSync(TOKEN_CACHE_FILE)) {
|
|
48
|
+
try {
|
|
49
|
+
const raw = readFileSync(TOKEN_CACHE_FILE, "utf-8");
|
|
50
|
+
let serialized;
|
|
51
|
+
try {
|
|
52
|
+
serialized = decryptFromDisk(raw);
|
|
53
|
+
}
|
|
54
|
+
catch {
|
|
55
|
+
serialized = raw;
|
|
56
|
+
}
|
|
57
|
+
cacheContext.tokenCache.deserialize(serialized);
|
|
58
|
+
}
|
|
59
|
+
catch { /* corrupt cache — re-auth automatically */ }
|
|
60
|
+
}
|
|
61
|
+
},
|
|
62
|
+
afterCacheAccess: async (cacheContext) => {
|
|
63
|
+
if (cacheContext.cacheHasChanged) {
|
|
64
|
+
mkdirSync(CACHE_DIR, { recursive: true });
|
|
65
|
+
writeFileSync(TOKEN_CACHE_FILE, encryptForDisk(cacheContext.tokenCache.serialize()), { encoding: "utf-8", mode: 0o600 });
|
|
66
|
+
}
|
|
67
|
+
},
|
|
68
|
+
};
|
|
69
|
+
}
|
|
70
|
+
export class DeviceCodeAuthProvider {
|
|
71
|
+
environmentUrl;
|
|
72
|
+
pca;
|
|
73
|
+
cachedToken = null;
|
|
74
|
+
tokenExpiresAt = 0;
|
|
75
|
+
pendingAuth = null;
|
|
76
|
+
constructor(environmentUrl) {
|
|
77
|
+
this.environmentUrl = environmentUrl.replace(/\/$/, "");
|
|
78
|
+
this.pca = new PublicClientApplication({
|
|
79
|
+
auth: { clientId: PLATFORM_CLIENT_ID, authority: "https://login.microsoftonline.com/common" },
|
|
80
|
+
cache: { cachePlugin: createCachePlugin() },
|
|
81
|
+
});
|
|
82
|
+
}
|
|
83
|
+
async getToken() {
|
|
84
|
+
const now = Date.now();
|
|
85
|
+
if (this.cachedToken !== null && this.tokenExpiresAt > now + 60_000)
|
|
86
|
+
return this.cachedToken;
|
|
87
|
+
if (this.pendingAuth !== null)
|
|
88
|
+
return this.pendingAuth;
|
|
89
|
+
this.pendingAuth = this.refreshToken().finally(() => { this.pendingAuth = null; });
|
|
90
|
+
return this.pendingAuth;
|
|
91
|
+
}
|
|
92
|
+
invalidateToken() { this.cachedToken = null; this.tokenExpiresAt = 0; }
|
|
93
|
+
async isAuthenticated() {
|
|
94
|
+
try {
|
|
95
|
+
await this.getToken();
|
|
96
|
+
return true;
|
|
97
|
+
}
|
|
98
|
+
catch {
|
|
99
|
+
return false;
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
async setupViaDeviceCode() { await this.runDeviceCodeFlow(); }
|
|
103
|
+
async refreshToken() {
|
|
104
|
+
const accounts = await this.pca.getAllAccounts();
|
|
105
|
+
if (accounts.length === 0) {
|
|
106
|
+
process.stderr.write("\n[mcp-dataverse] First-time authentication required.\n" + `Environment: ${this.environmentUrl}\n` + "Open the URL below in your browser to sign in.\n\n");
|
|
107
|
+
try {
|
|
108
|
+
await this.runDeviceCodeFlow();
|
|
109
|
+
return await this.acquireSilently();
|
|
110
|
+
}
|
|
111
|
+
catch (err) {
|
|
112
|
+
const detail = err instanceof Error ? err.message : String(err);
|
|
113
|
+
throw new Error(`Authentication setup failed: ${detail}\n\nYou can also authenticate manually:\n npx mcp-dataverse-auth ${this.environmentUrl}\nThen restart the MCP server in VS Code.`);
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
try {
|
|
117
|
+
return await this.acquireSilently();
|
|
118
|
+
}
|
|
119
|
+
catch {
|
|
120
|
+
process.stderr.write("\n[mcp-dataverse] Session expired — re-authenticating.\nOpen the URL below in your browser to sign in again.\n\n");
|
|
121
|
+
try {
|
|
122
|
+
await this.runDeviceCodeFlow();
|
|
123
|
+
return await this.acquireSilently();
|
|
124
|
+
}
|
|
125
|
+
catch (err) {
|
|
126
|
+
this.cachedToken = null;
|
|
127
|
+
const detail = err instanceof Error ? err.message : String(err);
|
|
128
|
+
throw new Error(`Re-authentication failed: ${detail}\n\nTo authenticate manually:\n npx mcp-dataverse-auth ${this.environmentUrl}\nThen restart the MCP server in VS Code.`);
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
async acquireSilently() {
|
|
133
|
+
const accounts = await this.pca.getAllAccounts();
|
|
134
|
+
if (accounts.length === 0)
|
|
135
|
+
throw new Error("No account found in cache after authentication.");
|
|
136
|
+
const result = await this.pca.acquireTokenSilent({ scopes: [`${this.environmentUrl}/.default`], account: accounts[0] });
|
|
137
|
+
if (!result?.accessToken)
|
|
138
|
+
throw new Error("Token acquisition returned an empty access token.");
|
|
139
|
+
this.cacheResult(result);
|
|
140
|
+
return result.accessToken;
|
|
141
|
+
}
|
|
142
|
+
async runDeviceCodeFlow() {
|
|
143
|
+
const result = await Promise.race([
|
|
144
|
+
this.pca.acquireTokenByDeviceCode({
|
|
145
|
+
scopes: [`${this.environmentUrl}/.default`],
|
|
146
|
+
deviceCodeCallback: (response) => {
|
|
147
|
+
copyToClipboard(response.userCode);
|
|
148
|
+
process.stderr.write(`\n[mcp-dataverse] Sign in required\n` +
|
|
149
|
+
`\n 1. Open ${response.verificationUri} in your browser\n` +
|
|
150
|
+
` (use the browser profile linked to your Power Platform account)\n` +
|
|
151
|
+
` 2. Paste the code: ${response.userCode} (already copied to your clipboard)\n` +
|
|
152
|
+
` 3. Sign in with your work account\n\n`);
|
|
153
|
+
},
|
|
154
|
+
}),
|
|
155
|
+
new Promise((_, reject) => setTimeout(() => reject(new Error("Authentication timed out after 5 minutes. Please try again.")), DEVICE_CODE_TIMEOUT_MS)),
|
|
156
|
+
]);
|
|
157
|
+
if (result) {
|
|
158
|
+
this.cacheResult(result);
|
|
159
|
+
process.stderr.write("\n[mcp-dataverse] Authenticated ✓ Token cached — no sign-in needed next time.\n\n");
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
cacheResult(result) {
|
|
163
|
+
this.cachedToken = result.accessToken;
|
|
164
|
+
this.tokenExpiresAt = result.expiresOn?.getTime() ?? Date.now() + 55 * 60 * 1000;
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
//# sourceMappingURL=device-code-auth-provider.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"device-code-auth-provider.js","sourceRoot":"","sources":["../../src/auth/device-code-auth-provider.ts"],"names":[],"mappings":"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"}
|
|
@@ -4,16 +4,15 @@ export declare class PacAuthProvider implements AuthProvider {
|
|
|
4
4
|
private readonly pca;
|
|
5
5
|
private cachedToken;
|
|
6
6
|
private tokenExpiresAt;
|
|
7
|
+
private pendingAuth;
|
|
7
8
|
constructor(environmentUrl: string);
|
|
8
9
|
getToken(): Promise<string>;
|
|
9
10
|
invalidateToken(): void;
|
|
10
11
|
isAuthenticated(): Promise<boolean>;
|
|
11
|
-
/**
|
|
12
|
-
* Interactive device code flow — call once via `npm run auth:setup`.
|
|
13
|
-
* Writes to stderr so it doesn't disturb the stdio MCP transport.
|
|
14
|
-
*/
|
|
15
12
|
setupViaDeviceCode(): Promise<void>;
|
|
16
13
|
private refreshToken;
|
|
14
|
+
private acquireSilently;
|
|
15
|
+
private runDeviceCodeFlow;
|
|
17
16
|
private cacheResult;
|
|
18
17
|
}
|
|
19
18
|
//# sourceMappingURL=pac-auth-provider.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pac-auth-provider.d.ts","sourceRoot":"","sources":["../../src/auth/pac-auth-provider.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"pac-auth-provider.d.ts","sourceRoot":"","sources":["../../src/auth/pac-auth-provider.ts"],"names":[],"mappings":"AAiBA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAC;AAsEjE,qBAAa,eAAgB,YAAW,YAAY;IAClD,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAA0B;IAC9C,OAAO,CAAC,WAAW,CAAuB;IAC1C,OAAO,CAAC,cAAc,CAAa;IACnC,OAAO,CAAC,WAAW,CAAgC;gBAEvC,cAAc,EAAE,MAAM;IAQ5B,QAAQ,IAAI,OAAO,CAAC,MAAM,CAAC;IAQjC,eAAe,IAAI,IAAI;IAEjB,eAAe,IAAI,OAAO,CAAC,OAAO,CAAC;IAInC,kBAAkB,IAAI,OAAO,CAAC,IAAI,CAAC;YAE3B,YAAY;YAsBZ,eAAe;YASf,iBAAiB;IAqB/B,OAAO,CAAC,WAAW;CAIpB"}
|
|
@@ -1,15 +1,26 @@
|
|
|
1
1
|
import { PublicClientApplication, } from "@azure/msal-node";
|
|
2
|
-
import { existsSync, readFileSync, writeFileSync } from "fs";
|
|
2
|
+
import { existsSync, mkdirSync, readFileSync, writeFileSync } from "fs";
|
|
3
|
+
import { homedir } from "os";
|
|
3
4
|
import { join } from "path";
|
|
5
|
+
import { exec } from "child_process";
|
|
6
|
+
import { platform } from "process";
|
|
4
7
|
import { createCipheriv, createDecipheriv, createHash, randomBytes, } from "crypto";
|
|
5
|
-
|
|
8
|
+
function openBrowser(url) {
|
|
9
|
+
const cmd = platform === "win32" ? `start "" "${url}"`
|
|
10
|
+
: platform === "darwin" ? `open "${url}"`
|
|
11
|
+
: `xdg-open "${url}"`;
|
|
12
|
+
exec(cmd, () => { });
|
|
13
|
+
}
|
|
14
|
+
function copyToClipboard(text) {
|
|
15
|
+
const cmd = platform === "win32" ? `echo|set /p="${text}"| clip`
|
|
16
|
+
: platform === "darwin" ? `printf '%s' '${text}' | pbcopy`
|
|
17
|
+
: `printf '%s' '${text}' | xclip -selection clipboard 2>/dev/null || printf '%s' '${text}' | xsel --clipboard 2>/dev/null`;
|
|
18
|
+
exec(cmd, () => { });
|
|
19
|
+
}
|
|
6
20
|
const PLATFORM_CLIENT_ID = "1950a258-227b-4e31-a9cf-717495945fc2";
|
|
7
|
-
const
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
* Not a substitute for OS-level credential storage (DPAPI/keytar), but prevents
|
|
11
|
-
* the cache file from being directly readable as plaintext by other processes.
|
|
12
|
-
*/
|
|
21
|
+
const CACHE_DIR = join(homedir(), ".mcp-dataverse");
|
|
22
|
+
const TOKEN_CACHE_FILE = join(CACHE_DIR, "msal-cache.json");
|
|
23
|
+
const DEVICE_CODE_TIMEOUT_MS = 5 * 60 * 1000;
|
|
13
24
|
function getDerivedKey() {
|
|
14
25
|
const seed = [
|
|
15
26
|
process.env["COMPUTERNAME"] ?? process.env["HOSTNAME"] ?? "",
|
|
@@ -22,16 +33,8 @@ function encryptForDisk(plaintext) {
|
|
|
22
33
|
const key = getDerivedKey();
|
|
23
34
|
const iv = randomBytes(16);
|
|
24
35
|
const cipher = createCipheriv("aes-256-gcm", key, iv);
|
|
25
|
-
const encrypted = Buffer.concat([
|
|
26
|
-
|
|
27
|
-
cipher.final(),
|
|
28
|
-
]);
|
|
29
|
-
return JSON.stringify({
|
|
30
|
-
v: 1,
|
|
31
|
-
iv: iv.toString("hex"),
|
|
32
|
-
tag: cipher.getAuthTag().toString("hex"),
|
|
33
|
-
d: encrypted.toString("hex"),
|
|
34
|
-
});
|
|
36
|
+
const encrypted = Buffer.concat([cipher.update(plaintext, "utf-8"), cipher.final()]);
|
|
37
|
+
return JSON.stringify({ v: 1, iv: iv.toString("hex"), tag: cipher.getAuthTag().toString("hex"), d: encrypted.toString("hex") });
|
|
35
38
|
}
|
|
36
39
|
function decryptFromDisk(raw) {
|
|
37
40
|
const parsed = JSON.parse(raw);
|
|
@@ -50,24 +53,21 @@ function createCachePlugin() {
|
|
|
50
53
|
if (existsSync(TOKEN_CACHE_FILE)) {
|
|
51
54
|
try {
|
|
52
55
|
const raw = readFileSync(TOKEN_CACHE_FILE, "utf-8");
|
|
53
|
-
// Support both encrypted (v1) and legacy plaintext caches
|
|
54
56
|
let serialized;
|
|
55
57
|
try {
|
|
56
58
|
serialized = decryptFromDisk(raw);
|
|
57
59
|
}
|
|
58
60
|
catch {
|
|
59
|
-
// Legacy plaintext — accept for migration, will be re-written encrypted
|
|
60
61
|
serialized = raw;
|
|
61
62
|
}
|
|
62
63
|
cacheContext.tokenCache.deserialize(serialized);
|
|
63
64
|
}
|
|
64
|
-
catch {
|
|
65
|
-
// Corrupt cache — ignore, user will need to re-authenticate
|
|
66
|
-
}
|
|
65
|
+
catch { /* corrupt cache — re-auth automatically */ }
|
|
67
66
|
}
|
|
68
67
|
},
|
|
69
68
|
afterCacheAccess: async (cacheContext) => {
|
|
70
69
|
if (cacheContext.cacheHasChanged) {
|
|
70
|
+
mkdirSync(CACHE_DIR, { recursive: true });
|
|
71
71
|
writeFileSync(TOKEN_CACHE_FILE, encryptForDisk(cacheContext.tokenCache.serialize()), { encoding: "utf-8", mode: 0o600 });
|
|
72
72
|
}
|
|
73
73
|
},
|
|
@@ -78,27 +78,24 @@ export class PacAuthProvider {
|
|
|
78
78
|
pca;
|
|
79
79
|
cachedToken = null;
|
|
80
80
|
tokenExpiresAt = 0;
|
|
81
|
+
pendingAuth = null;
|
|
81
82
|
constructor(environmentUrl) {
|
|
82
83
|
this.environmentUrl = environmentUrl.replace(/\/$/, "");
|
|
83
84
|
this.pca = new PublicClientApplication({
|
|
84
|
-
auth: {
|
|
85
|
-
clientId: PLATFORM_CLIENT_ID,
|
|
86
|
-
authority: "https://login.microsoftonline.com/common",
|
|
87
|
-
},
|
|
85
|
+
auth: { clientId: PLATFORM_CLIENT_ID, authority: "https://login.microsoftonline.com/common" },
|
|
88
86
|
cache: { cachePlugin: createCachePlugin() },
|
|
89
87
|
});
|
|
90
88
|
}
|
|
91
89
|
async getToken() {
|
|
92
90
|
const now = Date.now();
|
|
93
|
-
if (this.cachedToken !== null && this.tokenExpiresAt > now + 60_000)
|
|
91
|
+
if (this.cachedToken !== null && this.tokenExpiresAt > now + 60_000)
|
|
94
92
|
return this.cachedToken;
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
this.cachedToken = null;
|
|
100
|
-
this.tokenExpiresAt = 0;
|
|
93
|
+
if (this.pendingAuth !== null)
|
|
94
|
+
return this.pendingAuth;
|
|
95
|
+
this.pendingAuth = this.refreshToken().finally(() => { this.pendingAuth = null; });
|
|
96
|
+
return this.pendingAuth;
|
|
101
97
|
}
|
|
98
|
+
invalidateToken() { this.cachedToken = null; this.tokenExpiresAt = 0; }
|
|
102
99
|
async isAuthenticated() {
|
|
103
100
|
try {
|
|
104
101
|
await this.getToken();
|
|
@@ -108,50 +105,68 @@ export class PacAuthProvider {
|
|
|
108
105
|
return false;
|
|
109
106
|
}
|
|
110
107
|
}
|
|
111
|
-
|
|
112
|
-
* Interactive device code flow — call once via `npm run auth:setup`.
|
|
113
|
-
* Writes to stderr so it doesn't disturb the stdio MCP transport.
|
|
114
|
-
*/
|
|
115
|
-
async setupViaDeviceCode() {
|
|
116
|
-
const result = await this.pca.acquireTokenByDeviceCode({
|
|
117
|
-
scopes: [`${this.environmentUrl}/.default`],
|
|
118
|
-
deviceCodeCallback: (response) => {
|
|
119
|
-
process.stderr.write(`\n${response.message}\n`);
|
|
120
|
-
},
|
|
121
|
-
});
|
|
122
|
-
if (result) {
|
|
123
|
-
this.cacheResult(result);
|
|
124
|
-
}
|
|
125
|
-
}
|
|
108
|
+
async setupViaDeviceCode() { await this.runDeviceCodeFlow(); }
|
|
126
109
|
async refreshToken() {
|
|
127
110
|
const accounts = await this.pca.getAllAccounts();
|
|
128
111
|
if (accounts.length === 0) {
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
112
|
+
process.stderr.write("\n[mcp-dataverse] First-time authentication required.\n" + `Environment: ${this.environmentUrl}\n` + "Open the URL below in your browser to sign in.\n\n");
|
|
113
|
+
try {
|
|
114
|
+
await this.runDeviceCodeFlow();
|
|
115
|
+
return await this.acquireSilently();
|
|
116
|
+
}
|
|
117
|
+
catch (err) {
|
|
118
|
+
const detail = err instanceof Error ? err.message : String(err);
|
|
119
|
+
throw new Error(`Authentication setup failed: ${detail}\n\nYou can also authenticate manually:\n npx mcp-dataverse-auth ${this.environmentUrl}\nThen restart the MCP server in VS Code.`);
|
|
120
|
+
}
|
|
132
121
|
}
|
|
133
122
|
try {
|
|
134
|
-
|
|
135
|
-
scopes: [`${this.environmentUrl}/.default`],
|
|
136
|
-
account: accounts[0],
|
|
137
|
-
});
|
|
138
|
-
if (!result?.accessToken) {
|
|
139
|
-
throw new Error("Silent token acquisition returned empty token");
|
|
140
|
-
}
|
|
141
|
-
this.cacheResult(result);
|
|
142
|
-
return result.accessToken;
|
|
123
|
+
return await this.acquireSilently();
|
|
143
124
|
}
|
|
144
125
|
catch {
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
126
|
+
process.stderr.write("\n[mcp-dataverse] Session expired — re-authenticating.\nOpen the URL below in your browser to sign in again.\n\n");
|
|
127
|
+
try {
|
|
128
|
+
await this.runDeviceCodeFlow();
|
|
129
|
+
return await this.acquireSilently();
|
|
130
|
+
}
|
|
131
|
+
catch (err) {
|
|
132
|
+
this.cachedToken = null;
|
|
133
|
+
const detail = err instanceof Error ? err.message : String(err);
|
|
134
|
+
throw new Error(`Re-authentication failed: ${detail}\n\nTo authenticate manually:\n npx mcp-dataverse-auth ${this.environmentUrl}\nThen restart the MCP server in VS Code.`);
|
|
135
|
+
}
|
|
149
136
|
}
|
|
150
137
|
}
|
|
138
|
+
async acquireSilently() {
|
|
139
|
+
const accounts = await this.pca.getAllAccounts();
|
|
140
|
+
if (accounts.length === 0)
|
|
141
|
+
throw new Error("No account found in cache after authentication.");
|
|
142
|
+
const result = await this.pca.acquireTokenSilent({ scopes: [`${this.environmentUrl}/.default`], account: accounts[0] });
|
|
143
|
+
if (!result?.accessToken)
|
|
144
|
+
throw new Error("Token acquisition returned an empty access token.");
|
|
145
|
+
this.cacheResult(result);
|
|
146
|
+
return result.accessToken;
|
|
147
|
+
}
|
|
148
|
+
async runDeviceCodeFlow() {
|
|
149
|
+
const result = await Promise.race([
|
|
150
|
+
this.pca.acquireTokenByDeviceCode({
|
|
151
|
+
scopes: [`${this.environmentUrl}/.default`],
|
|
152
|
+
deviceCodeCallback: (response) => {
|
|
153
|
+
process.stderr.write(`\n[mcp-dataverse] Sign in required\n` +
|
|
154
|
+
`Code: ${response.userCode}\n` +
|
|
155
|
+
`URL: ${response.verificationUri}\n` +
|
|
156
|
+
`\n→ Browser opened automatically. Paste the code and sign in.\n` +
|
|
157
|
+
` (code copied to clipboard)\n\n`);
|
|
158
|
+
copyToClipboard(response.userCode);
|
|
159
|
+
openBrowser(response.verificationUri);
|
|
160
|
+
},
|
|
161
|
+
}),
|
|
162
|
+
new Promise((_, reject) => setTimeout(() => reject(new Error("Authentication timed out after 5 minutes. Please try again.")), DEVICE_CODE_TIMEOUT_MS)),
|
|
163
|
+
]);
|
|
164
|
+
if (result)
|
|
165
|
+
this.cacheResult(result);
|
|
166
|
+
}
|
|
151
167
|
cacheResult(result) {
|
|
152
168
|
this.cachedToken = result.accessToken;
|
|
153
|
-
this.tokenExpiresAt =
|
|
154
|
-
result.expiresOn?.getTime() ?? Date.now() + 55 * 60 * 1000;
|
|
169
|
+
this.tokenExpiresAt = result.expiresOn?.getTime() ?? Date.now() + 55 * 60 * 1000;
|
|
155
170
|
}
|
|
156
171
|
}
|
|
157
172
|
//# sourceMappingURL=pac-auth-provider.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pac-auth-provider.js","sourceRoot":"","sources":["../../src/auth/pac-auth-provider.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,uBAAuB,GAIxB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"pac-auth-provider.js","sourceRoot":"","sources":["../../src/auth/pac-auth-provider.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.loader.d.ts","sourceRoot":"","sources":["../../src/config/config.loader.ts"],"names":[],"mappings":"AAEA,OAAO,EAAgB,KAAK,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAI/D,wBAAgB,UAAU,IAAI,MAAM,
|
|
1
|
+
{"version":3,"file":"config.loader.d.ts","sourceRoot":"","sources":["../../src/config/config.loader.ts"],"names":[],"mappings":"AAEA,OAAO,EAAgB,KAAK,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAI/D,wBAAgB,UAAU,IAAI,MAAM,CAwCnC"}
|
|
@@ -21,21 +21,6 @@ export function loadConfig() {
|
|
|
21
21
|
const envUrl = process.env["DATAVERSE_ENV_URL"] ?? process.env["environmentUrl"];
|
|
22
22
|
if (envUrl)
|
|
23
23
|
rawConfig["environmentUrl"] = envUrl;
|
|
24
|
-
const authMode = process.env["AUTH_MODE"] ?? process.env["authMode"];
|
|
25
|
-
if (authMode)
|
|
26
|
-
rawConfig["authMode"] = authMode;
|
|
27
|
-
const pacProfile = process.env["PAC_PROFILE_NAME"] ?? process.env["pacProfileName"];
|
|
28
|
-
if (pacProfile)
|
|
29
|
-
rawConfig["pacProfileName"] = pacProfile;
|
|
30
|
-
const tenantId = process.env["TENANT_ID"] ?? process.env["tenantId"];
|
|
31
|
-
if (tenantId)
|
|
32
|
-
rawConfig["tenantId"] = tenantId;
|
|
33
|
-
const clientId = process.env["CLIENT_ID"] ?? process.env["clientId"];
|
|
34
|
-
if (clientId)
|
|
35
|
-
rawConfig["clientId"] = clientId;
|
|
36
|
-
const clientSecret = process.env["CLIENT_SECRET"] ?? process.env["clientSecret"];
|
|
37
|
-
if (clientSecret)
|
|
38
|
-
rawConfig["clientSecret"] = clientSecret;
|
|
39
24
|
const timeoutMs = process.env["REQUEST_TIMEOUT_MS"] ?? process.env["requestTimeoutMs"];
|
|
40
25
|
if (timeoutMs)
|
|
41
26
|
rawConfig["requestTimeoutMs"] = Number(timeoutMs);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.loader.js","sourceRoot":"","sources":["../../src/config/config.loader.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC;AAC9C,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,EAAE,YAAY,EAAe,MAAM,oBAAoB,CAAC;AAE/D,MAAM,gBAAgB,GAAG,aAAa,CAAC;AAEvC,MAAM,UAAU,UAAU;IACxB,yEAAyE;IACzE,MAAM,UAAU,GACd,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,gBAAgB,CAAC,CAAC;IAE1E,IAAI,SAAS,GAA4B,EAAE,CAAC;IAE5C,IAAI,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAC3B,MAAM,WAAW,GAAG,YAAY,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;QACtD,IAAI,CAAC;YACH,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,CAA4B,CAAC;QACjE,CAAC;QAAC,MAAM,CAAC;YACP,MAAM,IAAI,KAAK,CACb,mBAAmB,UAAU,8DAA8D,CAC5F,CAAC;QACJ,CAAC;IACH,CAAC;IAED,qCAAqC;IACrC,4EAA4E;IAC5E,iFAAiF;IACjF,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC,IAAI,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC;IACjF,IAAI,MAAM;QAAE,SAAS,CAAC,gBAAgB,CAAC,GAAG,MAAM,CAAC;IAEjD,MAAM,
|
|
1
|
+
{"version":3,"file":"config.loader.js","sourceRoot":"","sources":["../../src/config/config.loader.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC;AAC9C,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,EAAE,YAAY,EAAe,MAAM,oBAAoB,CAAC;AAE/D,MAAM,gBAAgB,GAAG,aAAa,CAAC;AAEvC,MAAM,UAAU,UAAU;IACxB,yEAAyE;IACzE,MAAM,UAAU,GACd,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,gBAAgB,CAAC,CAAC;IAE1E,IAAI,SAAS,GAA4B,EAAE,CAAC;IAE5C,IAAI,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAC3B,MAAM,WAAW,GAAG,YAAY,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;QACtD,IAAI,CAAC;YACH,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,CAA4B,CAAC;QACjE,CAAC;QAAC,MAAM,CAAC;YACP,MAAM,IAAI,KAAK,CACb,mBAAmB,UAAU,8DAA8D,CAC5F,CAAC;QACJ,CAAC;IACH,CAAC;IAED,qCAAqC;IACrC,4EAA4E;IAC5E,iFAAiF;IACjF,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC,IAAI,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC;IACjF,IAAI,MAAM;QAAE,SAAS,CAAC,gBAAgB,CAAC,GAAG,MAAM,CAAC;IAEjD,MAAM,SAAS,GACb,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAC,IAAI,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC;IACvE,IAAI,SAAS;QAAE,SAAS,CAAC,kBAAkB,CAAC,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC;IAEjE,MAAM,UAAU,GAAG,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,IAAI,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;IAC3E,IAAI,UAAU;QAAE,SAAS,CAAC,YAAY,CAAC,GAAG,MAAM,CAAC,UAAU,CAAC,CAAC;IAE7D,MAAM,MAAM,GAAG,YAAY,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;IAEjD,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;QACpB,MAAM,IAAI,KAAK,CACb,2BAA2B,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAChH,CAAC;IACJ,CAAC;IAED,OAAO,MAAM,CAAC,IAAI,CAAC;AACrB,CAAC"}
|
|
@@ -1,29 +1,14 @@
|
|
|
1
1
|
import { z } from "zod";
|
|
2
2
|
export declare const ConfigSchema: z.ZodObject<{
|
|
3
3
|
environmentUrl: z.ZodEffects<z.ZodEffects<z.ZodString, string, string>, string, string>;
|
|
4
|
-
authMode: z.ZodDefault<z.ZodEnum<["pac", "msal"]>>;
|
|
5
|
-
pacProfileName: z.ZodDefault<z.ZodString>;
|
|
6
|
-
tenantId: z.ZodOptional<z.ZodString>;
|
|
7
|
-
clientId: z.ZodOptional<z.ZodString>;
|
|
8
|
-
clientSecret: z.ZodOptional<z.ZodString>;
|
|
9
4
|
requestTimeoutMs: z.ZodDefault<z.ZodNumber>;
|
|
10
5
|
maxRetries: z.ZodDefault<z.ZodNumber>;
|
|
11
6
|
}, "strip", z.ZodTypeAny, {
|
|
12
7
|
environmentUrl: string;
|
|
13
|
-
authMode: "pac" | "msal";
|
|
14
|
-
pacProfileName: string;
|
|
15
8
|
requestTimeoutMs: number;
|
|
16
9
|
maxRetries: number;
|
|
17
|
-
tenantId?: string | undefined;
|
|
18
|
-
clientId?: string | undefined;
|
|
19
|
-
clientSecret?: string | undefined;
|
|
20
10
|
}, {
|
|
21
11
|
environmentUrl: string;
|
|
22
|
-
authMode?: "pac" | "msal" | undefined;
|
|
23
|
-
pacProfileName?: string | undefined;
|
|
24
|
-
tenantId?: string | undefined;
|
|
25
|
-
clientId?: string | undefined;
|
|
26
|
-
clientSecret?: string | undefined;
|
|
27
12
|
requestTimeoutMs?: number | undefined;
|
|
28
13
|
maxRetries?: number | undefined;
|
|
29
14
|
}>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.schema.d.ts","sourceRoot":"","sources":["../../src/config/config.schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,eAAO,MAAM,YAAY
|
|
1
|
+
{"version":3,"file":"config.schema.d.ts","sourceRoot":"","sources":["../../src/config/config.schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,eAAO,MAAM,YAAY;;;;;;;;;;;;EAmBvB,CAAC;AAEH,MAAM,MAAM,MAAM,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,YAAY,CAAC,CAAC"}
|
|
@@ -14,11 +14,6 @@ export const ConfigSchema = z.object({
|
|
|
14
14
|
return false;
|
|
15
15
|
}
|
|
16
16
|
}, { message: "environmentUrl must be a *.dynamics.com host" }),
|
|
17
|
-
authMode: z.enum(["pac", "msal"]).default("pac"),
|
|
18
|
-
pacProfileName: z.string().default("default"),
|
|
19
|
-
tenantId: z.string().optional(),
|
|
20
|
-
clientId: z.string().optional(),
|
|
21
|
-
clientSecret: z.string().optional(),
|
|
22
17
|
requestTimeoutMs: z.number().positive().default(30000),
|
|
23
18
|
maxRetries: z.number().min(0).max(10).default(3),
|
|
24
19
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.schema.js","sourceRoot":"","sources":["../../src/config/config.schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,CAAC,MAAM,CAAC;IACnC,cAAc,EAAE,CAAC;SACd,MAAM,EAAE;SACR,GAAG,CAAC,2CAA2C,CAAC;SAChD,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE;QAC3C,OAAO,EAAE,0CAA0C;KACpD,CAAC;SACD,MAAM,CACL,CAAC,GAAG,EAAE,EAAE;QACN,IAAI,CAAC;YACH,OAAO,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC;QACvE,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC,EACD,EAAE,OAAO,EAAE,8CAA8C,EAAE,CAC5D;IACH,
|
|
1
|
+
{"version":3,"file":"config.schema.js","sourceRoot":"","sources":["../../src/config/config.schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,CAAC,MAAM,CAAC;IACnC,cAAc,EAAE,CAAC;SACd,MAAM,EAAE;SACR,GAAG,CAAC,2CAA2C,CAAC;SAChD,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE;QAC3C,OAAO,EAAE,0CAA0C;KACpD,CAAC;SACD,MAAM,CACL,CAAC,GAAG,EAAE,EAAE;QACN,IAAI,CAAC;YACH,OAAO,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC;QACvE,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC,EACD,EAAE,OAAO,EAAE,8CAA8C,EAAE,CAC5D;IACH,gBAAgB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC;IACtD,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;CACjD,CAAC,CAAC"}
|
package/dist/server.js
CHANGED
|
@@ -157,6 +157,15 @@ async function main() {
|
|
|
157
157
|
await server.connect(transport);
|
|
158
158
|
// Do not log to stdout — stdio transport uses stdout for protocol messages
|
|
159
159
|
process.stderr.write("MCP Dataverse server started\n");
|
|
160
|
+
// Proactively trigger authentication at startup so the device-code prompt
|
|
161
|
+
// appears immediately in the VS Code MCP Output panel (View → Output → MCP),
|
|
162
|
+
// rather than only on the first tool call.
|
|
163
|
+
authProvider.getToken().then(() => {
|
|
164
|
+
process.stderr.write("[mcp-dataverse] Authenticated ✓\n");
|
|
165
|
+
}).catch((err) => {
|
|
166
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
167
|
+
process.stderr.write(`[mcp-dataverse] Authentication failed: ${msg}\n`);
|
|
168
|
+
});
|
|
160
169
|
}
|
|
161
170
|
main().catch((error) => {
|
|
162
171
|
process.stderr.write(`Fatal error: ${error instanceof Error ? error.message : String(error)}\n`);
|
package/dist/server.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}
|
package/dist/setup-auth.d.ts
CHANGED
package/dist/setup-auth.js
CHANGED
|
@@ -1,29 +1,42 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
1
2
|
/**
|
|
2
|
-
* Authentication setup entry point.
|
|
3
|
-
* Run once:
|
|
3
|
+
* Authentication setup entry point for production installs.
|
|
4
|
+
* Run once: npx mcp-dataverse-auth [environment-url]
|
|
4
5
|
*
|
|
5
6
|
* Uses MSAL device code flow — a browser tab will open for you to authenticate.
|
|
6
|
-
* The token is cached
|
|
7
|
+
* The token is cached in ~/.mcp-dataverse/msal-cache.json and reused silently.
|
|
7
8
|
*/
|
|
8
9
|
import { loadConfig } from "./config/config.loader.js";
|
|
9
|
-
import {
|
|
10
|
+
import { DeviceCodeAuthProvider } from "./auth/device-code-auth-provider.js";
|
|
10
11
|
async function main() {
|
|
11
|
-
process.stderr.write("MCP Dataverse — Authentication Setup\n");
|
|
12
|
-
process.stderr.write("
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
process.
|
|
12
|
+
process.stderr.write("MCP Dataverse — One-time Authentication Setup\n");
|
|
13
|
+
process.stderr.write("──────────────────────────────────────────────\n");
|
|
14
|
+
// Allow passing the env URL as a CLI arg: npx mcp-dataverse-auth https://org.crm.dynamics.com
|
|
15
|
+
const cliEnvUrl = process.argv[2];
|
|
16
|
+
if (cliEnvUrl) {
|
|
17
|
+
process.env["DATAVERSE_ENV_URL"] = cliEnvUrl;
|
|
17
18
|
}
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
19
|
+
let config;
|
|
20
|
+
try {
|
|
21
|
+
config = loadConfig();
|
|
22
|
+
}
|
|
23
|
+
catch {
|
|
24
|
+
process.stderr.write("Environment URL is required.\n" +
|
|
25
|
+
"Usage: npx mcp-dataverse-auth https://yourorg.crm.dynamics.com\n" +
|
|
26
|
+
"Or set DATAVERSE_ENV_URL before running.\n");
|
|
27
|
+
process.exit(1);
|
|
28
|
+
}
|
|
29
|
+
process.stderr.write(`Environment : ${config.environmentUrl}\n`);
|
|
30
|
+
process.stderr.write(`Token cache : ~/.mcp-dataverse/msal-cache.json\n\n`);
|
|
31
|
+
process.stderr.write("A browser window will open. Sign in with your Microsoft account.\n\n");
|
|
32
|
+
const provider = new DeviceCodeAuthProvider(config.environmentUrl);
|
|
21
33
|
await provider.setupViaDeviceCode();
|
|
22
|
-
process.stderr.write("\n✓ Authentication successful
|
|
23
|
-
|
|
34
|
+
process.stderr.write("\n✓ Authentication successful!\n" +
|
|
35
|
+
" Token cached in ~/.mcp-dataverse/msal-cache.json\n\n" +
|
|
36
|
+
" Restart the MCP server in VS Code to apply.\n");
|
|
24
37
|
}
|
|
25
38
|
main().catch((error) => {
|
|
26
|
-
process.stderr.write(
|
|
39
|
+
process.stderr.write(`\nSetup failed: ${error instanceof Error ? error.message : String(error)}\n`);
|
|
27
40
|
process.exit(1);
|
|
28
41
|
});
|
|
29
42
|
//# sourceMappingURL=setup-auth.js.map
|
package/dist/setup-auth.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"setup-auth.js","sourceRoot":"","sources":["../src/setup-auth.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"setup-auth.js","sourceRoot":"","sources":["../src/setup-auth.ts"],"names":[],"mappings":";AACA;;;;;;GAMG;AACH,OAAO,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AACvD,OAAO,EAAE,sBAAsB,EAAE,MAAM,qCAAqC,CAAC;AAE7E,KAAK,UAAU,IAAI;IACjB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,iDAAiD,CAAC,CAAC;IACxE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,kDAAkD,CAAC,CAAC;IAEzE,8FAA8F;IAC9F,MAAM,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClC,IAAI,SAAS,EAAE,CAAC;QACd,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC,GAAG,SAAS,CAAC;IAC/C,CAAC;IAED,IAAI,MAAM,CAAC;IACX,IAAI,CAAC;QACH,MAAM,GAAG,UAAU,EAAE,CAAC;IACxB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,gCAAgC;YAC9B,kEAAkE;YAClE,4CAA4C,CAC/C,CAAC;QACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,iBAAiB,MAAM,CAAC,cAAc,IAAI,CAAC,CAAC;IACjE,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,oDAAoD,CACrD,CAAC;IACF,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,sEAAsE,CAAC,CAAC;IAE7F,MAAM,QAAQ,GAAG,IAAI,sBAAsB,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC;IACnE,MAAM,QAAQ,CAAC,kBAAkB,EAAE,CAAC;IAEpC,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,kCAAkC;QAChC,wDAAwD;QACxD,iDAAiD,CACpD,CAAC;AACJ,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;IACrB,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,mBAAmB,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAC9E,CAAC;IACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "mcp-dataverse",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.2.0",
|
|
4
4
|
"description": "MCP Server for Microsoft Dataverse Web API",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/server.js",
|
|
7
7
|
"bin": {
|
|
8
|
-
"mcp-dataverse": "dist/server.js"
|
|
8
|
+
"mcp-dataverse": "dist/server.js",
|
|
9
|
+
"mcp-dataverse-auth": "dist/setup-auth.js"
|
|
9
10
|
},
|
|
10
11
|
"mcpName": "io.github.codeurali/dataverse",
|
|
11
12
|
"license": "MIT",
|
package/server.json
CHANGED
|
@@ -15,12 +15,12 @@
|
|
|
15
15
|
"url": "https://github.com/codeurali/mcp-dataverse",
|
|
16
16
|
"source": "github"
|
|
17
17
|
},
|
|
18
|
-
"version": "0.1.
|
|
18
|
+
"version": "0.1.9",
|
|
19
19
|
{
|
|
20
20
|
"registryType": "npm",
|
|
21
21
|
"registryBaseUrl": "https://registry.npmjs.org",
|
|
22
22
|
"identifier": "mcp-dataverse",
|
|
23
|
-
"version": "0.1.
|
|
23
|
+
"version": "0.1.9", {
|
|
24
24
|
"type": "stdio"
|
|
25
25
|
},
|
|
26
26
|
"environmentVariables": [
|
|
@@ -39,45 +39,10 @@
|
|
|
39
39
|
"isRequired": false,
|
|
40
40
|
"format": "string",
|
|
41
41
|
"isSecret": false
|
|
42
|
-
},
|
|
43
|
-
{
|
|
44
|
-
"name": "AUTH_MODE",
|
|
45
|
-
"description": "Authentication mode: 'pac' (Power Platform CLI, default) or 'msal' (client credentials)",
|
|
46
|
-
"placeholder": "pac",
|
|
47
|
-
"isRequired": false,
|
|
48
|
-
"format": "string",
|
|
49
|
-
"isSecret": false
|
|
50
|
-
},
|
|
51
|
-
{
|
|
52
|
-
"name": "PAC_PROFILE_NAME",
|
|
53
|
-
"description": "Power Platform CLI profile name (only when AUTH_MODE=pac)",
|
|
54
|
-
"placeholder": "default",
|
|
55
|
-
"isRequired": false,
|
|
56
|
-
"format": "string",
|
|
57
|
-
"isSecret": false
|
|
58
|
-
},
|
|
59
|
-
{
|
|
60
|
-
"name": "TENANT_ID",
|
|
61
|
-
"description": "Azure AD tenant ID (only when AUTH_MODE=msal)",
|
|
62
|
-
"isRequired": false,
|
|
63
|
-
"format": "string",
|
|
64
|
-
"isSecret": false
|
|
65
|
-
},
|
|
66
|
-
{
|
|
67
|
-
"name": "CLIENT_ID",
|
|
68
|
-
"description": "Azure AD application (client) ID (only when AUTH_MODE=msal)",
|
|
69
|
-
"isRequired": false,
|
|
70
|
-
"format": "string",
|
|
71
|
-
"isSecret": false
|
|
72
|
-
},
|
|
73
|
-
{
|
|
74
|
-
"name": "CLIENT_SECRET",
|
|
75
|
-
"description": "Azure AD client secret (only when AUTH_MODE=msal)",
|
|
76
|
-
"isRequired": false,
|
|
77
|
-
"format": "string",
|
|
78
|
-
"isSecret": true
|
|
79
42
|
}
|
|
80
43
|
]
|
|
81
44
|
}
|
|
82
45
|
]
|
|
83
46
|
}
|
|
47
|
+
|
|
48
|
+
|