@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.
Files changed (79) hide show
  1. package/dist/helpers/docs-loader.d.ts +56 -0
  2. package/dist/helpers/docs-loader.d.ts.map +1 -0
  3. package/dist/helpers/docs-loader.js +14 -0
  4. package/dist/helpers/docs-loader.js.map +1 -0
  5. package/dist/helpers/filter-builder.d.ts +7 -0
  6. package/dist/helpers/filter-builder.d.ts.map +1 -0
  7. package/dist/helpers/filter-builder.js +53 -0
  8. package/dist/helpers/filter-builder.js.map +1 -0
  9. package/dist/helpers/model-builder.d.ts +10 -0
  10. package/dist/helpers/model-builder.d.ts.map +1 -0
  11. package/dist/helpers/model-builder.js +64 -0
  12. package/dist/helpers/model-builder.js.map +1 -0
  13. package/dist/helpers/pagination.d.ts +13 -0
  14. package/dist/helpers/pagination.d.ts.map +1 -0
  15. package/dist/helpers/pagination.js +56 -0
  16. package/dist/helpers/pagination.js.map +1 -0
  17. package/dist/helpers/serialization.d.ts +7 -0
  18. package/dist/helpers/serialization.d.ts.map +1 -0
  19. package/dist/helpers/serialization.js +36 -0
  20. package/dist/helpers/serialization.js.map +1 -0
  21. package/dist/index.d.ts +3 -0
  22. package/dist/index.d.ts.map +1 -0
  23. package/dist/index.js +13 -0
  24. package/dist/index.js.map +1 -0
  25. package/dist/resources/api-docs.d.ts +3 -0
  26. package/dist/resources/api-docs.d.ts.map +1 -0
  27. package/dist/resources/api-docs.js +63 -0
  28. package/dist/resources/api-docs.js.map +1 -0
  29. package/dist/resources/filter-docs.d.ts +3 -0
  30. package/dist/resources/filter-docs.d.ts.map +1 -0
  31. package/dist/resources/filter-docs.js +56 -0
  32. package/dist/resources/filter-docs.js.map +1 -0
  33. package/dist/resources/model-docs.d.ts +3 -0
  34. package/dist/resources/model-docs.d.ts.map +1 -0
  35. package/dist/resources/model-docs.js +59 -0
  36. package/dist/resources/model-docs.js.map +1 -0
  37. package/dist/resources/overview.d.ts +3 -0
  38. package/dist/resources/overview.d.ts.map +1 -0
  39. package/dist/resources/overview.js +76 -0
  40. package/dist/resources/overview.js.map +1 -0
  41. package/dist/resources/search.d.ts +3 -0
  42. package/dist/resources/search.d.ts.map +1 -0
  43. package/dist/resources/search.js +121 -0
  44. package/dist/resources/search.js.map +1 -0
  45. package/dist/resources/tutorial-docs.d.ts +3 -0
  46. package/dist/resources/tutorial-docs.d.ts.map +1 -0
  47. package/dist/resources/tutorial-docs.js +42 -0
  48. package/dist/resources/tutorial-docs.js.map +1 -0
  49. package/dist/server.d.ts +3 -0
  50. package/dist/server.d.ts.map +1 -0
  51. package/dist/server.js +38 -0
  52. package/dist/server.js.map +1 -0
  53. package/dist/tools/admin-tools.d.ts +3 -0
  54. package/dist/tools/admin-tools.d.ts.map +1 -0
  55. package/dist/tools/admin-tools.js +13 -0
  56. package/dist/tools/admin-tools.js.map +1 -0
  57. package/dist/tools/crypto-tools.d.ts +3 -0
  58. package/dist/tools/crypto-tools.d.ts.map +1 -0
  59. package/dist/tools/crypto-tools.js +13 -0
  60. package/dist/tools/crypto-tools.js.map +1 -0
  61. package/dist/tools/data-owner-tools.d.ts +3 -0
  62. package/dist/tools/data-owner-tools.d.ts.map +1 -0
  63. package/dist/tools/data-owner-tools.js +24 -0
  64. package/dist/tools/data-owner-tools.js.map +1 -0
  65. package/dist/tools/dispatch.d.ts +16 -0
  66. package/dist/tools/dispatch.d.ts.map +1 -0
  67. package/dist/tools/dispatch.js +141 -0
  68. package/dist/tools/dispatch.js.map +1 -0
  69. package/dist/tools/init.d.ts +3 -0
  70. package/dist/tools/init.d.ts.map +1 -0
  71. package/dist/tools/init.js +45 -0
  72. package/dist/tools/init.js.map +1 -0
  73. package/dist/tools/sdk-state.d.ts +5 -0
  74. package/dist/tools/sdk-state.d.ts.map +1 -0
  75. package/dist/tools/sdk-state.js +14 -0
  76. package/dist/tools/sdk-state.js.map +1 -0
  77. package/generated/docs-manifest.json +33264 -0
  78. package/generated/method-registry.ts +9453 -0
  79. 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,3 @@
1
+ import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ export declare function registerSearchTool(server: McpServer): void;
3
+ //# sourceMappingURL=search.d.ts.map
@@ -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,3 @@
1
+ import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ export declare function registerTutorialDocs(server: McpServer): void;
3
+ //# sourceMappingURL=tutorial-docs.d.ts.map
@@ -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"}
@@ -0,0 +1,3 @@
1
+ import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ export declare function createServer(): McpServer;
3
+ //# sourceMappingURL=server.d.ts.map
@@ -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,3 @@
1
+ import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ export declare function registerAdminTools(server: McpServer): void;
3
+ //# sourceMappingURL=admin-tools.d.ts.map
@@ -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,3 @@
1
+ import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ export declare function registerCryptoTools(server: McpServer): void;
3
+ //# sourceMappingURL=crypto-tools.d.ts.map
@@ -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,3 @@
1
+ import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ export declare function registerDataOwnerTools(server: McpServer): void;
3
+ //# sourceMappingURL=data-owner-tools.d.ts.map
@@ -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,3 @@
1
+ import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ export declare function registerInitTool(server: McpServer): void;
3
+ //# sourceMappingURL=init.d.ts.map
@@ -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"}