mcp-dataverse 0.3.8 → 0.3.9

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 (208) hide show
  1. package/CAPABILITIES.md +1039 -1039
  2. package/LICENSE +21 -21
  3. package/README.md +114 -105
  4. package/dist/auth-provider.factory-MSMLSOX3.js +1 -0
  5. package/dist/chunk-24RDOMG4.js +29 -0
  6. package/dist/chunk-OXKMMPM3.js +37 -0
  7. package/dist/chunk-PAX4NW5B.js +1 -0
  8. package/dist/chunk-SUDI4JM6.js +3 -0
  9. package/dist/config.loader-VTIKUDN7.js +1 -0
  10. package/dist/dataverse-client-advanced-T5ZJMRLK.js +1 -0
  11. package/dist/doctor.js +2 -102
  12. package/dist/http-server.js +3 -61
  13. package/dist/install.js +8 -233
  14. package/dist/server.js +43 -202
  15. package/dist/setup-auth.js +18 -41
  16. package/package.json +95 -94
  17. package/server.json +51 -50
  18. package/dist/auth/auth-provider.factory.d.ts +0 -4
  19. package/dist/auth/auth-provider.factory.d.ts.map +0 -1
  20. package/dist/auth/auth-provider.factory.js +0 -5
  21. package/dist/auth/auth-provider.factory.js.map +0 -1
  22. package/dist/auth/auth-provider.interface.d.ts +0 -21
  23. package/dist/auth/auth-provider.interface.d.ts.map +0 -1
  24. package/dist/auth/auth-provider.interface.js +0 -2
  25. package/dist/auth/auth-provider.interface.js.map +0 -1
  26. package/dist/auth/device-code-auth-provider.d.ts +0 -18
  27. package/dist/auth/device-code-auth-provider.d.ts.map +0 -1
  28. package/dist/auth/device-code-auth-provider.js +0 -167
  29. package/dist/auth/device-code-auth-provider.js.map +0 -1
  30. package/dist/config/config.loader.d.ts +0 -3
  31. package/dist/config/config.loader.d.ts.map +0 -1
  32. package/dist/config/config.loader.js +0 -39
  33. package/dist/config/config.loader.js.map +0 -1
  34. package/dist/config/config.schema.d.ts +0 -16
  35. package/dist/config/config.schema.d.ts.map +0 -1
  36. package/dist/config/config.schema.js +0 -20
  37. package/dist/config/config.schema.js.map +0 -1
  38. package/dist/dataverse/dataverse-client-advanced.d.ts +0 -53
  39. package/dist/dataverse/dataverse-client-advanced.d.ts.map +0 -1
  40. package/dist/dataverse/dataverse-client-advanced.js +0 -199
  41. package/dist/dataverse/dataverse-client-advanced.js.map +0 -1
  42. package/dist/dataverse/dataverse-client.actions.d.ts +0 -11
  43. package/dist/dataverse/dataverse-client.actions.d.ts.map +0 -1
  44. package/dist/dataverse/dataverse-client.actions.js +0 -25
  45. package/dist/dataverse/dataverse-client.actions.js.map +0 -1
  46. package/dist/dataverse/dataverse-client.batch.d.ts +0 -10
  47. package/dist/dataverse/dataverse-client.batch.d.ts.map +0 -1
  48. package/dist/dataverse/dataverse-client.batch.js +0 -74
  49. package/dist/dataverse/dataverse-client.batch.js.map +0 -1
  50. package/dist/dataverse/dataverse-client.d.ts +0 -46
  51. package/dist/dataverse/dataverse-client.d.ts.map +0 -1
  52. package/dist/dataverse/dataverse-client.js +0 -275
  53. package/dist/dataverse/dataverse-client.js.map +0 -1
  54. package/dist/dataverse/dataverse-client.metadata.d.ts +0 -41
  55. package/dist/dataverse/dataverse-client.metadata.d.ts.map +0 -1
  56. package/dist/dataverse/dataverse-client.metadata.js +0 -124
  57. package/dist/dataverse/dataverse-client.metadata.js.map +0 -1
  58. package/dist/dataverse/dataverse-client.utils.d.ts +0 -14
  59. package/dist/dataverse/dataverse-client.utils.d.ts.map +0 -1
  60. package/dist/dataverse/dataverse-client.utils.js +0 -65
  61. package/dist/dataverse/dataverse-client.utils.js.map +0 -1
  62. package/dist/dataverse/http-client.d.ts +0 -38
  63. package/dist/dataverse/http-client.d.ts.map +0 -1
  64. package/dist/dataverse/http-client.js +0 -111
  65. package/dist/dataverse/http-client.js.map +0 -1
  66. package/dist/dataverse/types.d.ts +0 -68
  67. package/dist/dataverse/types.d.ts.map +0 -1
  68. package/dist/dataverse/types.js +0 -2
  69. package/dist/dataverse/types.js.map +0 -1
  70. package/dist/doctor.d.ts +0 -7
  71. package/dist/doctor.d.ts.map +0 -1
  72. package/dist/doctor.js.map +0 -1
  73. package/dist/http-server.d.ts +0 -3
  74. package/dist/http-server.d.ts.map +0 -1
  75. package/dist/http-server.js.map +0 -1
  76. package/dist/install.d.ts +0 -3
  77. package/dist/install.d.ts.map +0 -1
  78. package/dist/install.js.map +0 -1
  79. package/dist/resources/resource-provider.d.ts +0 -11
  80. package/dist/resources/resource-provider.d.ts.map +0 -1
  81. package/dist/resources/resource-provider.js +0 -79
  82. package/dist/resources/resource-provider.js.map +0 -1
  83. package/dist/server.d.ts +0 -3
  84. package/dist/server.d.ts.map +0 -1
  85. package/dist/server.js.map +0 -1
  86. package/dist/setup-auth.d.ts +0 -3
  87. package/dist/setup-auth.d.ts.map +0 -1
  88. package/dist/setup-auth.js.map +0 -1
  89. package/dist/tools/actions.tools.d.ts +0 -206
  90. package/dist/tools/actions.tools.d.ts.map +0 -1
  91. package/dist/tools/actions.tools.js +0 -256
  92. package/dist/tools/actions.tools.js.map +0 -1
  93. package/dist/tools/annotations.tools.d.ts +0 -94
  94. package/dist/tools/annotations.tools.d.ts.map +0 -1
  95. package/dist/tools/annotations.tools.js +0 -225
  96. package/dist/tools/annotations.tools.js.map +0 -1
  97. package/dist/tools/audit.tools.d.ts +0 -51
  98. package/dist/tools/audit.tools.d.ts.map +0 -1
  99. package/dist/tools/audit.tools.js +0 -170
  100. package/dist/tools/audit.tools.js.map +0 -1
  101. package/dist/tools/auth.tools.d.ts +0 -23
  102. package/dist/tools/auth.tools.d.ts.map +0 -1
  103. package/dist/tools/auth.tools.js +0 -36
  104. package/dist/tools/auth.tools.js.map +0 -1
  105. package/dist/tools/batch.tools.d.ts +0 -52
  106. package/dist/tools/batch.tools.d.ts.map +0 -1
  107. package/dist/tools/batch.tools.js +0 -89
  108. package/dist/tools/batch.tools.js.map +0 -1
  109. package/dist/tools/crud.tools.d.ts +0 -260
  110. package/dist/tools/crud.tools.d.ts.map +0 -1
  111. package/dist/tools/crud.tools.js +0 -290
  112. package/dist/tools/crud.tools.js.map +0 -1
  113. package/dist/tools/customization.tools.d.ts +0 -127
  114. package/dist/tools/customization.tools.d.ts.map +0 -1
  115. package/dist/tools/customization.tools.js +0 -285
  116. package/dist/tools/customization.tools.js.map +0 -1
  117. package/dist/tools/environment.tools.d.ts +0 -106
  118. package/dist/tools/environment.tools.d.ts.map +0 -1
  119. package/dist/tools/environment.tools.js +0 -274
  120. package/dist/tools/environment.tools.js.map +0 -1
  121. package/dist/tools/file.tools.d.ts +0 -73
  122. package/dist/tools/file.tools.d.ts.map +0 -1
  123. package/dist/tools/file.tools.js +0 -160
  124. package/dist/tools/file.tools.js.map +0 -1
  125. package/dist/tools/guardrails.d.ts +0 -22
  126. package/dist/tools/guardrails.d.ts.map +0 -1
  127. package/dist/tools/guardrails.js +0 -56
  128. package/dist/tools/guardrails.js.map +0 -1
  129. package/dist/tools/impersonate.tools.d.ts +0 -44
  130. package/dist/tools/impersonate.tools.d.ts.map +0 -1
  131. package/dist/tools/impersonate.tools.js +0 -87
  132. package/dist/tools/impersonate.tools.js.map +0 -1
  133. package/dist/tools/metadata.tools.d.ts +0 -279
  134. package/dist/tools/metadata.tools.d.ts.map +0 -1
  135. package/dist/tools/metadata.tools.js +0 -400
  136. package/dist/tools/metadata.tools.js.map +0 -1
  137. package/dist/tools/org.tools.d.ts +0 -32
  138. package/dist/tools/org.tools.d.ts.map +0 -1
  139. package/dist/tools/org.tools.js +0 -65
  140. package/dist/tools/org.tools.js.map +0 -1
  141. package/dist/tools/output.utils.d.ts +0 -63
  142. package/dist/tools/output.utils.d.ts.map +0 -1
  143. package/dist/tools/output.utils.js +0 -78
  144. package/dist/tools/output.utils.js.map +0 -1
  145. package/dist/tools/progress.d.ts +0 -15
  146. package/dist/tools/progress.d.ts.map +0 -1
  147. package/dist/tools/progress.js +0 -29
  148. package/dist/tools/progress.js.map +0 -1
  149. package/dist/tools/quality.tools.d.ts +0 -36
  150. package/dist/tools/quality.tools.d.ts.map +0 -1
  151. package/dist/tools/quality.tools.js +0 -97
  152. package/dist/tools/quality.tools.js.map +0 -1
  153. package/dist/tools/query.tools.d.ts +0 -151
  154. package/dist/tools/query.tools.d.ts.map +0 -1
  155. package/dist/tools/query.tools.js +0 -293
  156. package/dist/tools/query.tools.js.map +0 -1
  157. package/dist/tools/relations.tools.d.ts +0 -77
  158. package/dist/tools/relations.tools.d.ts.map +0 -1
  159. package/dist/tools/relations.tools.js +0 -96
  160. package/dist/tools/relations.tools.js.map +0 -1
  161. package/dist/tools/router.tools.d.ts +0 -5
  162. package/dist/tools/router.tools.d.ts.map +0 -1
  163. package/dist/tools/router.tools.js +0 -247
  164. package/dist/tools/router.tools.js.map +0 -1
  165. package/dist/tools/search.tools.d.ts +0 -74
  166. package/dist/tools/search.tools.d.ts.map +0 -1
  167. package/dist/tools/search.tools.js +0 -142
  168. package/dist/tools/search.tools.js.map +0 -1
  169. package/dist/tools/solution.tools.d.ts +0 -113
  170. package/dist/tools/solution.tools.d.ts.map +0 -1
  171. package/dist/tools/solution.tools.js +0 -176
  172. package/dist/tools/solution.tools.js.map +0 -1
  173. package/dist/tools/teams.tools.d.ts +0 -65
  174. package/dist/tools/teams.tools.d.ts.map +0 -1
  175. package/dist/tools/teams.tools.js +0 -127
  176. package/dist/tools/teams.tools.js.map +0 -1
  177. package/dist/tools/tool-registry.d.ts +0 -35
  178. package/dist/tools/tool-registry.d.ts.map +0 -1
  179. package/dist/tools/tool-registry.js +0 -31
  180. package/dist/tools/tool-registry.js.map +0 -1
  181. package/dist/tools/trace.tools.d.ts +0 -75
  182. package/dist/tools/trace.tools.d.ts.map +0 -1
  183. package/dist/tools/trace.tools.js +0 -233
  184. package/dist/tools/trace.tools.js.map +0 -1
  185. package/dist/tools/tracking.tools.d.ts +0 -41
  186. package/dist/tools/tracking.tools.d.ts.map +0 -1
  187. package/dist/tools/tracking.tools.js +0 -76
  188. package/dist/tools/tracking.tools.js.map +0 -1
  189. package/dist/tools/users.tools.d.ts +0 -141
  190. package/dist/tools/users.tools.d.ts.map +0 -1
  191. package/dist/tools/users.tools.js +0 -321
  192. package/dist/tools/users.tools.js.map +0 -1
  193. package/dist/tools/validation.utils.d.ts +0 -6
  194. package/dist/tools/validation.utils.d.ts.map +0 -1
  195. package/dist/tools/validation.utils.js +0 -14
  196. package/dist/tools/validation.utils.js.map +0 -1
  197. package/dist/tools/views.tools.d.ts +0 -36
  198. package/dist/tools/views.tools.d.ts.map +0 -1
  199. package/dist/tools/views.tools.js +0 -92
  200. package/dist/tools/views.tools.js.map +0 -1
  201. package/dist/tools/workflow.tools.d.ts +0 -111
  202. package/dist/tools/workflow.tools.d.ts.map +0 -1
  203. package/dist/tools/workflow.tools.js +0 -449
  204. package/dist/tools/workflow.tools.js.map +0 -1
  205. package/dist/transport.d.ts +0 -6
  206. package/dist/transport.d.ts.map +0 -1
  207. package/dist/transport.js +0 -21
  208. package/dist/transport.js.map +0 -1
