@icure/cardinal-mcp-server 1.0.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/helpers/docs-loader.d.ts +56 -0
- package/dist/helpers/docs-loader.d.ts.map +1 -0
- package/dist/helpers/docs-loader.js +14 -0
- package/dist/helpers/docs-loader.js.map +1 -0
- package/dist/helpers/filter-builder.d.ts +7 -0
- package/dist/helpers/filter-builder.d.ts.map +1 -0
- package/dist/helpers/filter-builder.js +53 -0
- package/dist/helpers/filter-builder.js.map +1 -0
- package/dist/helpers/model-builder.d.ts +10 -0
- package/dist/helpers/model-builder.d.ts.map +1 -0
- package/dist/helpers/model-builder.js +64 -0
- package/dist/helpers/model-builder.js.map +1 -0
- package/dist/helpers/pagination.d.ts +13 -0
- package/dist/helpers/pagination.d.ts.map +1 -0
- package/dist/helpers/pagination.js +56 -0
- package/dist/helpers/pagination.js.map +1 -0
- package/dist/helpers/serialization.d.ts +7 -0
- package/dist/helpers/serialization.d.ts.map +1 -0
- package/dist/helpers/serialization.js +36 -0
- package/dist/helpers/serialization.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +13 -0
- package/dist/index.js.map +1 -0
- package/dist/resources/api-docs.d.ts +3 -0
- package/dist/resources/api-docs.d.ts.map +1 -0
- package/dist/resources/api-docs.js +63 -0
- package/dist/resources/api-docs.js.map +1 -0
- package/dist/resources/filter-docs.d.ts +3 -0
- package/dist/resources/filter-docs.d.ts.map +1 -0
- package/dist/resources/filter-docs.js +56 -0
- package/dist/resources/filter-docs.js.map +1 -0
- package/dist/resources/model-docs.d.ts +3 -0
- package/dist/resources/model-docs.d.ts.map +1 -0
- package/dist/resources/model-docs.js +59 -0
- package/dist/resources/model-docs.js.map +1 -0
- package/dist/resources/overview.d.ts +3 -0
- package/dist/resources/overview.d.ts.map +1 -0
- package/dist/resources/overview.js +76 -0
- package/dist/resources/overview.js.map +1 -0
- package/dist/resources/search.d.ts +3 -0
- package/dist/resources/search.d.ts.map +1 -0
- package/dist/resources/search.js +121 -0
- package/dist/resources/search.js.map +1 -0
- package/dist/resources/tutorial-docs.d.ts +3 -0
- package/dist/resources/tutorial-docs.d.ts.map +1 -0
- package/dist/resources/tutorial-docs.js +42 -0
- package/dist/resources/tutorial-docs.js.map +1 -0
- package/dist/server.d.ts +3 -0
- package/dist/server.d.ts.map +1 -0
- package/dist/server.js +38 -0
- package/dist/server.js.map +1 -0
- package/dist/tools/admin-tools.d.ts +3 -0
- package/dist/tools/admin-tools.d.ts.map +1 -0
- package/dist/tools/admin-tools.js +13 -0
- package/dist/tools/admin-tools.js.map +1 -0
- package/dist/tools/crypto-tools.d.ts +3 -0
- package/dist/tools/crypto-tools.d.ts.map +1 -0
- package/dist/tools/crypto-tools.js +13 -0
- package/dist/tools/crypto-tools.js.map +1 -0
- package/dist/tools/data-owner-tools.d.ts +3 -0
- package/dist/tools/data-owner-tools.d.ts.map +1 -0
- package/dist/tools/data-owner-tools.js +24 -0
- package/dist/tools/data-owner-tools.js.map +1 -0
- package/dist/tools/dispatch.d.ts +16 -0
- package/dist/tools/dispatch.d.ts.map +1 -0
- package/dist/tools/dispatch.js +141 -0
- package/dist/tools/dispatch.js.map +1 -0
- package/dist/tools/init.d.ts +3 -0
- package/dist/tools/init.d.ts.map +1 -0
- package/dist/tools/init.js +45 -0
- package/dist/tools/init.js.map +1 -0
- package/dist/tools/sdk-state.d.ts +5 -0
- package/dist/tools/sdk-state.d.ts.map +1 -0
- package/dist/tools/sdk-state.js +14 -0
- package/dist/tools/sdk-state.js.map +1 -0
- package/generated/docs-manifest.json +33264 -0
- package/generated/method-registry.ts +9453 -0
- package/package.json +45 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"overview.d.ts","sourceRoot":"","sources":["../../src/resources/overview.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAGpE,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,SAAS,QAgFjD"}
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
import { getManifest } from "../helpers/docs-loader.js";
|
|
2
|
+
export function registerOverview(server) {
|
|
3
|
+
server.resource("overview", "cardinal://docs/overview", {
|
|
4
|
+
title: "Cardinal SDK Overview",
|
|
5
|
+
description: "SDK architecture, available APIs, and initialization guide",
|
|
6
|
+
mimeType: "text/markdown",
|
|
7
|
+
}, async (uri) => {
|
|
8
|
+
const manifest = getManifest();
|
|
9
|
+
const apiNames = Object.keys(manifest.apis).sort();
|
|
10
|
+
const encryptable = apiNames.filter(n => manifest.apis[n].isEncryptable);
|
|
11
|
+
const nonEncryptable = apiNames.filter(n => !manifest.apis[n].isEncryptable);
|
|
12
|
+
const content = `# Cardinal SDK Overview
|
|
13
|
+
|
|
14
|
+
## What is Cardinal SDK?
|
|
15
|
+
Cardinal SDK is a healthcare platform SDK with built-in end-to-end encryption.
|
|
16
|
+
It provides APIs for managing healthcare data including patients, appointments, documents, and more.
|
|
17
|
+
|
|
18
|
+
## Initialization
|
|
19
|
+
\`\`\`typescript
|
|
20
|
+
import { CardinalSdk } from "@icure/cardinal-sdk/sdk/CardinalSdk.mjs";
|
|
21
|
+
import { AuthenticationMethod } from "@icure/cardinal-sdk/options/AuthenticationMethod.mjs";
|
|
22
|
+
import { StorageFacade } from "@icure/cardinal-sdk/storage/StorageFacade.mjs";
|
|
23
|
+
|
|
24
|
+
const sdk = await CardinalSdk.initialize(
|
|
25
|
+
undefined, // projectId
|
|
26
|
+
"https://api.icure.cloud",
|
|
27
|
+
new AuthenticationMethod.UsingCredentials.UsernamePassword(username, password),
|
|
28
|
+
StorageFacade.usingFileSystem("./storage")
|
|
29
|
+
);
|
|
30
|
+
\`\`\`
|
|
31
|
+
|
|
32
|
+
Or via MCP: use the \`cardinal_init\` tool with baseUrl, username, and password.
|
|
33
|
+
|
|
34
|
+
## Available APIs (${apiNames.length} total)
|
|
35
|
+
|
|
36
|
+
### Encryptable Entity APIs (${encryptable.length})
|
|
37
|
+
These support encryption flavours (decrypted/encrypted/tryAndRecover):
|
|
38
|
+
${encryptable.map(n => `- **${n}Api** — ${manifest.apis[n].description}`).join("\n")}
|
|
39
|
+
|
|
40
|
+
### Non-Encryptable APIs (${nonEncryptable.length})
|
|
41
|
+
${nonEncryptable.map(n => `- **${n}Api** — ${manifest.apis[n].description}`).join("\n")}
|
|
42
|
+
|
|
43
|
+
## MCP Tools
|
|
44
|
+
- **cardinal_init** — Initialize SDK with credentials
|
|
45
|
+
- **cardinal_admin** — Group, User, Role, Permission, System operations
|
|
46
|
+
- **cardinal_data_owner** — Healthcare entity CRUD, filtering, sharing
|
|
47
|
+
- **cardinal_crypto** — Cryptography, key recovery, data owner management
|
|
48
|
+
- **cardinal_continue_iteration** — Fetch next page from paginated queries
|
|
49
|
+
- **search_documentation** — Search API methods, models, and filters
|
|
50
|
+
|
|
51
|
+
## MCP Resources
|
|
52
|
+
- \`cardinal://docs/api/{apiName}\` — API reference for each API
|
|
53
|
+
- \`cardinal://docs/model/{modelName}\` — Model field documentation
|
|
54
|
+
- \`cardinal://docs/filter/{entityName}\` — Filter factory methods
|
|
55
|
+
- \`cardinal://docs/tutorial/{slug}\` — Tutorial sections
|
|
56
|
+
|
|
57
|
+
## Encryptable Entity Pattern
|
|
58
|
+
Healthcare entities with sensitive data use sealed types:
|
|
59
|
+
- \`Patient\` (sealed) → \`DecryptedPatient\` + \`EncryptedPatient\`
|
|
60
|
+
- Each API has flavours: \`sdk.patient\` (decrypted), \`sdk.patient.encrypted\`, \`sdk.patient.tryAndRecover\`
|
|
61
|
+
- Creating requires: \`withEncryptionMetadata(base, patient)\` then \`createEntity(entity)\`
|
|
62
|
+
|
|
63
|
+
## Filters
|
|
64
|
+
Query entities using filter builders:
|
|
65
|
+
\`\`\`typescript
|
|
66
|
+
const patients = await sdk.patient.filterPatientsBy(
|
|
67
|
+
PatientFilters.bySsinsForSelf(["123456789"])
|
|
68
|
+
);
|
|
69
|
+
\`\`\`
|
|
70
|
+
`;
|
|
71
|
+
return {
|
|
72
|
+
contents: [{ uri: uri.href, mimeType: "text/markdown", text: content }],
|
|
73
|
+
};
|
|
74
|
+
});
|
|
75
|
+
}
|
|
76
|
+
//# sourceMappingURL=overview.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"overview.js","sourceRoot":"","sources":["../../src/resources/overview.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AAExD,MAAM,UAAU,gBAAgB,CAAC,MAAiB;IACjD,MAAM,CAAC,QAAQ,CACd,UAAU,EACV,0BAA0B,EAC1B;QACC,KAAK,EAAE,uBAAuB;QAC9B,WAAW,EAAE,4DAA4D;QACzE,QAAQ,EAAE,eAAe;KACzB,EACD,KAAK,EAAE,GAAG,EAAE,EAAE;QACb,MAAM,QAAQ,GAAG,WAAW,EAAE,CAAC;QAC/B,MAAM,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC;QACnD,MAAM,WAAW,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC;QACzE,MAAM,cAAc,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC;QAE7E,MAAM,OAAO,GAAG;;;;;;;;;;;;;;;;;;;;;;qBAsBE,QAAQ,CAAC,MAAM;;+BAEL,WAAW,CAAC,MAAM;;EAE/C,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,WAAW,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;;4BAExD,cAAc,CAAC,MAAM;EAC/C,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,WAAW,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA6BtF,CAAC;QAEC,OAAO;YACN,QAAQ,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC,IAAI,EAAE,QAAQ,EAAE,eAAe,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;SACvE,CAAC;IACH,CAAC,CACD,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"search.d.ts","sourceRoot":"","sources":["../../src/resources/search.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAIpE,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,SAAS,QAkInD"}
|
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { getManifest } from "../helpers/docs-loader.js";
|
|
3
|
+
export function registerSearchTool(server) {
|
|
4
|
+
server.tool("search_documentation", "Search Cardinal SDK documentation: API methods, models, and filters. No SDK initialization required.", {
|
|
5
|
+
query: z.string().describe("Search term (e.g., 'patient', 'createCalendarItem', 'filter by date')"),
|
|
6
|
+
category: z.enum(["all", "apis", "models", "filters", "tutorials"]).optional().default("all")
|
|
7
|
+
.describe("Limit search to a category"),
|
|
8
|
+
limit: z.number().optional().default(20).describe("Max results to return"),
|
|
9
|
+
}, async ({ query, category, limit }) => {
|
|
10
|
+
const manifest = getManifest();
|
|
11
|
+
const queryLower = query.toLowerCase();
|
|
12
|
+
const results = [];
|
|
13
|
+
// Search APIs
|
|
14
|
+
if (category === "all" || category === "apis") {
|
|
15
|
+
for (const [key, api] of Object.entries(manifest.apis)) {
|
|
16
|
+
// Match API name
|
|
17
|
+
if (key.toLowerCase().includes(queryLower) || api.description.toLowerCase().includes(queryLower)) {
|
|
18
|
+
results.push({
|
|
19
|
+
type: "api",
|
|
20
|
+
name: api.name,
|
|
21
|
+
description: api.description,
|
|
22
|
+
uri: `cardinal://docs/api/${key}`,
|
|
23
|
+
});
|
|
24
|
+
}
|
|
25
|
+
// Match methods
|
|
26
|
+
for (const method of api.methods) {
|
|
27
|
+
if (method.name.toLowerCase().includes(queryLower) || method.description.toLowerCase().includes(queryLower)) {
|
|
28
|
+
results.push({
|
|
29
|
+
type: "method",
|
|
30
|
+
name: `${api.name}.${method.name}`,
|
|
31
|
+
description: method.description || `${method.name}(${method.params.map(p => p.name).join(", ")}): ${method.returnType}`,
|
|
32
|
+
uri: `cardinal://docs/api/${key}`,
|
|
33
|
+
});
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
// Search models
|
|
39
|
+
if (category === "all" || category === "models") {
|
|
40
|
+
for (const [key, model] of Object.entries(manifest.models)) {
|
|
41
|
+
if (key.toLowerCase().includes(queryLower)) {
|
|
42
|
+
results.push({
|
|
43
|
+
type: "model",
|
|
44
|
+
name: model.name,
|
|
45
|
+
description: model.variants ? `Encryptable: ${model.variants.join(", ")}` : `${model.fields.length} fields`,
|
|
46
|
+
uri: `cardinal://docs/model/${key}`,
|
|
47
|
+
});
|
|
48
|
+
}
|
|
49
|
+
// Also search field names
|
|
50
|
+
for (const field of model.fields) {
|
|
51
|
+
if (field.name.toLowerCase().includes(queryLower)) {
|
|
52
|
+
results.push({
|
|
53
|
+
type: "model_field",
|
|
54
|
+
name: `${model.name}.${field.name}`,
|
|
55
|
+
description: `${field.type}${field.description ? " — " + field.description : ""}`,
|
|
56
|
+
uri: `cardinal://docs/model/${key}`,
|
|
57
|
+
});
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
// Search filters
|
|
63
|
+
if (category === "all" || category === "filters") {
|
|
64
|
+
for (const [key, filter] of Object.entries(manifest.filters)) {
|
|
65
|
+
if (key.toLowerCase().includes(queryLower)) {
|
|
66
|
+
results.push({
|
|
67
|
+
type: "filter",
|
|
68
|
+
name: `${key}Filters`,
|
|
69
|
+
description: `${filter.methods.length} filter methods`,
|
|
70
|
+
uri: `cardinal://docs/filter/${key}`,
|
|
71
|
+
});
|
|
72
|
+
}
|
|
73
|
+
for (const method of filter.methods) {
|
|
74
|
+
if (method.name.toLowerCase().includes(queryLower)) {
|
|
75
|
+
results.push({
|
|
76
|
+
type: "filter_method",
|
|
77
|
+
name: `${key}Filters.${method.name}`,
|
|
78
|
+
description: `(${method.params.map(p => `${p.name}: ${p.type}`).join(", ")})`,
|
|
79
|
+
uri: `cardinal://docs/filter/${key}`,
|
|
80
|
+
});
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
// Search tutorials
|
|
86
|
+
if (category === "all" || category === "tutorials") {
|
|
87
|
+
for (const tutorial of manifest.tutorials) {
|
|
88
|
+
if (tutorial.title.toLowerCase().includes(queryLower) ||
|
|
89
|
+
tutorial.slug.toLowerCase().includes(queryLower) ||
|
|
90
|
+
tutorial.content.toLowerCase().includes(queryLower)) {
|
|
91
|
+
results.push({
|
|
92
|
+
type: "tutorial",
|
|
93
|
+
name: tutorial.title,
|
|
94
|
+
description: `Tutorial: ${tutorial.slug}`,
|
|
95
|
+
uri: `cardinal://docs/tutorial/${tutorial.slug}`,
|
|
96
|
+
});
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
// Deduplicate and limit
|
|
101
|
+
const seen = new Set();
|
|
102
|
+
const unique = results.filter(r => {
|
|
103
|
+
const key = `${r.type}:${r.name}`;
|
|
104
|
+
if (seen.has(key))
|
|
105
|
+
return false;
|
|
106
|
+
seen.add(key);
|
|
107
|
+
return true;
|
|
108
|
+
}).slice(0, limit);
|
|
109
|
+
return {
|
|
110
|
+
content: [{
|
|
111
|
+
type: "text",
|
|
112
|
+
text: JSON.stringify({
|
|
113
|
+
query,
|
|
114
|
+
resultCount: unique.length,
|
|
115
|
+
results: unique,
|
|
116
|
+
}, null, 2),
|
|
117
|
+
}],
|
|
118
|
+
};
|
|
119
|
+
});
|
|
120
|
+
}
|
|
121
|
+
//# sourceMappingURL=search.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"search.js","sourceRoot":"","sources":["../../src/resources/search.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tutorial-docs.d.ts","sourceRoot":"","sources":["../../src/resources/tutorial-docs.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAoB,MAAM,yCAAyC,CAAC;AAGtF,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,SAAS,QA6CrD"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { ResourceTemplate } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
2
|
+
import { getManifest } from "../helpers/docs-loader.js";
|
|
3
|
+
export function registerTutorialDocs(server) {
|
|
4
|
+
server.resource("tutorial-docs", new ResourceTemplate("cardinal://docs/tutorial/{slug}", {
|
|
5
|
+
list: async () => {
|
|
6
|
+
const manifest = getManifest();
|
|
7
|
+
return {
|
|
8
|
+
resources: manifest.tutorials.map(t => ({
|
|
9
|
+
uri: `cardinal://docs/tutorial/${t.slug}`,
|
|
10
|
+
name: t.title,
|
|
11
|
+
description: `Tutorial: ${t.title}`,
|
|
12
|
+
})),
|
|
13
|
+
};
|
|
14
|
+
},
|
|
15
|
+
}), {
|
|
16
|
+
title: "Tutorial Documentation",
|
|
17
|
+
description: "Step-by-step tutorial sections from DOCUMENTATION.md",
|
|
18
|
+
mimeType: "text/markdown",
|
|
19
|
+
}, async (uri, variables) => {
|
|
20
|
+
const slug = variables.slug;
|
|
21
|
+
const manifest = getManifest();
|
|
22
|
+
const tutorial = manifest.tutorials.find(t => t.slug === slug);
|
|
23
|
+
if (!tutorial) {
|
|
24
|
+
const available = manifest.tutorials.map(t => `- ${t.slug}: ${t.title}`).join("\n");
|
|
25
|
+
return {
|
|
26
|
+
contents: [{
|
|
27
|
+
uri: uri.href,
|
|
28
|
+
mimeType: "text/markdown",
|
|
29
|
+
text: `# Tutorial Not Found: ${slug}\n\nAvailable tutorials:\n${available}`,
|
|
30
|
+
}],
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
return {
|
|
34
|
+
contents: [{
|
|
35
|
+
uri: uri.href,
|
|
36
|
+
mimeType: "text/markdown",
|
|
37
|
+
text: `# ${tutorial.title}\n\n${tutorial.content}`,
|
|
38
|
+
}],
|
|
39
|
+
};
|
|
40
|
+
});
|
|
41
|
+
}
|
|
42
|
+
//# sourceMappingURL=tutorial-docs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tutorial-docs.js","sourceRoot":"","sources":["../../src/resources/tutorial-docs.ts"],"names":[],"mappings":"AAAA,OAAO,EAAa,gBAAgB,EAAE,MAAM,yCAAyC,CAAC;AACtF,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AAExD,MAAM,UAAU,oBAAoB,CAAC,MAAiB;IACrD,MAAM,CAAC,QAAQ,CACd,eAAe,EACf,IAAI,gBAAgB,CAAC,iCAAiC,EAAE;QACvD,IAAI,EAAE,KAAK,IAAI,EAAE;YAChB,MAAM,QAAQ,GAAG,WAAW,EAAE,CAAC;YAC/B,OAAO;gBACN,SAAS,EAAE,QAAQ,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;oBACvC,GAAG,EAAE,4BAA4B,CAAC,CAAC,IAAI,EAAE;oBACzC,IAAI,EAAE,CAAC,CAAC,KAAK;oBACb,WAAW,EAAE,aAAa,CAAC,CAAC,KAAK,EAAE;iBACnC,CAAC,CAAC;aACH,CAAC;QACH,CAAC;KACD,CAAC,EACF;QACC,KAAK,EAAE,wBAAwB;QAC/B,WAAW,EAAE,sDAAsD;QACnE,QAAQ,EAAE,eAAe;KACzB,EACD,KAAK,EAAE,GAAG,EAAE,SAAS,EAAE,EAAE;QACxB,MAAM,IAAI,GAAG,SAAS,CAAC,IAAc,CAAC;QACtC,MAAM,QAAQ,GAAG,WAAW,EAAE,CAAC;QAC/B,MAAM,QAAQ,GAAG,QAAQ,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC;QAE/D,IAAI,CAAC,QAAQ,EAAE,CAAC;YACf,MAAM,SAAS,GAAG,QAAQ,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACpF,OAAO;gBACN,QAAQ,EAAE,CAAC;wBACV,GAAG,EAAE,GAAG,CAAC,IAAI;wBACb,QAAQ,EAAE,eAAe;wBACzB,IAAI,EAAE,yBAAyB,IAAI,6BAA6B,SAAS,EAAE;qBAC3E,CAAC;aACF,CAAC;QACH,CAAC;QAED,OAAO;YACN,QAAQ,EAAE,CAAC;oBACV,GAAG,EAAE,GAAG,CAAC,IAAI;oBACb,QAAQ,EAAE,eAAe;oBACzB,IAAI,EAAE,KAAK,QAAQ,CAAC,KAAK,OAAO,QAAQ,CAAC,OAAO,EAAE;iBAClD,CAAC;SACF,CAAC;IACH,CAAC,CACD,CAAC;AACH,CAAC"}
|
package/dist/server.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAapE,wBAAgB,YAAY,IAAI,SAAS,CA8BxC"}
|
package/dist/server.js
ADDED
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
2
|
+
import { registerInitTool } from "./tools/init.js";
|
|
3
|
+
import { registerAdminTools } from "./tools/admin-tools.js";
|
|
4
|
+
import { registerDataOwnerTools } from "./tools/data-owner-tools.js";
|
|
5
|
+
import { registerCryptoTools } from "./tools/crypto-tools.js";
|
|
6
|
+
import { registerContinueIterationTool } from "./helpers/pagination.js";
|
|
7
|
+
import { registerSearchTool } from "./resources/search.js";
|
|
8
|
+
import { registerApiDocs } from "./resources/api-docs.js";
|
|
9
|
+
import { registerModelDocs } from "./resources/model-docs.js";
|
|
10
|
+
import { registerFilterDocs } from "./resources/filter-docs.js";
|
|
11
|
+
import { registerTutorialDocs } from "./resources/tutorial-docs.js";
|
|
12
|
+
import { registerOverview } from "./resources/overview.js";
|
|
13
|
+
export function createServer() {
|
|
14
|
+
const server = new McpServer({
|
|
15
|
+
name: "cardinal-sdk",
|
|
16
|
+
version: "1.0.0",
|
|
17
|
+
}, {
|
|
18
|
+
capabilities: {
|
|
19
|
+
tools: {},
|
|
20
|
+
resources: {},
|
|
21
|
+
},
|
|
22
|
+
});
|
|
23
|
+
// Register tools
|
|
24
|
+
registerInitTool(server);
|
|
25
|
+
registerAdminTools(server);
|
|
26
|
+
registerDataOwnerTools(server);
|
|
27
|
+
registerCryptoTools(server);
|
|
28
|
+
registerContinueIterationTool(server);
|
|
29
|
+
registerSearchTool(server);
|
|
30
|
+
// Register resources
|
|
31
|
+
registerOverview(server);
|
|
32
|
+
registerApiDocs(server);
|
|
33
|
+
registerModelDocs(server);
|
|
34
|
+
registerFilterDocs(server);
|
|
35
|
+
registerTutorialDocs(server);
|
|
36
|
+
return server;
|
|
37
|
+
}
|
|
38
|
+
//# sourceMappingURL=server.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACnD,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAC5D,OAAO,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAC;AACrE,OAAO,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAC9D,OAAO,EAAE,6BAA6B,EAAE,MAAM,yBAAyB,CAAC;AACxE,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAC3D,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAC1D,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAC9D,OAAO,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AAChE,OAAO,EAAE,oBAAoB,EAAE,MAAM,8BAA8B,CAAC;AACpE,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAE3D,MAAM,UAAU,YAAY;IAC3B,MAAM,MAAM,GAAG,IAAI,SAAS,CAC3B;QACC,IAAI,EAAE,cAAc;QACpB,OAAO,EAAE,OAAO;KAChB,EACD;QACC,YAAY,EAAE;YACb,KAAK,EAAE,EAAE;YACT,SAAS,EAAE,EAAE;SACb;KACD,CACD,CAAC;IAEF,iBAAiB;IACjB,gBAAgB,CAAC,MAAM,CAAC,CAAC;IACzB,kBAAkB,CAAC,MAAM,CAAC,CAAC;IAC3B,sBAAsB,CAAC,MAAM,CAAC,CAAC;IAC/B,mBAAmB,CAAC,MAAM,CAAC,CAAC;IAC5B,6BAA6B,CAAC,MAAM,CAAC,CAAC;IACtC,kBAAkB,CAAC,MAAM,CAAC,CAAC;IAE3B,qBAAqB;IACrB,gBAAgB,CAAC,MAAM,CAAC,CAAC;IACzB,eAAe,CAAC,MAAM,CAAC,CAAC;IACxB,iBAAiB,CAAC,MAAM,CAAC,CAAC;IAC1B,kBAAkB,CAAC,MAAM,CAAC,CAAC;IAC3B,oBAAoB,CAAC,MAAM,CAAC,CAAC;IAE7B,OAAO,MAAM,CAAC;AACf,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"admin-tools.d.ts","sourceRoot":"","sources":["../../src/tools/admin-tools.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAMpE,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,SAAS,QAanD"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { dispatch } from "./dispatch.js";
|
|
3
|
+
const ADMIN_APIS = ["Group", "User", "Role", "Permission", "System", "Auth", "ApplicationSettings"];
|
|
4
|
+
export function registerAdminTools(server) {
|
|
5
|
+
server.tool("cardinal_admin", `Execute admin operations. Covers: ${ADMIN_APIS.join(", ")} APIs. Use search_documentation to discover available methods.`, {
|
|
6
|
+
api: z.enum(ADMIN_APIS).describe("Which admin API to use"),
|
|
7
|
+
method: z.string().describe("Method name (e.g., listGroups, getUser, createGroup)"),
|
|
8
|
+
params: z.record(z.unknown()).optional().default({}).describe("Method parameters as key-value pairs"),
|
|
9
|
+
}, async ({ api, method, params }) => {
|
|
10
|
+
return dispatch({ api, method, params });
|
|
11
|
+
});
|
|
12
|
+
}
|
|
13
|
+
//# sourceMappingURL=admin-tools.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"admin-tools.js","sourceRoot":"","sources":["../../src/tools/admin-tools.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAEzC,MAAM,UAAU,GAAG,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,EAAE,qBAAqB,CAAU,CAAC;AAE7G,MAAM,UAAU,kBAAkB,CAAC,MAAiB;IACnD,MAAM,CAAC,IAAI,CACV,gBAAgB,EAChB,qCAAqC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,gEAAgE,EAC1H;QACC,GAAG,EAAE,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,QAAQ,CAAC,wBAAwB,CAAC;QAC1D,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,sDAAsD,CAAC;QACnF,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,sCAAsC,CAAC;KACrG,EACD,KAAK,EAAE,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE,EAAE;QACjC,OAAO,QAAQ,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;IAC1C,CAAC,CACD,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"crypto-tools.d.ts","sourceRoot":"","sources":["../../src/tools/crypto-tools.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAMpE,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,SAAS,QAapD"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { dispatch } from "./dispatch.js";
|
|
3
|
+
const CRYPTO_APIS = ["Crypto", "Recovery", "ShamirKeysManager", "DataOwner", "CardinalMaintenanceTask"];
|
|
4
|
+
export function registerCryptoTools(server) {
|
|
5
|
+
server.tool("cardinal_crypto", `Execute cryptography and key management operations. Covers: ${CRYPTO_APIS.join(", ")} APIs. Use search_documentation to discover available methods.`, {
|
|
6
|
+
api: z.enum(CRYPTO_APIS).describe("Which crypto API to use"),
|
|
7
|
+
method: z.string().describe("Method name (e.g., getCurrentDataOwner, forceReload)"),
|
|
8
|
+
params: z.record(z.unknown()).optional().default({}).describe("Method parameters as key-value pairs"),
|
|
9
|
+
}, async ({ api, method, params }) => {
|
|
10
|
+
return dispatch({ api, method, params });
|
|
11
|
+
});
|
|
12
|
+
}
|
|
13
|
+
//# sourceMappingURL=crypto-tools.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"crypto-tools.js","sourceRoot":"","sources":["../../src/tools/crypto-tools.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAEzC,MAAM,WAAW,GAAG,CAAC,QAAQ,EAAE,UAAU,EAAE,mBAAmB,EAAE,WAAW,EAAE,yBAAyB,CAAU,CAAC;AAEjH,MAAM,UAAU,mBAAmB,CAAC,MAAiB;IACpD,MAAM,CAAC,IAAI,CACV,iBAAiB,EACjB,+DAA+D,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,gEAAgE,EACrJ;QACC,GAAG,EAAE,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,QAAQ,CAAC,yBAAyB,CAAC;QAC5D,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,sDAAsD,CAAC;QACnF,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,sCAAsC,CAAC;KACrG,EACD,KAAK,EAAE,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE,EAAE;QACjC,OAAO,QAAQ,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;IAC1C,CAAC,CACD,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"data-owner-tools.d.ts","sourceRoot":"","sources":["../../src/tools/data-owner-tools.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAiBpE,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,SAAS,QAcvD"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { dispatch } from "./dispatch.js";
|
|
3
|
+
const DATA_OWNER_APIS = [
|
|
4
|
+
"HealthcareParty", "Patient", "Device",
|
|
5
|
+
"AccessLog", "CalendarItem", "Classification", "Contact", "Document",
|
|
6
|
+
"Form", "HealthElement", "Invoice", "MaintenanceTask", "Message",
|
|
7
|
+
"Receipt", "TimeTable", "Topic",
|
|
8
|
+
"Agenda", "CalendarItemType", "Code", "DocumentTemplate",
|
|
9
|
+
"EntityReference", "EntityTemplate", "FrontEndMigration",
|
|
10
|
+
"Insurance", "Keyword", "MedicalLocation", "Place", "Tarification",
|
|
11
|
+
"FormTemplate",
|
|
12
|
+
];
|
|
13
|
+
const FLAVOUR_VALUES = ["decrypted", "encrypted", "tryAndRecover"];
|
|
14
|
+
export function registerDataOwnerTools(server) {
|
|
15
|
+
server.tool("cardinal_data_owner", `Execute data operations on healthcare entities. Covers: ${DATA_OWNER_APIS.join(", ")} APIs. Encryptable entities support the 'flavour' parameter for encrypted/decrypted/tryAndRecover variants. Use search_documentation to discover available methods.`, {
|
|
16
|
+
api: z.enum(DATA_OWNER_APIS).describe("Which API to use"),
|
|
17
|
+
method: z.string().describe("Method name (e.g., getPatient, createCalendarItem, filterPatientsBy)"),
|
|
18
|
+
flavour: z.enum(FLAVOUR_VALUES).optional().describe("For encryptable entities: decrypted (default), encrypted, or tryAndRecover"),
|
|
19
|
+
params: z.record(z.unknown()).optional().default({}).describe("Method parameters as key-value pairs"),
|
|
20
|
+
}, async ({ api, method, flavour, params }) => {
|
|
21
|
+
return dispatch({ api, method, flavour, params });
|
|
22
|
+
});
|
|
23
|
+
}
|
|
24
|
+
//# sourceMappingURL=data-owner-tools.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"data-owner-tools.js","sourceRoot":"","sources":["../../src/tools/data-owner-tools.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAEzC,MAAM,eAAe,GAAG;IACvB,iBAAiB,EAAE,SAAS,EAAE,QAAQ;IACtC,WAAW,EAAE,cAAc,EAAE,gBAAgB,EAAE,SAAS,EAAE,UAAU;IACpE,MAAM,EAAE,eAAe,EAAE,SAAS,EAAE,iBAAiB,EAAE,SAAS;IAChE,SAAS,EAAE,WAAW,EAAE,OAAO;IAC/B,QAAQ,EAAE,kBAAkB,EAAE,MAAM,EAAE,kBAAkB;IACxD,iBAAiB,EAAE,gBAAgB,EAAE,mBAAmB;IACxD,WAAW,EAAE,SAAS,EAAE,iBAAiB,EAAE,OAAO,EAAE,cAAc;IAClE,cAAc;CACL,CAAC;AAEX,MAAM,cAAc,GAAG,CAAC,WAAW,EAAE,WAAW,EAAE,eAAe,CAAU,CAAC;AAE5E,MAAM,UAAU,sBAAsB,CAAC,MAAiB;IACvD,MAAM,CAAC,IAAI,CACV,qBAAqB,EACrB,2DAA2D,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,qKAAqK,EAC1P;QACC,GAAG,EAAE,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,QAAQ,CAAC,kBAAkB,CAAC;QACzD,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,sEAAsE,CAAC;QACnG,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,4EAA4E,CAAC;QACjI,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,sCAAsC,CAAC;KACrG,EACD,KAAK,EAAE,EAAE,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE,EAAE;QAC1C,OAAO,QAAQ,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC;IACnD,CAAC,CACD,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
export interface DispatchRequest {
|
|
2
|
+
api: string;
|
|
3
|
+
method: string;
|
|
4
|
+
flavour?: "decrypted" | "encrypted" | "tryAndRecover";
|
|
5
|
+
params: Record<string, unknown>;
|
|
6
|
+
}
|
|
7
|
+
export interface DispatchResult {
|
|
8
|
+
[key: string]: unknown;
|
|
9
|
+
content: Array<{
|
|
10
|
+
type: "text";
|
|
11
|
+
text: string;
|
|
12
|
+
}>;
|
|
13
|
+
isError?: boolean;
|
|
14
|
+
}
|
|
15
|
+
export declare function dispatch(request: DispatchRequest): Promise<DispatchResult>;
|
|
16
|
+
//# sourceMappingURL=dispatch.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dispatch.d.ts","sourceRoot":"","sources":["../../src/tools/dispatch.ts"],"names":[],"mappings":"AAiDA,MAAM,WAAW,eAAe;IAC/B,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,WAAW,GAAG,WAAW,GAAG,eAAe,CAAC;IACtD,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAChC;AAED,MAAM,WAAW,cAAc;IAC9B,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;IACvB,OAAO,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC/C,OAAO,CAAC,EAAE,OAAO,CAAC;CAClB;AAED,wBAAsB,QAAQ,CAAC,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC,cAAc,CAAC,CAuChF"}
|
|
@@ -0,0 +1,141 @@
|
|
|
1
|
+
import { getSdk } from "./sdk-state.js";
|
|
2
|
+
import { collectFirstPage } from "../helpers/pagination.js";
|
|
3
|
+
import { formatResponse } from "../helpers/serialization.js";
|
|
4
|
+
import { buildFilter } from "../helpers/filter-builder.js";
|
|
5
|
+
import { buildModel } from "../helpers/model-builder.js";
|
|
6
|
+
import * as fs from "node:fs";
|
|
7
|
+
import * as path from "node:path";
|
|
8
|
+
import { fileURLToPath } from "node:url";
|
|
9
|
+
const __dirname = path.dirname(fileURLToPath(import.meta.url));
|
|
10
|
+
let registryCache = null;
|
|
11
|
+
function getRegistry() {
|
|
12
|
+
if (!registryCache) {
|
|
13
|
+
const registryPath = path.resolve(__dirname, "..", "..", "generated", "method-registry.ts");
|
|
14
|
+
const content = fs.readFileSync(registryPath, "utf-8");
|
|
15
|
+
// Extract the JSON from the generated TS file
|
|
16
|
+
const jsonMatch = content.match(/=\s*(\{[\s\S]*\})\s*;\s*$/);
|
|
17
|
+
if (!jsonMatch)
|
|
18
|
+
throw new Error("Could not parse method registry");
|
|
19
|
+
registryCache = JSON.parse(jsonMatch[1]);
|
|
20
|
+
}
|
|
21
|
+
return registryCache;
|
|
22
|
+
}
|
|
23
|
+
export async function dispatch(request) {
|
|
24
|
+
const sdk = getSdk();
|
|
25
|
+
const registry = getRegistry();
|
|
26
|
+
// Look up API info
|
|
27
|
+
const apiInfo = registry[request.api];
|
|
28
|
+
if (!apiInfo) {
|
|
29
|
+
return errorResult(`Unknown API: "${request.api}". Available: ${Object.keys(registry).join(", ")}`);
|
|
30
|
+
}
|
|
31
|
+
// Look up method info
|
|
32
|
+
const methodInfo = apiInfo.methods.find(m => m.name === request.method);
|
|
33
|
+
if (!methodInfo) {
|
|
34
|
+
const available = apiInfo.methods.map(m => m.name).join(", ");
|
|
35
|
+
return errorResult(`Unknown method "${request.method}" on ${request.api}Api. Available: ${available}`);
|
|
36
|
+
}
|
|
37
|
+
// Resolve API object from SDK
|
|
38
|
+
const apiObj = resolveApi(sdk, apiInfo.propertyName, request.flavour, apiInfo.isEncryptable);
|
|
39
|
+
if (!apiObj) {
|
|
40
|
+
return errorResult(`Could not resolve API "${apiInfo.propertyName}" on SDK instance.`);
|
|
41
|
+
}
|
|
42
|
+
// Resolve method function
|
|
43
|
+
const methodFn = apiObj[request.method];
|
|
44
|
+
if (typeof methodFn !== "function") {
|
|
45
|
+
return errorResult(`Method "${request.method}" is not a function on ${apiInfo.propertyName}${request.flavour ? "." + request.flavour : ""}.`);
|
|
46
|
+
}
|
|
47
|
+
// Build arguments in the correct order
|
|
48
|
+
const args = buildArgs(methodInfo.params, request.params);
|
|
49
|
+
try {
|
|
50
|
+
const result = await methodFn.apply(apiObj, args);
|
|
51
|
+
return handleResult(result);
|
|
52
|
+
}
|
|
53
|
+
catch (err) {
|
|
54
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
55
|
+
return errorResult(`Error calling ${request.api}.${request.method}: ${message}`);
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
function resolveApi(sdk, propertyName, flavour, isEncryptable) {
|
|
59
|
+
const baseApi = sdk[propertyName];
|
|
60
|
+
if (!baseApi)
|
|
61
|
+
return null;
|
|
62
|
+
if (isEncryptable && flavour && flavour !== "decrypted") {
|
|
63
|
+
const flavouredApi = baseApi[flavour];
|
|
64
|
+
return flavouredApi || baseApi;
|
|
65
|
+
}
|
|
66
|
+
return baseApi;
|
|
67
|
+
}
|
|
68
|
+
function buildArgs(paramDefs, params) {
|
|
69
|
+
return paramDefs.map(def => {
|
|
70
|
+
const value = params[def.name];
|
|
71
|
+
if (value === undefined) {
|
|
72
|
+
return undefined;
|
|
73
|
+
}
|
|
74
|
+
// Transform special parameter types
|
|
75
|
+
if (def.type.includes("FilterOptions")) {
|
|
76
|
+
if (value && typeof value === "object" && "_factory" in value) {
|
|
77
|
+
return buildFilter(value);
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
// Build model instances from plain objects
|
|
81
|
+
if (value && typeof value === "object" && !Array.isArray(value)) {
|
|
82
|
+
const typeName = extractTypeName(def.type);
|
|
83
|
+
if (typeName) {
|
|
84
|
+
return buildModel(typeName, value);
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
// Handle arrays of models
|
|
88
|
+
if (Array.isArray(value) && def.type.includes("Array<")) {
|
|
89
|
+
const innerType = extractArrayInnerType(def.type);
|
|
90
|
+
if (innerType) {
|
|
91
|
+
return value.map(item => {
|
|
92
|
+
if (item && typeof item === "object" && !Array.isArray(item)) {
|
|
93
|
+
return buildModel(innerType, item);
|
|
94
|
+
}
|
|
95
|
+
return item;
|
|
96
|
+
});
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
return value;
|
|
100
|
+
});
|
|
101
|
+
}
|
|
102
|
+
function extractTypeName(typeStr) {
|
|
103
|
+
// Match simple type names like "DecryptedPatient", "Group", etc.
|
|
104
|
+
const match = typeStr.match(/^(Decrypted|Encrypted)?(\w+)$/);
|
|
105
|
+
if (match)
|
|
106
|
+
return typeStr;
|
|
107
|
+
// Handle union types - take the first non-primitive
|
|
108
|
+
const parts = typeStr.split("|").map(s => s.trim());
|
|
109
|
+
for (const part of parts) {
|
|
110
|
+
if (part !== "undefined" && part !== "null" && part !== "string" && part !== "number" && part !== "boolean") {
|
|
111
|
+
const inner = part.match(/^(\w+)$/);
|
|
112
|
+
if (inner)
|
|
113
|
+
return inner[1];
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
return null;
|
|
117
|
+
}
|
|
118
|
+
function extractArrayInnerType(typeStr) {
|
|
119
|
+
const match = typeStr.match(/Array<(\w+)>/);
|
|
120
|
+
return match ? match[1] : null;
|
|
121
|
+
}
|
|
122
|
+
async function handleResult(result) {
|
|
123
|
+
// Handle PaginatedListIterator
|
|
124
|
+
if (result && typeof result === "object" && "hasNext" in result && "next" in result) {
|
|
125
|
+
const iterator = result;
|
|
126
|
+
const page = await collectFirstPage(iterator);
|
|
127
|
+
return {
|
|
128
|
+
content: [{ type: "text", text: formatResponse(page) }],
|
|
129
|
+
};
|
|
130
|
+
}
|
|
131
|
+
return {
|
|
132
|
+
content: [{ type: "text", text: formatResponse(result) }],
|
|
133
|
+
};
|
|
134
|
+
}
|
|
135
|
+
function errorResult(message) {
|
|
136
|
+
return {
|
|
137
|
+
content: [{ type: "text", text: JSON.stringify({ error: message }) }],
|
|
138
|
+
isError: true,
|
|
139
|
+
};
|
|
140
|
+
}
|
|
141
|
+
//# sourceMappingURL=dispatch.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dispatch.js","sourceRoot":"","sources":["../../src/tools/dispatch.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/tools/init.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAIpE,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,SAAS,QAsDjD"}
|