mcp-dataverse 0.2.5 → 0.3.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/dist/doctor.d.ts +7 -0
- package/dist/doctor.d.ts.map +1 -0
- package/dist/doctor.js +103 -0
- package/dist/doctor.js.map +1 -0
- package/dist/http-server.d.ts +3 -0
- package/dist/http-server.d.ts.map +1 -0
- package/dist/http-server.js +61 -0
- package/dist/http-server.js.map +1 -0
- package/dist/server.js +112 -110
- package/dist/server.js.map +1 -1
- package/dist/tools/actions.tools.d.ts +36 -0
- package/dist/tools/actions.tools.d.ts.map +1 -1
- package/dist/tools/actions.tools.js +53 -18
- package/dist/tools/actions.tools.js.map +1 -1
- package/dist/tools/annotations.tools.d.ts +12 -0
- package/dist/tools/annotations.tools.d.ts.map +1 -1
- package/dist/tools/annotations.tools.js +24 -25
- package/dist/tools/annotations.tools.js.map +1 -1
- package/dist/tools/audit.tools.d.ts +6 -0
- package/dist/tools/audit.tools.d.ts.map +1 -1
- package/dist/tools/audit.tools.js +8 -8
- package/dist/tools/audit.tools.js.map +1 -1
- package/dist/tools/auth.tools.d.ts +6 -0
- package/dist/tools/auth.tools.d.ts.map +1 -1
- package/dist/tools/auth.tools.js +17 -13
- package/dist/tools/auth.tools.js.map +1 -1
- package/dist/tools/batch.tools.d.ts +6 -0
- package/dist/tools/batch.tools.d.ts.map +1 -1
- package/dist/tools/batch.tools.js +11 -8
- package/dist/tools/batch.tools.js.map +1 -1
- package/dist/tools/crud.tools.d.ts +36 -0
- package/dist/tools/crud.tools.d.ts.map +1 -1
- package/dist/tools/crud.tools.js +58 -52
- package/dist/tools/crud.tools.js.map +1 -1
- package/dist/tools/customization.tools.d.ts +18 -0
- package/dist/tools/customization.tools.d.ts.map +1 -1
- package/dist/tools/customization.tools.js +27 -29
- package/dist/tools/customization.tools.js.map +1 -1
- package/dist/tools/environment.tools.d.ts +12 -0
- package/dist/tools/environment.tools.d.ts.map +1 -1
- package/dist/tools/environment.tools.js +15 -6
- package/dist/tools/environment.tools.js.map +1 -1
- package/dist/tools/file.tools.d.ts +12 -0
- package/dist/tools/file.tools.d.ts.map +1 -1
- package/dist/tools/file.tools.js +29 -30
- package/dist/tools/file.tools.js.map +1 -1
- package/dist/tools/impersonate.tools.d.ts +6 -0
- package/dist/tools/impersonate.tools.d.ts.map +1 -1
- package/dist/tools/impersonate.tools.js +12 -12
- package/dist/tools/impersonate.tools.js.map +1 -1
- package/dist/tools/metadata.tools.d.ts +42 -0
- package/dist/tools/metadata.tools.d.ts.map +1 -1
- package/dist/tools/metadata.tools.js +92 -47
- package/dist/tools/metadata.tools.js.map +1 -1
- package/dist/tools/org.tools.d.ts +6 -0
- package/dist/tools/org.tools.d.ts.map +1 -1
- package/dist/tools/org.tools.js +10 -8
- package/dist/tools/org.tools.js.map +1 -1
- package/dist/tools/output.utils.d.ts +21 -0
- package/dist/tools/output.utils.d.ts.map +1 -0
- package/dist/tools/output.utils.js +31 -0
- package/dist/tools/output.utils.js.map +1 -0
- package/dist/tools/quality.tools.d.ts +6 -0
- package/dist/tools/quality.tools.d.ts.map +1 -1
- package/dist/tools/quality.tools.js +8 -3
- package/dist/tools/quality.tools.js.map +1 -1
- package/dist/tools/query.tools.d.ts +18 -0
- package/dist/tools/query.tools.d.ts.map +1 -1
- package/dist/tools/query.tools.js +42 -9
- package/dist/tools/query.tools.js.map +1 -1
- package/dist/tools/relations.tools.d.ts +12 -0
- package/dist/tools/relations.tools.d.ts.map +1 -1
- package/dist/tools/relations.tools.js +15 -20
- package/dist/tools/relations.tools.js.map +1 -1
- package/dist/tools/search.tools.d.ts +6 -0
- package/dist/tools/search.tools.d.ts.map +1 -1
- package/dist/tools/search.tools.js +11 -3
- package/dist/tools/search.tools.js.map +1 -1
- package/dist/tools/solution.tools.d.ts +18 -0
- package/dist/tools/solution.tools.d.ts.map +1 -1
- package/dist/tools/solution.tools.js +29 -14
- package/dist/tools/solution.tools.js.map +1 -1
- package/dist/tools/teams.tools.d.ts +6 -0
- package/dist/tools/teams.tools.d.ts.map +1 -1
- package/dist/tools/teams.tools.js +8 -8
- package/dist/tools/teams.tools.js.map +1 -1
- package/dist/tools/tool-registry.d.ts +34 -0
- package/dist/tools/tool-registry.d.ts.map +1 -0
- package/dist/tools/tool-registry.js +31 -0
- package/dist/tools/tool-registry.js.map +1 -0
- package/dist/tools/trace.tools.d.ts +12 -0
- package/dist/tools/trace.tools.d.ts.map +1 -1
- package/dist/tools/trace.tools.js +17 -6
- package/dist/tools/trace.tools.js.map +1 -1
- package/dist/tools/tracking.tools.d.ts +6 -0
- package/dist/tools/tracking.tools.d.ts.map +1 -1
- package/dist/tools/tracking.tools.js +13 -3
- package/dist/tools/tracking.tools.js.map +1 -1
- package/dist/tools/users.tools.d.ts +12 -0
- package/dist/tools/users.tools.d.ts.map +1 -1
- package/dist/tools/users.tools.js +21 -22
- package/dist/tools/users.tools.js.map +1 -1
- package/dist/tools/views.tools.d.ts +6 -0
- package/dist/tools/views.tools.d.ts.map +1 -1
- package/dist/tools/views.tools.js +15 -16
- package/dist/tools/views.tools.js.map +1 -1
- package/dist/transport.d.ts +6 -0
- package/dist/transport.d.ts.map +1 -0
- package/dist/transport.js +21 -0
- package/dist/transport.js.map +1 -0
- package/package.json +2 -1
- package/server.json +2 -2
package/dist/doctor.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"doctor.d.ts","sourceRoot":"","sources":["../src/doctor.ts"],"names":[],"mappings":";AACA;;;GAGG;AAEH,wBAAsB,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC,CAyG/C"}
|
package/dist/doctor.js
ADDED
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* Diagnostic CLI command for mcp-dataverse.
|
|
4
|
+
* Usage: npx mcp-dataverse doctor
|
|
5
|
+
*/
|
|
6
|
+
export async function runDoctor() {
|
|
7
|
+
const out = (msg) => process.stdout.write(msg + "\n");
|
|
8
|
+
const ok = (msg) => out(` ✅ ${msg}`);
|
|
9
|
+
const fail = (msg) => out(` ❌ ${msg}`);
|
|
10
|
+
out("");
|
|
11
|
+
out("🏥 mcp-dataverse doctor");
|
|
12
|
+
out("─".repeat(50));
|
|
13
|
+
out("");
|
|
14
|
+
let allPassed = true;
|
|
15
|
+
// 1. Node.js version check
|
|
16
|
+
out("📋 Environment");
|
|
17
|
+
const nodeVersion = process.version;
|
|
18
|
+
const major = parseInt(nodeVersion.slice(1).split(".")[0], 10);
|
|
19
|
+
if (major >= 20) {
|
|
20
|
+
ok(`Node.js ${nodeVersion}`);
|
|
21
|
+
}
|
|
22
|
+
else {
|
|
23
|
+
fail(`Node.js ${nodeVersion} — requires v20+`);
|
|
24
|
+
allPassed = false;
|
|
25
|
+
}
|
|
26
|
+
out("");
|
|
27
|
+
// 2. Configuration check
|
|
28
|
+
out("⚙️ Configuration");
|
|
29
|
+
try {
|
|
30
|
+
const { loadConfig } = await import("./config/config.loader.js");
|
|
31
|
+
const config = loadConfig();
|
|
32
|
+
ok(`Environment URL: ${config.environmentUrl}`);
|
|
33
|
+
ok(`Timeout: ${config.requestTimeoutMs}ms, Retries: ${config.maxRetries}`);
|
|
34
|
+
}
|
|
35
|
+
catch (err) {
|
|
36
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
37
|
+
fail(`Configuration error: ${msg}`);
|
|
38
|
+
allPassed = false;
|
|
39
|
+
// Can't proceed without config
|
|
40
|
+
out("");
|
|
41
|
+
out(allPassed ? "✅ All checks passed!" : "❌ Some checks failed.");
|
|
42
|
+
process.exit(allPassed ? 0 : 1);
|
|
43
|
+
}
|
|
44
|
+
out("");
|
|
45
|
+
// 3. Authentication check
|
|
46
|
+
out("🔑 Authentication");
|
|
47
|
+
try {
|
|
48
|
+
const { loadConfig } = await import("./config/config.loader.js");
|
|
49
|
+
const config = loadConfig();
|
|
50
|
+
const { createAuthProvider } = await import("./auth/auth-provider.factory.js");
|
|
51
|
+
const authProvider = createAuthProvider(config);
|
|
52
|
+
const token = await authProvider.getToken();
|
|
53
|
+
if (token) {
|
|
54
|
+
ok("Token acquired successfully");
|
|
55
|
+
const parts = token.split(".");
|
|
56
|
+
if (parts.length === 3) {
|
|
57
|
+
ok("Valid JWT token format");
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
else {
|
|
61
|
+
fail("No token returned");
|
|
62
|
+
allPassed = false;
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
catch (err) {
|
|
66
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
67
|
+
fail(`Auth failed: ${msg}`);
|
|
68
|
+
allPassed = false;
|
|
69
|
+
}
|
|
70
|
+
out("");
|
|
71
|
+
// 4. API Connectivity (WhoAmI)
|
|
72
|
+
out("🌐 Dataverse API");
|
|
73
|
+
try {
|
|
74
|
+
const { loadConfig } = await import("./config/config.loader.js");
|
|
75
|
+
const config = loadConfig();
|
|
76
|
+
const { createAuthProvider } = await import("./auth/auth-provider.factory.js");
|
|
77
|
+
const { DataverseAdvancedClient } = await import("./dataverse/dataverse-client-advanced.js");
|
|
78
|
+
const authProvider = createAuthProvider(config);
|
|
79
|
+
const client = new DataverseAdvancedClient(authProvider, config.maxRetries, config.requestTimeoutMs);
|
|
80
|
+
const result = await client.whoAmI();
|
|
81
|
+
ok(`Organization: ${result.OrganizationName || "N/A"}`);
|
|
82
|
+
ok(`User ID: ${result.UserId || "N/A"}`);
|
|
83
|
+
ok(`Business Unit: ${result.BusinessUnitId || "N/A"}`);
|
|
84
|
+
ok(`Environment: ${result.EnvironmentUrl || config.environmentUrl}`);
|
|
85
|
+
}
|
|
86
|
+
catch (err) {
|
|
87
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
88
|
+
fail(`API call failed: ${msg}`);
|
|
89
|
+
allPassed = false;
|
|
90
|
+
}
|
|
91
|
+
out("");
|
|
92
|
+
// Summary
|
|
93
|
+
out("─".repeat(50));
|
|
94
|
+
if (allPassed) {
|
|
95
|
+
out("✅ All checks passed! Your mcp-dataverse setup is healthy.");
|
|
96
|
+
}
|
|
97
|
+
else {
|
|
98
|
+
out("❌ Some checks failed. Review the errors above.");
|
|
99
|
+
}
|
|
100
|
+
out("");
|
|
101
|
+
process.exit(allPassed ? 0 : 1);
|
|
102
|
+
}
|
|
103
|
+
//# sourceMappingURL=doctor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"doctor.js","sourceRoot":"","sources":["../src/doctor.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"http-server.d.ts","sourceRoot":"","sources":["../src/http-server.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAC;AAInE,wBAAsB,kBAAkB,CACtC,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,MAAM,EACf,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,IAAI,CAAC,CA2Ef"}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import { createServer } from "http";
|
|
2
|
+
import { randomUUID } from "crypto";
|
|
3
|
+
import { StreamableHTTPServerTransport } from "@modelcontextprotocol/sdk/server/streamableHttp.js";
|
|
4
|
+
export async function startHttpTransport(server, port, version, toolCount) {
|
|
5
|
+
const transport = new StreamableHTTPServerTransport({
|
|
6
|
+
sessionIdGenerator: () => randomUUID(),
|
|
7
|
+
enableJsonResponse: true,
|
|
8
|
+
});
|
|
9
|
+
await server.connect(transport);
|
|
10
|
+
const httpServer = createServer(async (req, res) => {
|
|
11
|
+
// CORS headers for browser-based clients
|
|
12
|
+
res.setHeader("Access-Control-Allow-Origin", "*");
|
|
13
|
+
res.setHeader("Access-Control-Allow-Methods", "GET, POST, DELETE, OPTIONS");
|
|
14
|
+
res.setHeader("Access-Control-Allow-Headers", "Content-Type, mcp-session-id");
|
|
15
|
+
if (req.method === "OPTIONS") {
|
|
16
|
+
res.writeHead(204);
|
|
17
|
+
res.end();
|
|
18
|
+
return;
|
|
19
|
+
}
|
|
20
|
+
const url = new URL(req.url ?? "/", `http://localhost:${port}`);
|
|
21
|
+
if (url.pathname === "/health" && req.method === "GET") {
|
|
22
|
+
res.writeHead(200, { "Content-Type": "application/json" });
|
|
23
|
+
res.end(JSON.stringify({ status: "ok", version, tools: toolCount }));
|
|
24
|
+
return;
|
|
25
|
+
}
|
|
26
|
+
if (url.pathname === "/mcp") {
|
|
27
|
+
try {
|
|
28
|
+
await transport.handleRequest(req, res);
|
|
29
|
+
}
|
|
30
|
+
catch {
|
|
31
|
+
if (!res.headersSent) {
|
|
32
|
+
res.writeHead(500, { "Content-Type": "application/json" });
|
|
33
|
+
res.end(JSON.stringify({ error: "Internal server error" }));
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
return;
|
|
37
|
+
}
|
|
38
|
+
res.writeHead(404, { "Content-Type": "application/json" });
|
|
39
|
+
res.end(JSON.stringify({ error: "Not found" }));
|
|
40
|
+
});
|
|
41
|
+
await new Promise((resolve) => {
|
|
42
|
+
httpServer.listen(port, () => {
|
|
43
|
+
process.stderr.write(`MCP Dataverse HTTP server listening on http://localhost:${port}/mcp\n`);
|
|
44
|
+
resolve();
|
|
45
|
+
});
|
|
46
|
+
});
|
|
47
|
+
// Keep the process alive; clean shutdown on signals
|
|
48
|
+
const shutdown = async () => {
|
|
49
|
+
process.stderr.write("Shutting down HTTP server...\n");
|
|
50
|
+
await transport.close();
|
|
51
|
+
httpServer.close();
|
|
52
|
+
process.exit(0);
|
|
53
|
+
};
|
|
54
|
+
process.on("SIGINT", shutdown);
|
|
55
|
+
process.on("SIGTERM", shutdown);
|
|
56
|
+
// Block until server closes
|
|
57
|
+
await new Promise((resolve) => {
|
|
58
|
+
httpServer.on("close", resolve);
|
|
59
|
+
});
|
|
60
|
+
}
|
|
61
|
+
//# sourceMappingURL=http-server.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"http-server.js","sourceRoot":"","sources":["../src/http-server.ts"],"names":[],"mappings":"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"}
|
package/dist/server.js
CHANGED
|
@@ -5,9 +5,11 @@ import { CallToolRequestSchema, ListToolsRequestSchema, } from "@modelcontextpro
|
|
|
5
5
|
import { readFileSync } from "fs";
|
|
6
6
|
import { join, dirname } from "path";
|
|
7
7
|
import { fileURLToPath } from "url";
|
|
8
|
+
import { parseTransportArgs } from "./transport.js";
|
|
8
9
|
import { loadConfig } from "./config/config.loader.js";
|
|
9
10
|
import { createAuthProvider } from "./auth/auth-provider.factory.js";
|
|
10
11
|
import { DataverseAdvancedClient } from "./dataverse/dataverse-client-advanced.js";
|
|
12
|
+
import { createToolRegistry } from "./tools/tool-registry.js";
|
|
11
13
|
import { authTools, handleAuthTool } from "./tools/auth.tools.js";
|
|
12
14
|
import { metadataTools, handleMetadataTool } from "./tools/metadata.tools.js";
|
|
13
15
|
import { queryTools, handleQueryTool } from "./tools/query.tools.js";
|
|
@@ -30,117 +32,92 @@ import { viewTools, handleViewTool } from "./tools/views.tools.js";
|
|
|
30
32
|
import { orgTools, handleOrgTool } from "./tools/org.tools.js";
|
|
31
33
|
import { fileTools, handleFileTool } from "./tools/file.tools.js";
|
|
32
34
|
import { teamTools, handleTeamTool } from "./tools/teams.tools.js";
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
];
|
|
57
|
-
//
|
|
58
|
-
const
|
|
59
|
-
const METADATA_TOOL_NAMES = new Set(metadataTools.map((t) => t.name));
|
|
60
|
-
const QUERY_TOOL_NAMES = new Set(queryTools.map((t) => t.name));
|
|
61
|
-
const CRUD_TOOL_NAMES = new Set(crudTools.map((t) => t.name));
|
|
62
|
-
const RELATION_TOOL_NAMES = new Set(relationTools.map((t) => t.name));
|
|
63
|
-
const ACTION_TOOL_NAMES = new Set(actionTools.map((t) => t.name));
|
|
64
|
-
const BATCH_TOOL_NAMES = new Set(batchTools.map((t) => t.name));
|
|
65
|
-
const TRACKING_TOOL_NAMES = new Set(trackingTools.map((t) => t.name));
|
|
66
|
-
const SOLUTION_TOOL_NAMES = new Set(solutionTools.map((t) => t.name));
|
|
67
|
-
const IMPERSONATE_TOOL_NAMES = new Set(impersonateTools.map((t) => t.name));
|
|
68
|
-
const CUSTOMIZATION_TOOL_NAMES = new Set(customizationTools.map((t) => t.name));
|
|
69
|
-
const ENVIRONMENT_TOOL_NAMES = new Set(environmentTools.map((t) => t.name));
|
|
70
|
-
const TRACE_TOOL_NAMES = new Set(traceTools.map((t) => t.name));
|
|
71
|
-
const SEARCH_TOOL_NAMES = new Set(searchTools.map((t) => t.name));
|
|
72
|
-
const AUDIT_TOOL_NAMES = new Set(auditTools.map((t) => t.name));
|
|
73
|
-
const QUALITY_TOOL_NAMES = new Set(qualityTools.map((t) => t.name));
|
|
74
|
-
const ANNOTATION_TOOL_NAMES = new Set(annotationTools.map((t) => t.name));
|
|
75
|
-
const USER_TOOL_NAMES = new Set(userTools.map((t) => t.name));
|
|
76
|
-
const VIEW_TOOL_NAMES = new Set(viewTools.map((t) => t.name));
|
|
77
|
-
const ORG_TOOL_NAMES = new Set(orgTools.map((t) => t.name));
|
|
78
|
-
const FILE_TOOL_NAMES = new Set(fileTools.map((t) => t.name));
|
|
79
|
-
const TEAM_TOOL_NAMES = new Set(teamTools.map((t) => t.name));
|
|
35
|
+
// ── Tool Registry — Map-based O(1) dispatch ──────────────────────────────────
|
|
36
|
+
const registry = createToolRegistry([
|
|
37
|
+
{ tools: authTools, handler: handleAuthTool },
|
|
38
|
+
{ tools: metadataTools, handler: handleMetadataTool },
|
|
39
|
+
{ tools: queryTools, handler: handleQueryTool },
|
|
40
|
+
{ tools: crudTools, handler: handleCrudTool },
|
|
41
|
+
{ tools: relationTools, handler: handleRelationTool },
|
|
42
|
+
{ tools: actionTools, handler: handleActionTool },
|
|
43
|
+
{ tools: batchTools, handler: handleBatchTool },
|
|
44
|
+
{ tools: trackingTools, handler: handleTrackingTool },
|
|
45
|
+
{ tools: solutionTools, handler: handleSolutionTool },
|
|
46
|
+
{ tools: customizationTools, handler: handleCustomizationTool },
|
|
47
|
+
{ tools: environmentTools, handler: handleEnvironmentTool },
|
|
48
|
+
{ tools: traceTools, handler: handleTraceTool },
|
|
49
|
+
{ tools: searchTools, handler: handleSearchTool },
|
|
50
|
+
{ tools: auditTools, handler: handleAuditTool },
|
|
51
|
+
{ tools: qualityTools, handler: handleQualityTool },
|
|
52
|
+
{ tools: annotationTools, handler: handleAnnotationTool },
|
|
53
|
+
{ tools: userTools, handler: handleUserTool },
|
|
54
|
+
{ tools: viewTools, handler: handleViewTool },
|
|
55
|
+
{ tools: orgTools, handler: handleOrgTool },
|
|
56
|
+
{ tools: fileTools, handler: handleFileTool },
|
|
57
|
+
{ tools: teamTools, handler: handleTeamTool },
|
|
58
|
+
]);
|
|
59
|
+
// Impersonate is registered separately — it has a special dispatch signature
|
|
60
|
+
const IMPERSONATE_NAMES = new Set(impersonateTools.map((t) => t.name));
|
|
80
61
|
// Read version from package.json so server.ts never drifts out of sync
|
|
81
62
|
const __dirname = dirname(fileURLToPath(import.meta.url));
|
|
82
63
|
const SERVER_VERSION = JSON.parse(readFileSync(join(__dirname, "../package.json"), "utf-8")).version;
|
|
64
|
+
// ── Global MCP Instructions ──────────────────────────────────────────────────
|
|
65
|
+
const SERVER_INSTRUCTIONS = `You are connected to a Microsoft Dataverse environment via the mcp-dataverse server.
|
|
66
|
+
|
|
67
|
+
## Recommended Workflow
|
|
68
|
+
1. Start with dataverse_whoami to verify authentication.
|
|
69
|
+
2. Use dataverse_list_tables to discover available tables (custom tables only by default).
|
|
70
|
+
3. Use dataverse_get_table_metadata to inspect column names, types, and required fields before querying or writing.
|
|
71
|
+
4. Query data with dataverse_query (OData) or dataverse_execute_fetchxml (complex joins/aggregations).
|
|
72
|
+
5. Use dataverse_create / dataverse_update / dataverse_delete for record operations.
|
|
73
|
+
|
|
74
|
+
## Best Practices
|
|
75
|
+
- Always specify $select to minimize payload size — never fetch all columns.
|
|
76
|
+
- Use $top to limit results (default 50, max 5000 per page).
|
|
77
|
+
- Prefer dataverse_query for simple reads; use dataverse_execute_fetchxml for aggregations, multi-table joins, or many-to-many traversal.
|
|
78
|
+
- Use dataverse_get_table_metadata before creating/updating records to confirm correct logical field names.
|
|
79
|
+
- For bulk operations (>5 records), use dataverse_batch_execute to reduce HTTP round-trips.
|
|
80
|
+
- Use dataverse_search for full-text search across multiple tables when you don't know which table contains the data.
|
|
81
|
+
- Check dataverse_get_relationships before building FetchXML joins or using dataverse_associate/dataverse_disassociate.
|
|
82
|
+
|
|
83
|
+
## Safety
|
|
84
|
+
- dataverse_delete is irreversible — always confirm with the user first.
|
|
85
|
+
- Use optimistic concurrency (etag parameter) on updates to prevent lost changes.
|
|
86
|
+
- Impersonation requires explicit privilege and is denied for System Administrator users.
|
|
87
|
+
|
|
88
|
+
## Performance
|
|
89
|
+
- Avoid retrieving more than 5000 records unless explicitly needed (use dataverse_retrieve_multiple_with_paging with maxTotal).
|
|
90
|
+
- Use server-side filtering ($filter / FetchXML conditions) instead of client-side filtering.
|
|
91
|
+
- Cache table metadata — it rarely changes during a session.
|
|
92
|
+
`;
|
|
83
93
|
/**
|
|
84
|
-
* Routes a tool call to its handler
|
|
85
|
-
* and passed as the dispatch
|
|
94
|
+
* Routes a tool call to its handler via the registry Map.
|
|
95
|
+
* Used directly by the request handler and passed as the dispatch
|
|
96
|
+
* function to handleImpersonateTool.
|
|
86
97
|
*/
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
if (QUERY_TOOL_NAMES.has(name))
|
|
93
|
-
return handleQueryTool(name, args, client);
|
|
94
|
-
if (CRUD_TOOL_NAMES.has(name))
|
|
95
|
-
return handleCrudTool(name, args, client);
|
|
96
|
-
if (RELATION_TOOL_NAMES.has(name))
|
|
97
|
-
return handleRelationTool(name, args, client);
|
|
98
|
-
if (ACTION_TOOL_NAMES.has(name))
|
|
99
|
-
return handleActionTool(name, args, client);
|
|
100
|
-
if (BATCH_TOOL_NAMES.has(name))
|
|
101
|
-
return handleBatchTool(name, args, client);
|
|
102
|
-
if (TRACKING_TOOL_NAMES.has(name))
|
|
103
|
-
return handleTrackingTool(name, args, client);
|
|
104
|
-
if (SOLUTION_TOOL_NAMES.has(name))
|
|
105
|
-
return handleSolutionTool(name, args, client);
|
|
106
|
-
if (CUSTOMIZATION_TOOL_NAMES.has(name))
|
|
107
|
-
return handleCustomizationTool(name, args, client);
|
|
108
|
-
if (ENVIRONMENT_TOOL_NAMES.has(name))
|
|
109
|
-
return handleEnvironmentTool(name, args, client);
|
|
110
|
-
if (TRACE_TOOL_NAMES.has(name))
|
|
111
|
-
return handleTraceTool(name, args, client);
|
|
112
|
-
if (SEARCH_TOOL_NAMES.has(name))
|
|
113
|
-
return handleSearchTool(name, args, client);
|
|
114
|
-
if (AUDIT_TOOL_NAMES.has(name))
|
|
115
|
-
return handleAuditTool(name, args, client);
|
|
116
|
-
if (QUALITY_TOOL_NAMES.has(name))
|
|
117
|
-
return handleQualityTool(name, args, client);
|
|
118
|
-
if (ANNOTATION_TOOL_NAMES.has(name))
|
|
119
|
-
return handleAnnotationTool(name, args, client);
|
|
120
|
-
if (USER_TOOL_NAMES.has(name))
|
|
121
|
-
return handleUserTool(name, args, client);
|
|
122
|
-
if (VIEW_TOOL_NAMES.has(name))
|
|
123
|
-
return handleViewTool(name, args, client);
|
|
124
|
-
if (ORG_TOOL_NAMES.has(name))
|
|
125
|
-
return handleOrgTool(name, args, client);
|
|
126
|
-
if (FILE_TOOL_NAMES.has(name))
|
|
127
|
-
return handleFileTool(name, args, client);
|
|
128
|
-
if (TEAM_TOOL_NAMES.has(name))
|
|
129
|
-
return handleTeamTool(name, args, client);
|
|
130
|
-
throw new Error(`Unknown tool: ${name}`);
|
|
98
|
+
function dispatchTool(name, args, client) {
|
|
99
|
+
const handler = registry.getHandler(name);
|
|
100
|
+
if (!handler)
|
|
101
|
+
throw new Error(`Unknown tool: ${name}`);
|
|
102
|
+
return handler(name, args, client);
|
|
131
103
|
}
|
|
132
104
|
async function main() {
|
|
133
105
|
const config = loadConfig();
|
|
134
106
|
const authProvider = createAuthProvider(config);
|
|
135
107
|
const client = new DataverseAdvancedClient(authProvider, config.maxRetries, config.requestTimeoutMs);
|
|
136
|
-
const server = new Server({ name: "mcp-dataverse", version: SERVER_VERSION }, {
|
|
108
|
+
const server = new Server({ name: "mcp-dataverse", version: SERVER_VERSION }, {
|
|
109
|
+
capabilities: { tools: {} },
|
|
110
|
+
instructions: SERVER_INSTRUCTIONS,
|
|
111
|
+
});
|
|
112
|
+
// Combine registry definitions with impersonate tools
|
|
113
|
+
const allToolDefs = [...registry.getAllDefinitions(), ...impersonateTools];
|
|
137
114
|
server.setRequestHandler(ListToolsRequestSchema, async () => ({
|
|
138
|
-
tools:
|
|
115
|
+
tools: allToolDefs,
|
|
139
116
|
}));
|
|
140
117
|
server.setRequestHandler(CallToolRequestSchema, async (request) => {
|
|
141
118
|
const { name, arguments: args } = request.params;
|
|
142
119
|
try {
|
|
143
|
-
if (
|
|
120
|
+
if (IMPERSONATE_NAMES.has(name)) {
|
|
144
121
|
return handleImpersonateTool(name, args, client, dispatchTool);
|
|
145
122
|
}
|
|
146
123
|
return await dispatchTool(name, args, client);
|
|
@@ -153,26 +130,51 @@ async function main() {
|
|
|
153
130
|
};
|
|
154
131
|
}
|
|
155
132
|
});
|
|
156
|
-
const
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
133
|
+
const transportArgs = parseTransportArgs();
|
|
134
|
+
if (transportArgs.transport === "http") {
|
|
135
|
+
const { startHttpTransport } = await import("./http-server.js");
|
|
136
|
+
const toolCount = allToolDefs.length;
|
|
137
|
+
process.stderr.write(`Starting HTTP transport on port ${transportArgs.port}...\n`);
|
|
138
|
+
// Trigger auth before accepting requests
|
|
139
|
+
try {
|
|
140
|
+
await authProvider.getToken();
|
|
141
|
+
process.stderr.write("[mcp-dataverse] Authenticated ✓\n");
|
|
142
|
+
}
|
|
143
|
+
catch (err) {
|
|
144
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
145
|
+
process.stderr.write(`[mcp-dataverse] Authentication failed: ${msg}\n`);
|
|
146
|
+
}
|
|
147
|
+
await startHttpTransport(server, transportArgs.port, SERVER_VERSION, toolCount);
|
|
148
|
+
}
|
|
149
|
+
else {
|
|
150
|
+
const transport = new StdioServerTransport();
|
|
151
|
+
await server.connect(transport);
|
|
152
|
+
// Do not log to stdout — stdio transport uses stdout for protocol messages
|
|
153
|
+
process.stderr.write("MCP Dataverse server started\n");
|
|
154
|
+
// Proactively trigger authentication at startup so the device-code prompt
|
|
155
|
+
// appears immediately in the VS Code MCP Output panel (View → Output → MCP),
|
|
156
|
+
// rather than only on the first tool call.
|
|
157
|
+
authProvider
|
|
158
|
+
.getToken()
|
|
159
|
+
.then(() => {
|
|
160
|
+
process.stderr.write("[mcp-dataverse] Authenticated ✓\n");
|
|
161
|
+
})
|
|
162
|
+
.catch((err) => {
|
|
163
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
164
|
+
process.stderr.write(`[mcp-dataverse] Authentication failed: ${msg}\n`);
|
|
165
|
+
});
|
|
166
|
+
}
|
|
169
167
|
}
|
|
170
168
|
async function entry() {
|
|
171
|
-
if (process.argv
|
|
169
|
+
if (process.argv.includes("install")) {
|
|
172
170
|
const { runInstall } = await import("./install.js");
|
|
173
171
|
await runInstall();
|
|
174
172
|
process.exit(0);
|
|
175
173
|
}
|
|
174
|
+
if (process.argv.includes("doctor")) {
|
|
175
|
+
const { runDoctor } = await import("./doctor.js");
|
|
176
|
+
await runDoctor();
|
|
177
|
+
}
|
|
176
178
|
await main();
|
|
177
179
|
}
|
|
178
180
|
entry().catch((error) => {
|
package/dist/server.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAC;AACnE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,EACL,qBAAqB,EACrB,sBAAsB,GACvB,MAAM,oCAAoC,CAAC;AAC5C,OAAO,EAAE,YAAY,EAAE,MAAM,IAAI,CAAC;AAClC,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AACrC,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;AAEpC,OAAO,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AACvD,OAAO,EAAE,kBAAkB,EAAE,MAAM,iCAAiC,CAAC;AACrE,OAAO,EAAE,uBAAuB,EAAE,MAAM,0CAA0C,CAAC;
|
|
1
|
+
{"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}
|
|
@@ -23,6 +23,12 @@ export declare const actionTools: ({
|
|
|
23
23
|
};
|
|
24
24
|
required: string[];
|
|
25
25
|
};
|
|
26
|
+
annotations: {
|
|
27
|
+
readOnlyHint: boolean;
|
|
28
|
+
destructiveHint: boolean;
|
|
29
|
+
idempotentHint: boolean;
|
|
30
|
+
openWorldHint: boolean;
|
|
31
|
+
};
|
|
26
32
|
} | {
|
|
27
33
|
name: string;
|
|
28
34
|
description: string;
|
|
@@ -47,6 +53,12 @@ export declare const actionTools: ({
|
|
|
47
53
|
};
|
|
48
54
|
required: string[];
|
|
49
55
|
};
|
|
56
|
+
annotations: {
|
|
57
|
+
readOnlyHint: boolean;
|
|
58
|
+
destructiveHint: boolean;
|
|
59
|
+
idempotentHint: boolean;
|
|
60
|
+
openWorldHint: boolean;
|
|
61
|
+
};
|
|
50
62
|
} | {
|
|
51
63
|
name: string;
|
|
52
64
|
description: string;
|
|
@@ -77,6 +89,12 @@ export declare const actionTools: ({
|
|
|
77
89
|
};
|
|
78
90
|
required: string[];
|
|
79
91
|
};
|
|
92
|
+
annotations: {
|
|
93
|
+
readOnlyHint: boolean;
|
|
94
|
+
destructiveHint: boolean;
|
|
95
|
+
idempotentHint: boolean;
|
|
96
|
+
openWorldHint: boolean;
|
|
97
|
+
};
|
|
80
98
|
} | {
|
|
81
99
|
name: string;
|
|
82
100
|
description: string;
|
|
@@ -101,6 +119,12 @@ export declare const actionTools: ({
|
|
|
101
119
|
};
|
|
102
120
|
required: string[];
|
|
103
121
|
};
|
|
122
|
+
annotations: {
|
|
123
|
+
readOnlyHint: boolean;
|
|
124
|
+
destructiveHint: boolean;
|
|
125
|
+
idempotentHint: boolean;
|
|
126
|
+
openWorldHint: boolean;
|
|
127
|
+
};
|
|
104
128
|
} | {
|
|
105
129
|
name: string;
|
|
106
130
|
description: string;
|
|
@@ -133,6 +157,12 @@ export declare const actionTools: ({
|
|
|
133
157
|
};
|
|
134
158
|
required: string[];
|
|
135
159
|
};
|
|
160
|
+
annotations: {
|
|
161
|
+
readOnlyHint: boolean;
|
|
162
|
+
destructiveHint: boolean;
|
|
163
|
+
idempotentHint: boolean;
|
|
164
|
+
openWorldHint: boolean;
|
|
165
|
+
};
|
|
136
166
|
} | {
|
|
137
167
|
name: string;
|
|
138
168
|
description: string;
|
|
@@ -160,6 +190,12 @@ export declare const actionTools: ({
|
|
|
160
190
|
};
|
|
161
191
|
required: string[];
|
|
162
192
|
};
|
|
193
|
+
annotations: {
|
|
194
|
+
readOnlyHint: boolean;
|
|
195
|
+
destructiveHint: boolean;
|
|
196
|
+
idempotentHint: boolean;
|
|
197
|
+
openWorldHint: boolean;
|
|
198
|
+
};
|
|
163
199
|
})[];
|
|
164
200
|
export declare function handleActionTool(name: string, args: unknown, client: DataverseAdvancedClient): Promise<{
|
|
165
201
|
content: Array<{
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"actions.tools.d.ts","sourceRoot":"","sources":["../../src/tools/actions.tools.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,2CAA2C,CAAC;
|
|
1
|
+
{"version":3,"file":"actions.tools.d.ts","sourceRoot":"","sources":["../../src/tools/actions.tools.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,2CAA2C,CAAC;AAIzF,eAAO,MAAM,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAsKvB,CAAC;AAyEF,wBAAsB,gBAAgB,CACpC,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,OAAO,EACb,MAAM,EAAE,uBAAuB,GAC9B,OAAO,CAAC;IAAE,OAAO,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;CAAE,CAAC,CA4E7D"}
|