@@ -1,42 +1,19 @@
1
1
  #!/usr/bin/env node
2
- /**
3
- * Authentication setup entry point for production installs.
4
- * Run once: npx mcp-dataverse-auth [environment-url]
5
- *
6
- * Uses MSAL device code flow — a browser tab will open for you to authenticate.
7
- * The token is cached in ~/.mcp-dataverse/msal-cache.json and reused silently.
8
- */
9
- import { loadConfig } from "./config/config.loader.js";
10
- import { DeviceCodeAuthProvider } from "./auth/device-code-auth-provider.js";
11
- async function main() {
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;
18
- }
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);
33
- await provider.setupViaDeviceCode();
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");
37
- }
38
- main().catch((error) => {
39
- process.stderr.write(`\nSetup failed: ${error instanceof Error ? error.message : String(error)}\n`);
40
- process.exit(1);
41
- });
42
- //# sourceMappingURL=setup-auth.js.map
2
+ import{a as n}from"./chunk-SUDI4JM6.js";import{a as s}from"./chunk-24RDOMG4.js";async function t(){process.stderr.write(`MCP Dataverse \u2014 One-time Authentication Setup
3
+ `),process.stderr.write(`\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500
4
+ `);let e=process.argv[2];e&&(process.env.DATAVERSE_ENV_URL=e);let r;try{r=n()}catch{process.stderr.write(`Environment URL is required.
5
+ Usage: npx mcp-dataverse-auth https://yourorg.crm.dynamics.com
6
+ Or set DATAVERSE_ENV_URL before running.
7
+ `),process.exit(1)}process.stderr.write(`Environment : ${r.environmentUrl}
8
+ `),process.stderr.write(`Token cache : ~/.mcp-dataverse/msal-cache.json
9
+
10
+ `),process.stderr.write(`A browser window will open. Sign in with your Microsoft account.
11
+
12
+ `),await new s(r.environmentUrl).setupViaDeviceCode(),process.stderr.write(`
13
+ \u2713 Authentication successful!
14
+ Token cached in ~/.mcp-dataverse/msal-cache.json
15
+
16
+ Restart the MCP server in VS Code to apply.
17
+ `)}t().catch(e=>{process.stderr.write(`
18
+ Setup failed: ${e instanceof Error?e.message:String(e)}
19
+ `),process.exit(1)});
package/package.json CHANGED
@@ -1,94 +1,95 @@
1
- {
2
- "name": "mcp-dataverse",
3
- "version": "0.3.8",
4
- "description": "The most complete MCP server for Microsoft Dataverse 63 tools, zero config auth, works with VS Code Copilot, Claude, Cursor and more",
5
- "type": "module",
6
- "main": "dist/server.js",
7
- "bin": {
8
- "mcp-dataverse": "dist/server.js",
9
- "mcp-dataverse-auth": "dist/setup-auth.js"
10
- },
11
- "mcpName": "io.github.codeurali/dataverse",
12
- "license": "MIT",
13
- "engines": {
14
- "node": ">=20"
15
- },
16
- "keywords": [
17
- "mcp",
18
- "mcp-server",
19
- "dataverse",
20
- "microsoft-dataverse",
21
- "power-platform",
22
- "dynamics-365",
23
- "dynamics-crm",
24
- "common-data-service",
25
- "cds",
26
- "odata",
27
- "fetchxml",
28
- "copilot",
29
- "model-context-protocol",
30
- "ai-agent",
31
- "power-apps",
32
- "crm"
33
- ],
34
- "homepage": "https://codeurali.github.io/mcp-dataverse",
35
- "repository": {
36
- "type": "git",
37
- "url": "https://github.com/codeurali/mcp-dataverse"
38
- },
39
- "files": [
40
- "dist/**",
41
- "README.md",
42
- "LICENSE",
43
- "CAPABILITIES.md",
44
- "server.json",
45
- "assets/**"
46
- ],
47
- "scripts": {
48
- "prepublishOnly": "npm run build",
49
- "publish:all": "node scripts/publish.mjs",
50
- "publish:npm": "node scripts/publish.mjs --npm",
51
- "publish:mcp": "node scripts/publish.mjs --mcp",
52
- "publish:dry": "node scripts/publish.mjs --dry",
53
- "clean": "node -e \"const {rmSync}=require('fs'); try{rmSync('dist',{recursive:true})}catch{}\"",
54
- "build": "npm run clean && tsc",
55
- "dev": "tsx watch src/server.ts",
56
- "start": "node dist/server.js",
57
- "auth:setup": "node dist/setup-auth.js",
58
- "doctor": "node dist/doctor.js",
59
- "test": "jest",
60
- "test:unit": "jest --testPathPattern=tests/unit",
61
- "test:integration": "jest --testPathPattern=tests/integration",
62
- "test:coverage": "jest --coverage",
63
- "lint": "eslint src/**/*.ts tests/**/*.ts",
64
- "typecheck": "tsc --noEmit",
65
- "prepare": "husky"
66
- },
67
- "lint-staged": {
68
- "src/**/*.ts": [
69
- "eslint --fix"
70
- ],
71
- "tests/**/*.ts": [
72
- "eslint --fix"
73
- ]
74
- },
75
- "dependencies": {
76
- "@azure/msal-node": "^2.16.0",
77
- "@modelcontextprotocol/sdk": "^1.0.0",
78
- "zod": "^3.23.0"
79
- },
80
- "devDependencies": {
81
- "@types/jest": "^29.5.0",
82
- "@types/node": "^20.0.0",
83
- "@typescript-eslint/eslint-plugin": "^8.0.0",
84
- "@typescript-eslint/parser": "^8.0.0",
85
- "eslint": "^9.0.0",
86
- "husky": "^9.1.7",
87
- "jest": "^29.0.0",
88
- "lint-staged": "^16.2.7",
89
- "ts-jest": "^29.0.0",
90
- "tsx": "^4.0.0",
91
- "typescript": "^5.4.0",
92
- "typescript-eslint": "^8.56.0"
93
- }
94
- }
1
+ {
2
+ "name": "mcp-dataverse",
3
+ "version": "0.3.9",
4
+ "description": "The most complete MCP server for Microsoft Dataverse. 63 production-ready tools for AI agents: OData & FetchXML queries, CRUD, metadata, solutions, audit, batch operations and more. Zero-config Microsoft device code auth. Works with VS Code Copilot, Claude, Cursor, Windsurf and all MCP clients.",
5
+ "type": "module",
6
+ "main": "dist/server.js",
7
+ "bin": {
8
+ "mcp-dataverse": "dist/server.js",
9
+ "mcp-dataverse-auth": "dist/setup-auth.js"
10
+ },
11
+ "mcpName": "io.github.codeurali/dataverse",
12
+ "license": "MIT",
13
+ "engines": {
14
+ "node": ">=20"
15
+ },
16
+ "keywords": [
17
+ "mcp",
18
+ "mcp-server",
19
+ "dataverse",
20
+ "microsoft-dataverse",
21
+ "power-platform",
22
+ "dynamics-365",
23
+ "dynamics-crm",
24
+ "common-data-service",
25
+ "cds",
26
+ "odata",
27
+ "fetchxml",
28
+ "copilot",
29
+ "model-context-protocol",
30
+ "ai-agent",
31
+ "power-apps",
32
+ "crm"
33
+ ],
34
+ "homepage": "https://codeurali.github.io/mcp-dataverse",
35
+ "repository": {
36
+ "type": "git",
37
+ "url": "https://github.com/codeurali/mcp-dataverse"
38
+ },
39
+ "files": [
40
+ "dist/**",
41
+ "README.md",
42
+ "LICENSE",
43
+ "CAPABILITIES.md",
44
+ "server.json",
45
+ "assets/**"
46
+ ],
47
+ "scripts": {
48
+ "prepublishOnly": "npm run build",
49
+ "publish:all": "node scripts/publish.mjs",
50
+ "publish:npm": "node scripts/publish.mjs --npm",
51
+ "publish:mcp": "node scripts/publish.mjs --mcp",
52
+ "publish:dry": "node scripts/publish.mjs --dry",
53
+ "clean": "node -e \"const {rmSync}=require('fs'); try{rmSync('dist',{recursive:true})}catch{}\"",
54
+ "build": "node scripts/build.mjs",
55
+ "dev": "tsx watch src/server.ts",
56
+ "start": "node dist/server.js",
57
+ "auth:setup": "node dist/setup-auth.js",
58
+ "doctor": "node dist/doctor.js",
59
+ "test": "jest",
60
+ "test:unit": "jest --testPathPattern=tests/unit",
61
+ "test:integration": "jest --testPathPattern=tests/integration",
62
+ "test:coverage": "jest --coverage",
63
+ "lint": "eslint src/**/*.ts tests/**/*.ts",
64
+ "typecheck": "tsc --noEmit",
65
+ "prepare": "husky"
66
+ },
67
+ "lint-staged": {
68
+ "src/**/*.ts": [
69
+ "eslint --fix"
70
+ ],
71
+ "tests/**/*.ts": [
72
+ "eslint --fix"
73
+ ]
74
+ },
75
+ "dependencies": {
76
+ "@azure/msal-node": "^2.16.0",
77
+ "@modelcontextprotocol/sdk": "^1.0.0",
78
+ "zod": "^3.23.0"
79
+ },
80
+ "devDependencies": {
81
+ "@types/jest": "^29.5.0",
82
+ "@types/node": "^20.0.0",
83
+ "@typescript-eslint/eslint-plugin": "^8.0.0",
84
+ "@typescript-eslint/parser": "^8.0.0",
85
+ "eslint": "^9.0.0",
86
+ "husky": "^9.1.7",
87
+ "jest": "^29.0.0",
88
+ "lint-staged": "^16.2.7",
89
+ "ts-jest": "^29.0.0",
90
+ "tsx": "^4.0.0",
91
+ "typescript": "^5.4.0",
92
+ "esbuild": "^0.25.0",
93
+ "typescript-eslint": "^8.56.0"
94
+ }
95
+ }
package/server.json CHANGED
@@ -1,50 +1,51 @@
1
- {
2
- "$schema": "https://static.modelcontextprotocol.io/schemas/2025-12-11/server.schema.json",
3
- "name": "io.github.codeurali/dataverse",
4
- "title": "MCP Dataverse",
5
- "description": "54 tools for Microsoft Dataverse: CRUD, FetchXML, metadata, audit, batch, solutions and more.",
6
- "icons": [
7
- {
8
- "src": "https://raw.githubusercontent.com/codeurali/mcp-dataverse/master/assets/logo.webp",
9
- "mimeType": "image/webp",
10
- "sizes": ["any"]
11
- }
12
- ],
13
- "websiteUrl": "https://www.npmjs.com/package/mcp-dataverse",
14
- "repository": {
15
- "url": "https://github.com/codeurali/mcp-dataverse",
16
- "source": "github"
17
- },
18
- "version": "0.3.6",
19
- "packages": [
20
- {
21
- "registryType": "npm",
22
- "registryBaseUrl": "https://registry.npmjs.org",
23
- "identifier": "mcp-dataverse",
24
- "version": "0.3.6",
25
- "transport": {
26
- "type": "stdio"
27
- },
28
- "environmentVariables": [
29
- {
30
- "name": "MCP_CONFIG_PATH",
31
- "description": "Path to a config.json file (overrides all other env vars). Recommended for VS Code / Claude Desktop setups.",
32
- "placeholder": "/path/to/config.json",
33
- "isRequired": false,
34
- "format": "string",
35
- "isSecret": false
36
- },
37
- {
38
- "name": "DATAVERSE_ENV_URL",
39
- "description": "Your Dataverse environment URL",
40
- "placeholder": "https://yourorg.crm.dynamics.com",
41
- "isRequired": false,
42
- "format": "string",
43
- "isSecret": false
44
- }
45
- ]
46
- }
47
- ]
48
- }
49
-
50
-
1
+ {
2
+ "$schema": "https://static.modelcontextprotocol.io/schemas/2025-12-11/server.schema.json",
3
+ "name": "io.github.codeurali/dataverse",
4
+ "title": "MCP Dataverse",
5
+ "description": "63 tools for Microsoft Dataverse: CRUD, FetchXML, metadata, audit, batch, solutions and more.",
6
+ "icons": [
7
+ {
8
+ "src": "https://raw.githubusercontent.com/codeurali/mcp-dataverse/master/assets/logo.webp",
9
+ "mimeType": "image/webp",
10
+ "sizes": [
11
+ "any"
12
+ ]
13
+ }
14
+ ],
15
+ "websiteUrl": "https://codeurali.github.io/mcp-dataverse/",
16
+ "repository": {
17
+ "url": "https://github.com/codeurali/mcp-dataverse",
18
+ "source": "github",
19
+ "id": "1163599879"
20
+ },
21
+ "version": "0.3.9",
22
+ "packages": [
23
+ {
24
+ "registryType": "npm",
25
+ "registryBaseUrl": "https://registry.npmjs.org",
26
+ "identifier": "mcp-dataverse",
27
+ "version": "0.3.9",
28
+ "transport": {
29
+ "type": "stdio"
30
+ },
31
+ "environmentVariables": [
32
+ {
33
+ "name": "MCP_CONFIG_PATH",
34
+ "description": "Path to a config.json file (overrides all other env vars). Recommended for VS Code / Claude Desktop setups.",
35
+ "placeholder": "/path/to/config.json",
36
+ "isRequired": false,
37
+ "format": "string",
38
+ "isSecret": false
39
+ },
40
+ {
41
+ "name": "DATAVERSE_ENV_URL",
42
+ "description": "Your Dataverse environment URL",
43
+ "placeholder": "https://yourorg.crm.dynamics.com",
44
+ "isRequired": false,
45
+ "format": "string",
46
+ "isSecret": false
47
+ }
48
+ ]
49
+ }
50
+ ]
51
+ }
@@ -1,4 +0,0 @@
1
- import type { AuthProvider } from "./auth-provider.interface.js";
2
- import type { Config } from "../config/config.schema.js";
3
- export declare function createAuthProvider(config: Config): AuthProvider;
4
- //# sourceMappingURL=auth-provider.factory.d.ts.map
@@ -1 +0,0 @@
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,5 +0,0 @@
1
- import { DeviceCodeAuthProvider } from "./device-code-auth-provider.js";
2
- export function createAuthProvider(config) {
3
- return new DeviceCodeAuthProvider(config.environmentUrl);
4
- }
5
- //# sourceMappingURL=auth-provider.factory.js.map
@@ -1 +0,0 @@
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"}
@@ -1,21 +0,0 @@
1
- export interface AuthProvider {
2
- /**
3
- * Returns a valid Bearer token for the Dataverse environment.
4
- * Implementations must handle token refresh silently.
5
- */
6
- getToken(): Promise<string>;
7
- /**
8
- * Invalidates any cached token, forcing a fresh acquisition on the next getToken() call.
9
- * Must be called before retrying a request that received a 401 response.
10
- */
11
- invalidateToken(): void;
12
- /**
13
- * Returns true if the current auth session is valid.
14
- */
15
- isAuthenticated(): Promise<boolean>;
16
- /**
17
- * The Dataverse environment URL this provider authenticates against.
18
- */
19
- readonly environmentUrl: string;
20
- }
21
- //# sourceMappingURL=auth-provider.interface.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"auth-provider.interface.d.ts","sourceRoot":"","sources":["../../src/auth/auth-provider.interface.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,YAAY;IAC3B;;;OAGG;IACH,QAAQ,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC;IAE5B;;;OAGG;IACH,eAAe,IAAI,IAAI,CAAC;IAExB;;OAEG;IACH,eAAe,IAAI,OAAO,CAAC,OAAO,CAAC,CAAC;IAEpC;;OAEG;IACH,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;CACjC"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=auth-provider.interface.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"auth-provider.interface.js","sourceRoot":"","sources":["../../src/auth/auth-provider.interface.ts"],"names":[],"mappings":""}
@@ -1,18 +0,0 @@
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
@@ -1 +0,0 @@
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"}
@@ -1,167 +0,0 @@
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
@@ -1 +0,0 @@
1
- {"version":3,"file":"device-code-auth-provider.js","sourceRoot":"","sources":["../../src/auth/device-code-auth-provider.ts"],"names":[],"mappings":"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"}
@@ -1,3 +0,0 @@
1
- import { type Config } from "./config.schema.js";
2
- export declare function loadConfig(): Config;
3
- //# sourceMappingURL=config.loader.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"config.loader.d.ts","sourceRoot":"","sources":["../../src/config/config.loader.ts"],"names":[],"mappings":"AAGA,OAAO,EAAgB,KAAK,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAI/D,wBAAgB,UAAU,IAAI,MAAM,CA0CnC"}