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.
- package/CAPABILITIES.md +1039 -1039
- package/LICENSE +21 -21
- package/README.md +114 -105
- package/dist/auth-provider.factory-MSMLSOX3.js +1 -0
- package/dist/chunk-24RDOMG4.js +29 -0
- package/dist/chunk-OXKMMPM3.js +37 -0
- package/dist/chunk-PAX4NW5B.js +1 -0
- package/dist/chunk-SUDI4JM6.js +3 -0
- package/dist/config.loader-VTIKUDN7.js +1 -0
- package/dist/dataverse-client-advanced-T5ZJMRLK.js +1 -0
- package/dist/doctor.js +2 -102
- package/dist/http-server.js +3 -61
- package/dist/install.js +8 -233
- package/dist/server.js +43 -202
- package/dist/setup-auth.js +18 -41
- package/package.json +95 -94
- package/server.json +51 -50
- package/dist/auth/auth-provider.factory.d.ts +0 -4
- package/dist/auth/auth-provider.factory.d.ts.map +0 -1
- package/dist/auth/auth-provider.factory.js +0 -5
- package/dist/auth/auth-provider.factory.js.map +0 -1
- package/dist/auth/auth-provider.interface.d.ts +0 -21
- package/dist/auth/auth-provider.interface.d.ts.map +0 -1
- package/dist/auth/auth-provider.interface.js +0 -2
- package/dist/auth/auth-provider.interface.js.map +0 -1
- package/dist/auth/device-code-auth-provider.d.ts +0 -18
- package/dist/auth/device-code-auth-provider.d.ts.map +0 -1
- package/dist/auth/device-code-auth-provider.js +0 -167
- package/dist/auth/device-code-auth-provider.js.map +0 -1
- package/dist/config/config.loader.d.ts +0 -3
- package/dist/config/config.loader.d.ts.map +0 -1
- package/dist/config/config.loader.js +0 -39
- package/dist/config/config.loader.js.map +0 -1
- package/dist/config/config.schema.d.ts +0 -16
- package/dist/config/config.schema.d.ts.map +0 -1
- package/dist/config/config.schema.js +0 -20
- package/dist/config/config.schema.js.map +0 -1
- package/dist/dataverse/dataverse-client-advanced.d.ts +0 -53
- package/dist/dataverse/dataverse-client-advanced.d.ts.map +0 -1
- package/dist/dataverse/dataverse-client-advanced.js +0 -199
- package/dist/dataverse/dataverse-client-advanced.js.map +0 -1
- package/dist/dataverse/dataverse-client.actions.d.ts +0 -11
- package/dist/dataverse/dataverse-client.actions.d.ts.map +0 -1
- package/dist/dataverse/dataverse-client.actions.js +0 -25
- package/dist/dataverse/dataverse-client.actions.js.map +0 -1
- package/dist/dataverse/dataverse-client.batch.d.ts +0 -10
- package/dist/dataverse/dataverse-client.batch.d.ts.map +0 -1
- package/dist/dataverse/dataverse-client.batch.js +0 -74
- package/dist/dataverse/dataverse-client.batch.js.map +0 -1
- package/dist/dataverse/dataverse-client.d.ts +0 -46
- package/dist/dataverse/dataverse-client.d.ts.map +0 -1
- package/dist/dataverse/dataverse-client.js +0 -275
- package/dist/dataverse/dataverse-client.js.map +0 -1
- package/dist/dataverse/dataverse-client.metadata.d.ts +0 -41
- package/dist/dataverse/dataverse-client.metadata.d.ts.map +0 -1
- package/dist/dataverse/dataverse-client.metadata.js +0 -124
- package/dist/dataverse/dataverse-client.metadata.js.map +0 -1
- package/dist/dataverse/dataverse-client.utils.d.ts +0 -14
- package/dist/dataverse/dataverse-client.utils.d.ts.map +0 -1
- package/dist/dataverse/dataverse-client.utils.js +0 -65
- package/dist/dataverse/dataverse-client.utils.js.map +0 -1
- package/dist/dataverse/http-client.d.ts +0 -38
- package/dist/dataverse/http-client.d.ts.map +0 -1
- package/dist/dataverse/http-client.js +0 -111
- package/dist/dataverse/http-client.js.map +0 -1
- package/dist/dataverse/types.d.ts +0 -68
- package/dist/dataverse/types.d.ts.map +0 -1
- package/dist/dataverse/types.js +0 -2
- package/dist/dataverse/types.js.map +0 -1
- package/dist/doctor.d.ts +0 -7
- package/dist/doctor.d.ts.map +0 -1
- package/dist/doctor.js.map +0 -1
- package/dist/http-server.d.ts +0 -3
- package/dist/http-server.d.ts.map +0 -1
- package/dist/http-server.js.map +0 -1
- package/dist/install.d.ts +0 -3
- package/dist/install.d.ts.map +0 -1
- package/dist/install.js.map +0 -1
- package/dist/resources/resource-provider.d.ts +0 -11
- package/dist/resources/resource-provider.d.ts.map +0 -1
- package/dist/resources/resource-provider.js +0 -79
- package/dist/resources/resource-provider.js.map +0 -1
- package/dist/server.d.ts +0 -3
- package/dist/server.d.ts.map +0 -1
- package/dist/server.js.map +0 -1
- package/dist/setup-auth.d.ts +0 -3
- package/dist/setup-auth.d.ts.map +0 -1
- package/dist/setup-auth.js.map +0 -1
- package/dist/tools/actions.tools.d.ts +0 -206
- package/dist/tools/actions.tools.d.ts.map +0 -1
- package/dist/tools/actions.tools.js +0 -256
- package/dist/tools/actions.tools.js.map +0 -1
- package/dist/tools/annotations.tools.d.ts +0 -94
- package/dist/tools/annotations.tools.d.ts.map +0 -1
- package/dist/tools/annotations.tools.js +0 -225
- package/dist/tools/annotations.tools.js.map +0 -1
- package/dist/tools/audit.tools.d.ts +0 -51
- package/dist/tools/audit.tools.d.ts.map +0 -1
- package/dist/tools/audit.tools.js +0 -170
- package/dist/tools/audit.tools.js.map +0 -1
- package/dist/tools/auth.tools.d.ts +0 -23
- package/dist/tools/auth.tools.d.ts.map +0 -1
- package/dist/tools/auth.tools.js +0 -36
- package/dist/tools/auth.tools.js.map +0 -1
- package/dist/tools/batch.tools.d.ts +0 -52
- package/dist/tools/batch.tools.d.ts.map +0 -1
- package/dist/tools/batch.tools.js +0 -89
- package/dist/tools/batch.tools.js.map +0 -1
- package/dist/tools/crud.tools.d.ts +0 -260
- package/dist/tools/crud.tools.d.ts.map +0 -1
- package/dist/tools/crud.tools.js +0 -290
- package/dist/tools/crud.tools.js.map +0 -1
- package/dist/tools/customization.tools.d.ts +0 -127
- package/dist/tools/customization.tools.d.ts.map +0 -1
- package/dist/tools/customization.tools.js +0 -285
- package/dist/tools/customization.tools.js.map +0 -1
- package/dist/tools/environment.tools.d.ts +0 -106
- package/dist/tools/environment.tools.d.ts.map +0 -1
- package/dist/tools/environment.tools.js +0 -274
- package/dist/tools/environment.tools.js.map +0 -1
- package/dist/tools/file.tools.d.ts +0 -73
- package/dist/tools/file.tools.d.ts.map +0 -1
- package/dist/tools/file.tools.js +0 -160
- package/dist/tools/file.tools.js.map +0 -1
- package/dist/tools/guardrails.d.ts +0 -22
- package/dist/tools/guardrails.d.ts.map +0 -1
- package/dist/tools/guardrails.js +0 -56
- package/dist/tools/guardrails.js.map +0 -1
- package/dist/tools/impersonate.tools.d.ts +0 -44
- package/dist/tools/impersonate.tools.d.ts.map +0 -1
- package/dist/tools/impersonate.tools.js +0 -87
- package/dist/tools/impersonate.tools.js.map +0 -1
- package/dist/tools/metadata.tools.d.ts +0 -279
- package/dist/tools/metadata.tools.d.ts.map +0 -1
- package/dist/tools/metadata.tools.js +0 -400
- package/dist/tools/metadata.tools.js.map +0 -1
- package/dist/tools/org.tools.d.ts +0 -32
- package/dist/tools/org.tools.d.ts.map +0 -1
- package/dist/tools/org.tools.js +0 -65
- package/dist/tools/org.tools.js.map +0 -1
- package/dist/tools/output.utils.d.ts +0 -63
- package/dist/tools/output.utils.d.ts.map +0 -1
- package/dist/tools/output.utils.js +0 -78
- package/dist/tools/output.utils.js.map +0 -1
- package/dist/tools/progress.d.ts +0 -15
- package/dist/tools/progress.d.ts.map +0 -1
- package/dist/tools/progress.js +0 -29
- package/dist/tools/progress.js.map +0 -1
- package/dist/tools/quality.tools.d.ts +0 -36
- package/dist/tools/quality.tools.d.ts.map +0 -1
- package/dist/tools/quality.tools.js +0 -97
- package/dist/tools/quality.tools.js.map +0 -1
- package/dist/tools/query.tools.d.ts +0 -151
- package/dist/tools/query.tools.d.ts.map +0 -1
- package/dist/tools/query.tools.js +0 -293
- package/dist/tools/query.tools.js.map +0 -1
- package/dist/tools/relations.tools.d.ts +0 -77
- package/dist/tools/relations.tools.d.ts.map +0 -1
- package/dist/tools/relations.tools.js +0 -96
- package/dist/tools/relations.tools.js.map +0 -1
- package/dist/tools/router.tools.d.ts +0 -5
- package/dist/tools/router.tools.d.ts.map +0 -1
- package/dist/tools/router.tools.js +0 -247
- package/dist/tools/router.tools.js.map +0 -1
- package/dist/tools/search.tools.d.ts +0 -74
- package/dist/tools/search.tools.d.ts.map +0 -1
- package/dist/tools/search.tools.js +0 -142
- package/dist/tools/search.tools.js.map +0 -1
- package/dist/tools/solution.tools.d.ts +0 -113
- package/dist/tools/solution.tools.d.ts.map +0 -1
- package/dist/tools/solution.tools.js +0 -176
- package/dist/tools/solution.tools.js.map +0 -1
- package/dist/tools/teams.tools.d.ts +0 -65
- package/dist/tools/teams.tools.d.ts.map +0 -1
- package/dist/tools/teams.tools.js +0 -127
- package/dist/tools/teams.tools.js.map +0 -1
- package/dist/tools/tool-registry.d.ts +0 -35
- package/dist/tools/tool-registry.d.ts.map +0 -1
- package/dist/tools/tool-registry.js +0 -31
- package/dist/tools/tool-registry.js.map +0 -1
- package/dist/tools/trace.tools.d.ts +0 -75
- package/dist/tools/trace.tools.d.ts.map +0 -1
- package/dist/tools/trace.tools.js +0 -233
- package/dist/tools/trace.tools.js.map +0 -1
- package/dist/tools/tracking.tools.d.ts +0 -41
- package/dist/tools/tracking.tools.d.ts.map +0 -1
- package/dist/tools/tracking.tools.js +0 -76
- package/dist/tools/tracking.tools.js.map +0 -1
- package/dist/tools/users.tools.d.ts +0 -141
- package/dist/tools/users.tools.d.ts.map +0 -1
- package/dist/tools/users.tools.js +0 -321
- package/dist/tools/users.tools.js.map +0 -1
- package/dist/tools/validation.utils.d.ts +0 -6
- package/dist/tools/validation.utils.d.ts.map +0 -1
- package/dist/tools/validation.utils.js +0 -14
- package/dist/tools/validation.utils.js.map +0 -1
- package/dist/tools/views.tools.d.ts +0 -36
- package/dist/tools/views.tools.d.ts.map +0 -1
- package/dist/tools/views.tools.js +0 -92
- package/dist/tools/views.tools.js.map +0 -1
- package/dist/tools/workflow.tools.d.ts +0 -111
- package/dist/tools/workflow.tools.d.ts.map +0 -1
- package/dist/tools/workflow.tools.js +0 -449
- package/dist/tools/workflow.tools.js.map +0 -1
- package/dist/transport.d.ts +0 -6
- package/dist/transport.d.ts.map +0 -1
- package/dist/transport.js +0 -21
- package/dist/transport.js.map +0 -1
package/dist/setup-auth.js
CHANGED
|
@@ -1,42 +1,19 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
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.
|
|
4
|
-
"description": "The most complete MCP server for Microsoft Dataverse
|
|
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": "
|
|
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
|
-
"
|
|
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": "
|
|
6
|
-
"icons": [
|
|
7
|
-
{
|
|
8
|
-
"src": "https://raw.githubusercontent.com/codeurali/mcp-dataverse/master/assets/logo.webp",
|
|
9
|
-
"mimeType": "image/webp",
|
|
10
|
-
"sizes": [
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
"
|
|
25
|
-
"
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
"
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
"
|
|
34
|
-
"
|
|
35
|
-
"
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
"
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
"
|
|
42
|
-
"
|
|
43
|
-
"
|
|
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 +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 +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 +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 +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"}
|