mcp-dataverse 0.1.6 → 0.1.8
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/README.md +21 -3
- package/dist/config/config.loader.d.ts.map +1 -1
- package/dist/config/config.loader.js +30 -28
- package/dist/config/config.loader.js.map +1 -1
- package/package.json +1 -3
- package/server.json +12 -6
- package/.env.example +0 -15
- package/config.example.json +0 -10
package/README.md
CHANGED
|
@@ -10,9 +10,23 @@ MCP server that exposes the Microsoft Dataverse Web API as **50 AI-callable tool
|
|
|
10
10
|
|
|
11
11
|
### One-click (VS Code)
|
|
12
12
|
|
|
13
|
-
[Install in VS Code](https://
|
|
13
|
+
[](https://vscode.dev/redirect/mcp/install?name=mcp-dataverse&config=%7B%22args%22%3A%5B%22-y%22%2C%22mcp-dataverse%22%5D%2C%22type%22%3A%22stdio%22%2C%22command%22%3A%22npx%22%2C%22env%22%3A%7B%22DATAVERSE_ENV_URL%22%3A%22%24%7Binput%3Adataverse_env_url%7D%22%2C%22AUTH_MODE%22%3A%22%24%7Binput%3Adataverse_auth_mode%7D%22%2C%22PAC_PROFILE_NAME%22%3A%22%24%7Binput%3Adataverse_pac_profile%7D%22%7D%7D&inputs=%5B%7B%22id%22%3A%22dataverse_env_url%22%2C%22password%22%3Afalse%2C%22type%22%3A%22promptString%22%2C%22description%22%3A%22Dataverse%20URL%20%28e.g.%20https%3A%2F%2Fyourorg.crm.dynamics.com%29%22%7D%2C%7B%22default%22%3A%22pac%22%2C%22id%22%3A%22dataverse_auth_mode%22%2C%22password%22%3Afalse%2C%22type%22%3A%22promptString%22%2C%22description%22%3A%22Auth%20mode%3A%20pac%20%28default%29%20or%20msal%22%7D%2C%7B%22default%22%3A%22default%22%2C%22id%22%3A%22dataverse_pac_profile%22%2C%22password%22%3Afalse%2C%22type%22%3A%22promptString%22%2C%22description%22%3A%22PAC%20CLI%20profile%20name%20%28default%3A%20default%29%22%7D%5D) [](https://insiders.vscode.dev/redirect/mcp/install?name=mcp-dataverse&config=%7B%22args%22%3A%5B%22-y%22%2C%22mcp-dataverse%22%5D%2C%22type%22%3A%22stdio%22%2C%22command%22%3A%22npx%22%2C%22env%22%3A%7B%22DATAVERSE_ENV_URL%22%3A%22%24%7Binput%3Adataverse_env_url%7D%22%2C%22AUTH_MODE%22%3A%22%24%7Binput%3Adataverse_auth_mode%7D%22%2C%22PAC_PROFILE_NAME%22%3A%22%24%7Binput%3Adataverse_pac_profile%7D%22%7D%7D&inputs=%5B%7B%22id%22%3A%22dataverse_env_url%22%2C%22password%22%3Afalse%2C%22type%22%3A%22promptString%22%2C%22description%22%3A%22Dataverse%20URL%20%28e.g.%20https%3A%2F%2Fyourorg.crm.dynamics.com%29%22%7D%2C%7B%22default%22%3A%22pac%22%2C%22id%22%3A%22dataverse_auth_mode%22%2C%22password%22%3Afalse%2C%22type%22%3A%22promptString%22%2C%22description%22%3A%22Auth%20mode%3A%20pac%20%28default%29%20or%20msal%22%7D%2C%7B%22default%22%3A%22default%22%2C%22id%22%3A%22dataverse_pac_profile%22%2C%22password%22%3Afalse%2C%22type%22%3A%22promptString%22%2C%22description%22%3A%22PAC%20CLI%20profile%20name%20%28default%3A%20default%29%22%7D%5D)
|
|
14
14
|
|
|
15
|
-
|
|
15
|
+
> VS Code will prompt for your Dataverse URL, auth mode, and PAC profile during installation.
|
|
16
|
+
|
|
17
|
+
### Command line
|
|
18
|
+
|
|
19
|
+
```bash
|
|
20
|
+
# VS Code
|
|
21
|
+
code --add-mcp '{"name":"dataverse","type":"stdio","command":"npx","args":["-y","mcp-dataverse"],"env":{"DATAVERSE_ENV_URL":"https://yourorg.crm.dynamics.com","AUTH_MODE":"pac"}}'
|
|
22
|
+
|
|
23
|
+
# VS Code Insiders
|
|
24
|
+
code-insiders --add-mcp '{"name":"dataverse","type":"stdio","command":"npx","args":["-y","mcp-dataverse"],"env":{"DATAVERSE_ENV_URL":"https://yourorg.crm.dynamics.com","AUTH_MODE":"pac"}}'
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
> Replace `https://yourorg.crm.dynamics.com` with your actual Dataverse environment URL.
|
|
28
|
+
|
|
29
|
+
### Manual (mcp.json)
|
|
16
30
|
|
|
17
31
|
Add to your `.vscode/mcp.json` (or user settings):
|
|
18
32
|
|
|
@@ -22,7 +36,11 @@ Add to your `.vscode/mcp.json` (or user settings):
|
|
|
22
36
|
"dataverse": {
|
|
23
37
|
"type": "stdio",
|
|
24
38
|
"command": "npx",
|
|
25
|
-
"args": ["-y", "mcp-dataverse"]
|
|
39
|
+
"args": ["-y", "mcp-dataverse"],
|
|
40
|
+
"env": {
|
|
41
|
+
"DATAVERSE_ENV_URL": "https://yourorg.crm.dynamics.com",
|
|
42
|
+
"AUTH_MODE": "pac"
|
|
43
|
+
}
|
|
26
44
|
}
|
|
27
45
|
}
|
|
28
46
|
}
|
|
@@ -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,CAuDnC"}
|
|
@@ -3,8 +3,8 @@ import { join } from "path";
|
|
|
3
3
|
import { ConfigSchema } from "./config.schema.js";
|
|
4
4
|
const CONFIG_FILE_NAME = "config.json";
|
|
5
5
|
export function loadConfig() {
|
|
6
|
-
// Priority: env vars > config.json > defaults
|
|
7
|
-
const configPath = join(process.cwd(), CONFIG_FILE_NAME);
|
|
6
|
+
// Priority: env vars > MCP_CONFIG_PATH file > cwd/config.json > defaults
|
|
7
|
+
const configPath = process.env["MCP_CONFIG_PATH"] ?? join(process.cwd(), CONFIG_FILE_NAME);
|
|
8
8
|
let rawConfig = {};
|
|
9
9
|
if (existsSync(configPath)) {
|
|
10
10
|
const fileContent = readFileSync(configPath, "utf-8");
|
|
@@ -12,34 +12,36 @@ export function loadConfig() {
|
|
|
12
12
|
rawConfig = JSON.parse(fileContent);
|
|
13
13
|
}
|
|
14
14
|
catch {
|
|
15
|
-
throw new Error(`Invalid JSON in ${
|
|
15
|
+
throw new Error(`Invalid JSON in ${configPath}. Check for syntax errors (trailing commas, missing quotes).`);
|
|
16
16
|
}
|
|
17
17
|
}
|
|
18
|
-
// Override with env vars if present
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
if (
|
|
23
|
-
rawConfig["
|
|
24
|
-
|
|
25
|
-
if (
|
|
26
|
-
rawConfig["
|
|
27
|
-
|
|
28
|
-
if (
|
|
29
|
-
rawConfig["
|
|
30
|
-
|
|
31
|
-
if (
|
|
32
|
-
rawConfig["
|
|
33
|
-
|
|
34
|
-
if (
|
|
35
|
-
rawConfig["
|
|
36
|
-
|
|
37
|
-
if (
|
|
38
|
-
rawConfig["
|
|
39
|
-
|
|
40
|
-
if (
|
|
41
|
-
rawConfig["
|
|
42
|
-
|
|
18
|
+
// Override with env vars if present.
|
|
19
|
+
// Accepts both SCREAMING_SNAKE_CASE (documented, server.json) and camelCase
|
|
20
|
+
// (generated by VS Code when it reads config.example.json from the npm package).
|
|
21
|
+
const envUrl = process.env["DATAVERSE_ENV_URL"] ?? process.env["environmentUrl"];
|
|
22
|
+
if (envUrl)
|
|
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
|
+
const timeoutMs = process.env["REQUEST_TIMEOUT_MS"] ?? process.env["requestTimeoutMs"];
|
|
40
|
+
if (timeoutMs)
|
|
41
|
+
rawConfig["requestTimeoutMs"] = Number(timeoutMs);
|
|
42
|
+
const maxRetries = process.env["MAX_RETRIES"] ?? process.env["maxRetries"];
|
|
43
|
+
if (maxRetries)
|
|
44
|
+
rawConfig["maxRetries"] = Number(maxRetries);
|
|
43
45
|
const result = ConfigSchema.safeParse(rawConfig);
|
|
44
46
|
if (!result.success) {
|
|
45
47
|
throw new Error(`Invalid configuration:\n${result.error.issues.map((i) => ` - ${i.path.join(".")}: ${i.message}`).join("\n")}`);
|
|
@@ -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,
|
|
1
|
+
{"version":3,"file":"config.loader.js","sourceRoot":"","sources":["../../src/config/config.loader.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "mcp-dataverse",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.8",
|
|
4
4
|
"description": "MCP Server for Microsoft Dataverse Web API",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/server.js",
|
|
@@ -26,8 +26,6 @@
|
|
|
26
26
|
},
|
|
27
27
|
"files": [
|
|
28
28
|
"dist/**",
|
|
29
|
-
"config.example.json",
|
|
30
|
-
".env.example",
|
|
31
29
|
"README.md",
|
|
32
30
|
"LICENSE",
|
|
33
31
|
"CAPABILITIES.md",
|
package/server.json
CHANGED
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
{
|
|
8
8
|
"src": "https://raw.githubusercontent.com/codeurali/mcp-dataverse/master/assets/logo.webp",
|
|
9
9
|
"mimeType": "image/webp",
|
|
10
|
-
"sizes": "any"
|
|
10
|
+
"sizes": ["any"]
|
|
11
11
|
}
|
|
12
12
|
],
|
|
13
13
|
"websiteUrl": "https://www.npmjs.com/package/mcp-dataverse",
|
|
@@ -15,22 +15,28 @@
|
|
|
15
15
|
"url": "https://github.com/codeurali/mcp-dataverse",
|
|
16
16
|
"source": "github"
|
|
17
17
|
},
|
|
18
|
-
"version": "0.1.
|
|
19
|
-
"packages": [
|
|
18
|
+
"version": "0.1.8",
|
|
20
19
|
{
|
|
21
20
|
"registryType": "npm",
|
|
22
21
|
"registryBaseUrl": "https://registry.npmjs.org",
|
|
23
22
|
"identifier": "mcp-dataverse",
|
|
24
|
-
"version": "0.1.
|
|
25
|
-
"transport": {
|
|
23
|
+
"version": "0.1.8", {
|
|
26
24
|
"type": "stdio"
|
|
27
25
|
},
|
|
28
26
|
"environmentVariables": [
|
|
27
|
+
{
|
|
28
|
+
"name": "MCP_CONFIG_PATH",
|
|
29
|
+
"description": "Path to a config.json file (overrides all other env vars). Recommended for VS Code / Claude Desktop setups.",
|
|
30
|
+
"placeholder": "/path/to/config.json",
|
|
31
|
+
"isRequired": false,
|
|
32
|
+
"format": "string",
|
|
33
|
+
"isSecret": false
|
|
34
|
+
},
|
|
29
35
|
{
|
|
30
36
|
"name": "DATAVERSE_ENV_URL",
|
|
31
37
|
"description": "Your Dataverse environment URL",
|
|
32
38
|
"placeholder": "https://yourorg.crm.dynamics.com",
|
|
33
|
-
"isRequired":
|
|
39
|
+
"isRequired": false,
|
|
34
40
|
"format": "string",
|
|
35
41
|
"isSecret": false
|
|
36
42
|
},
|
package/.env.example
DELETED
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
# MCP Dataverse Configuration
|
|
2
|
-
# Set these environment variables (or use config.json for local dev)
|
|
3
|
-
|
|
4
|
-
DATAVERSE_ENV_URL=https://yourorg.crm.dynamics.com
|
|
5
|
-
AUTH_MODE=pac
|
|
6
|
-
PAC_PROFILE_NAME=default
|
|
7
|
-
|
|
8
|
-
# MSAL client credentials (required if AUTH_MODE=msal)
|
|
9
|
-
TENANT_ID=
|
|
10
|
-
CLIENT_ID=
|
|
11
|
-
CLIENT_SECRET=
|
|
12
|
-
|
|
13
|
-
# Tuning (optional)
|
|
14
|
-
# REQUEST_TIMEOUT_MS=30000
|
|
15
|
-
# MAX_RETRIES=3
|