@node-in-layers/mcp-server 1.6.0 → 2.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/index.d.ts CHANGED
@@ -1,5 +1,4 @@
1
1
  declare const name = "@node-in-layers/mcp-server";
2
- export { mcpModels } from './mcp.js';
3
2
  export { name };
4
3
  export * as mcp from './mcp.js';
5
4
  export * from './types.js';
package/index.js CHANGED
@@ -1,5 +1,4 @@
1
1
  const name = '@node-in-layers/mcp-server';
2
- export { mcpModels } from './mcp.js';
3
2
  export { name };
4
3
  export * as mcp from './mcp.js';
5
4
  export * from './types.js';
package/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,MAAM,IAAI,GAAG,4BAA4B,CAAA;AAEzC,OAAO,EAAE,SAAS,EAAE,MAAM,UAAU,CAAA;AACpC,OAAO,EAAE,IAAI,EAAE,CAAA;AACf,OAAO,KAAK,GAAG,MAAM,UAAU,CAAA;AAC/B,cAAc,YAAY,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,MAAM,IAAI,GAAG,4BAA4B,CAAA;AAEzC,OAAO,EAAE,IAAI,EAAE,CAAA;AACf,OAAO,KAAK,GAAG,MAAM,UAAU,CAAA;AAC/B,cAAc,YAAY,CAAA"}
package/libs.d.ts ADDED
@@ -0,0 +1,28 @@
1
+ import { McpTool } from '@l4t/mcp-ai/common/types.js';
2
+ import { NilAnnotatedFunction } from '@node-in-layers/core';
3
+ import { OpenApiFunctionDescription } from './types.js';
4
+ export declare const isNilAnnotatedFunction: (fn: any) => fn is NilAnnotatedFunction<any, any>;
5
+ export declare const describeFeatureMcpTool: () => McpTool;
6
+ export declare const listFeaturesMcpTool: () => McpTool;
7
+ export declare const describeModelMcpTool: () => McpTool;
8
+ export declare const listModelsMcpTool: () => McpTool;
9
+ export declare const listDomainsMcpTool: () => McpTool;
10
+ export declare const createOpenApiForNonNilAnnotatedFunction: (name: string) => {
11
+ name: string;
12
+ input: {
13
+ type: string;
14
+ additionalProperties: boolean;
15
+ properties: {
16
+ args: {
17
+ type: string;
18
+ };
19
+ crossLayerProps: Record<string, any>;
20
+ };
21
+ required: string[];
22
+ };
23
+ output: {
24
+ type: string;
25
+ additionalProperties: boolean;
26
+ };
27
+ };
28
+ export declare const nilAnnotatedFunctionToOpenApi: (name: string, fn: NilAnnotatedFunction<any, any>) => OpenApiFunctionDescription;
package/libs.js ADDED
@@ -0,0 +1,397 @@
1
+ export const isNilAnnotatedFunction = (fn) => {
2
+ if (fn.schema) {
3
+ return true;
4
+ }
5
+ return false;
6
+ };
7
+ export const describeFeatureMcpTool = () => {
8
+ return {
9
+ name: 'describe_feature',
10
+ description: 'Gets the schema of a given feature',
11
+ inputSchema: {
12
+ type: 'object',
13
+ properties: {
14
+ domain: { type: 'string' },
15
+ featureName: { type: 'string' },
16
+ },
17
+ required: ['domain', 'featureName'],
18
+ },
19
+ outputSchema: {
20
+ type: 'object',
21
+ properties: {
22
+ schema: { type: 'object' },
23
+ },
24
+ },
25
+ };
26
+ };
27
+ export const listFeaturesMcpTool = () => {
28
+ return {
29
+ name: 'list_features',
30
+ description: 'Gets a list of features for a given domain',
31
+ inputSchema: {
32
+ type: 'object',
33
+ properties: {
34
+ domain: { type: 'string' },
35
+ },
36
+ required: ['domain'],
37
+ },
38
+ outputSchema: {
39
+ type: 'object',
40
+ properties: {
41
+ features: {
42
+ type: 'array',
43
+ // @ts-ignore
44
+ items: {
45
+ type: 'object',
46
+ required: ['name'],
47
+ properties: {
48
+ name: { type: 'string' },
49
+ description: { type: 'string' },
50
+ },
51
+ },
52
+ },
53
+ },
54
+ },
55
+ };
56
+ };
57
+ export const describeModelMcpTool = () => {
58
+ return {
59
+ name: 'describe_model',
60
+ description: 'Gets the schema of a given model',
61
+ inputSchema: {
62
+ type: 'object',
63
+ properties: {
64
+ domain: { type: 'string' },
65
+ modelType: { type: 'string' },
66
+ },
67
+ required: ['domain', 'modelType'],
68
+ },
69
+ outputSchema: {
70
+ type: 'object',
71
+ // @ts-ignore
72
+ additionalProperties: true,
73
+ },
74
+ };
75
+ };
76
+ export const listModelsMcpTool = () => {
77
+ return {
78
+ name: 'list_models',
79
+ description: 'Gets a list of models for a given domain and their description.',
80
+ inputSchema: {
81
+ type: 'object',
82
+ properties: {
83
+ domain: { type: 'string' },
84
+ },
85
+ required: ['domain'],
86
+ },
87
+ outputSchema: {
88
+ type: 'object',
89
+ properties: {
90
+ models: {
91
+ type: 'array',
92
+ // @ts-ignore
93
+ items: {
94
+ type: 'object',
95
+ required: ['modelType'],
96
+ properties: {
97
+ modelType: { type: 'string' },
98
+ description: { type: 'string' },
99
+ },
100
+ },
101
+ },
102
+ },
103
+ },
104
+ };
105
+ };
106
+ export const listDomainsMcpTool = () => {
107
+ return {
108
+ name: 'list_domains',
109
+ description: 'Gets a list of domains on the system, including their descriptions.',
110
+ outputSchema: {
111
+ type: 'object',
112
+ properties: {
113
+ domains: {
114
+ type: 'array',
115
+ // @ts-ignore
116
+ items: {
117
+ type: 'object',
118
+ required: ['name'],
119
+ properties: {
120
+ name: { type: 'string' },
121
+ description: { type: 'string' },
122
+ },
123
+ },
124
+ },
125
+ },
126
+ },
127
+ };
128
+ };
129
+ const _defOf = (schema) => { var _a, _b; return ((_b = (_a = schema === null || schema === void 0 ? void 0 : schema._zod) === null || _a === void 0 ? void 0 : _a.def) !== null && _b !== void 0 ? _b : schema === null || schema === void 0 ? void 0 : schema._def); };
130
+ const _unwrap = (schema) => {
131
+ const defAny = _defOf(schema);
132
+ const inner = (defAny === null || defAny === void 0 ? void 0 : defAny.innerType) || (defAny === null || defAny === void 0 ? void 0 : defAny.type) || (defAny === null || defAny === void 0 ? void 0 : defAny.schema) || (defAny === null || defAny === void 0 ? void 0 : defAny.wrapped);
133
+ return inner && (inner._zod || inner._def) ? _unwrap(inner) : schema;
134
+ };
135
+ const _getDescription = (schema, defAny) => {
136
+ var _a;
137
+ return ((schema && schema.description) ||
138
+ (defAny === null || defAny === void 0 ? void 0 : defAny.description) ||
139
+ ((_a = defAny === null || defAny === void 0 ? void 0 : defAny.doc) === null || _a === void 0 ? void 0 : _a.description));
140
+ };
141
+ // c8 ignore start
142
+ const _normalizeType = (t) => {
143
+ switch (t) {
144
+ case 'ZodString':
145
+ return 'string';
146
+ case 'ZodNumber':
147
+ return 'number';
148
+ case 'ZodBoolean':
149
+ return 'boolean';
150
+ case 'ZodLiteral':
151
+ return 'literal';
152
+ case 'ZodEnum':
153
+ return 'enum';
154
+ case 'ZodArray':
155
+ return 'array';
156
+ case 'ZodRecord':
157
+ return 'record';
158
+ case 'ZodObject':
159
+ return 'object';
160
+ case 'ZodUnion':
161
+ return 'union';
162
+ case 'ZodTuple':
163
+ return 'tuple';
164
+ case 'ZodUndefined':
165
+ return 'undefined';
166
+ // c8 ignore next 3: unused mappings in current paths
167
+ // case 'ZodUnknown':
168
+ // return 'unknown'
169
+ // case 'ZodAny':
170
+ // return 'any'
171
+ default:
172
+ return t;
173
+ }
174
+ };
175
+ // c8 ignore stop
176
+ // c8 ignore start
177
+ const _numberSchema = (defAny, desc) => {
178
+ const checks = Array.isArray(defAny === null || defAny === void 0 ? void 0 : defAny.checks) ? defAny.checks : [];
179
+ const baseType = checks.some((c) => (c === null || c === void 0 ? void 0 : c.kind) === 'int')
180
+ ? 'integer'
181
+ : 'number';
182
+ const extras = checks.reduce((acc, c) => {
183
+ if ((c === null || c === void 0 ? void 0 : c.kind) === 'min') {
184
+ return Object.assign(Object.assign({}, acc), { minimum: c.value });
185
+ }
186
+ if ((c === null || c === void 0 ? void 0 : c.kind) === 'max') {
187
+ return Object.assign(Object.assign({}, acc), { maximum: c.value });
188
+ }
189
+ if ((c === null || c === void 0 ? void 0 : c.kind) === 'multipleOf') {
190
+ return Object.assign(Object.assign({}, acc), { multipleOf: c.value });
191
+ }
192
+ return acc;
193
+ }, {});
194
+ return Object.assign(Object.assign({ type: baseType }, (desc ? { description: desc } : {})), extras);
195
+ };
196
+ // c8 ignore stop
197
+ // c8 ignore start
198
+ const _enumValues = (s, defAny) => {
199
+ var _a;
200
+ const zValues = (_a = s === null || s === void 0 ? void 0 : s._zod) === null || _a === void 0 ? void 0 : _a.values;
201
+ return zValues && typeof zValues.forEach === 'function'
202
+ ? Array.from(zValues)
203
+ : Array.isArray(defAny === null || defAny === void 0 ? void 0 : defAny.entries)
204
+ ? defAny.entries
205
+ : (defAny === null || defAny === void 0 ? void 0 : defAny.entries) && typeof defAny.entries === 'object'
206
+ ? Object.values(defAny.entries)
207
+ : Array.isArray(defAny === null || defAny === void 0 ? void 0 : defAny.values)
208
+ ? defAny.values
209
+ : (defAny === null || defAny === void 0 ? void 0 : defAny.values) && typeof defAny.values === 'object'
210
+ ? Object.values(defAny.values)
211
+ : Array.isArray(defAny === null || defAny === void 0 ? void 0 : defAny.options)
212
+ ? defAny.options
213
+ : (defAny === null || defAny === void 0 ? void 0 : defAny.options) && typeof defAny.options === 'object'
214
+ ? Object.values(defAny.options)
215
+ : [];
216
+ };
217
+ // c8 ignore stop
218
+ // c8 ignore start
219
+ const _literalSchema = (defAny, desc) => {
220
+ const literalValue = Array.isArray(defAny === null || defAny === void 0 ? void 0 : defAny.values)
221
+ ? defAny.values[0]
222
+ : defAny === null || defAny === void 0 ? void 0 : defAny.value;
223
+ const t = typeof literalValue;
224
+ const jsonType = t === 'string' || t === 'number' || t === 'boolean' ? t : undefined;
225
+ return Object.assign(Object.assign(Object.assign({}, (jsonType ? { type: jsonType } : {})), { const: literalValue }), (desc ? { description: desc } : {}));
226
+ };
227
+ // c8 ignore stop
228
+ const _objectFromShape = (shape, desc) => {
229
+ const entries = Object.entries(shape || {});
230
+ const reduced = entries.reduce((acc, [key, field]) => {
231
+ const fieldDefAny = _defOf(field) || {};
232
+ const fieldType = (fieldDefAny === null || fieldDefAny === void 0 ? void 0 : fieldDefAny.type) || (fieldDefAny === null || fieldDefAny === void 0 ? void 0 : fieldDefAny.typeName);
233
+ const isOptional = fieldType === 'optional' ||
234
+ fieldType === 'default' ||
235
+ fieldType === 'ZodOptional' ||
236
+ fieldType === 'ZodDefault';
237
+ const nextProps = Object.assign(Object.assign({}, acc.properties), { [key]: _zodToJson(field) });
238
+ const nextReq = isOptional ? acc.required : acc.required.concat(key);
239
+ return { properties: nextProps, required: nextReq };
240
+ }, { properties: {}, required: [] });
241
+ return Object.assign(Object.assign({ type: 'object', properties: reduced.properties, additionalProperties: false }, (desc ? { description: desc } : {})), (reduced.required.length > 0 ? { required: reduced.required } : {}));
242
+ };
243
+ const _arrayItems = (defAny) => { var _a, _b; return (_b = (_a = defAny === null || defAny === void 0 ? void 0 : defAny.element) !== null && _a !== void 0 ? _a : defAny === null || defAny === void 0 ? void 0 : defAny.type) !== null && _b !== void 0 ? _b : defAny === null || defAny === void 0 ? void 0 : defAny.element; };
244
+ const _recordValueType = (defAny) => { var _a; return (_a = defAny === null || defAny === void 0 ? void 0 : defAny.valueType) !== null && _a !== void 0 ? _a : defAny === null || defAny === void 0 ? void 0 : defAny.value; };
245
+ const _zodToJsonHandlers = {
246
+ string: (_defAny, _s, desc) => (Object.assign({ type: 'string' }, (desc ? { description: desc } : {}))),
247
+ number: (defAny, _s, desc) => _numberSchema(defAny, desc),
248
+ boolean: (_defAny, _s, desc) => (Object.assign({ type: 'boolean' }, (desc ? { description: desc } : {}))),
249
+ literal: (defAny, _s, desc) => _literalSchema(defAny, desc),
250
+ enum: (defAny, s, desc) => (Object.assign({ type: 'string', enum: _enumValues(s, defAny) }, (desc ? { description: desc } : {}))),
251
+ array: (defAny, _s, desc) => {
252
+ const item = _arrayItems(defAny);
253
+ return Object.assign({ type: 'array', items: _zodToJson(item) }, (desc ? { description: desc } : {}));
254
+ },
255
+ record: (defAny, _s, desc) => {
256
+ const valueType = _recordValueType(defAny);
257
+ return Object.assign({ type: 'object', additionalProperties: _zodToJson(valueType) }, (desc ? { description: desc } : {}));
258
+ },
259
+ object: (defAny, _s, desc) => {
260
+ const shapeGetter = defAny === null || defAny === void 0 ? void 0 : defAny.shape;
261
+ const shape = typeof shapeGetter === 'function' ? shapeGetter() : shapeGetter || {};
262
+ return _objectFromShape(shape, desc);
263
+ },
264
+ union: (defAny, _s, desc) => {
265
+ var _a;
266
+ const options = ((_a = defAny === null || defAny === void 0 ? void 0 : defAny.options) !== null && _a !== void 0 ? _a : []);
267
+ return Object.assign({ anyOf: options.map(_zodToJson) }, (desc ? { description: desc } : {}));
268
+ },
269
+ // undefined -> OpenAPI null
270
+ undefined: (_defAny, _s, desc) => (Object.assign({ type: 'null' }, (desc ? { description: desc } : {}))),
271
+ // tuple handler intentionally ignored
272
+ // c8 ignore next 7
273
+ // tuple: (defAny, _s, desc) => {
274
+ // const items = _tupleItems(defAny)
275
+ // const arr = Array.isArray(items) ? items : Array.from(items as any)
276
+ // return {
277
+ // type: 'array',
278
+ // prefixItems: arr.map(_zodToJson),
279
+ // ...(desc ? { description: desc } : {}),
280
+ // }
281
+ // },
282
+ };
283
+ const _zodToJson = (schema) => {
284
+ // c8 ignore next 2
285
+ if (!schema) {
286
+ return {};
287
+ }
288
+ const original = schema;
289
+ const s = _unwrap(schema);
290
+ const defAny = _defOf(s);
291
+ const t = _normalizeType((defAny === null || defAny === void 0 ? void 0 : defAny.type) || (defAny === null || defAny === void 0 ? void 0 : defAny.typeName)) || 'unknown';
292
+ const desc = _getDescription(original, _defOf(original)) || _getDescription(s, defAny);
293
+ const handler = _zodToJsonHandlers[t];
294
+ if (handler) {
295
+ return handler(defAny, s, desc);
296
+ }
297
+ // c8 ignore next: fallback defensive return
298
+ return {};
299
+ };
300
+ /**
301
+ * CrossLayerProps OpenAPI schema (static):
302
+ * {
303
+ * logging?: {
304
+ * ids?: Array<Record<string,string>>
305
+ * }
306
+ * }
307
+ */
308
+ const _crossLayerPropsOpenApi = () => ({
309
+ type: 'object',
310
+ additionalProperties: true,
311
+ properties: {
312
+ logging: {
313
+ type: 'object',
314
+ additionalProperties: true,
315
+ properties: {
316
+ ids: {
317
+ type: 'array',
318
+ items: {
319
+ type: 'object',
320
+ additionalProperties: { type: 'string' },
321
+ },
322
+ },
323
+ },
324
+ },
325
+ },
326
+ });
327
+ /**
328
+ * NOTE: Unused breadth-first search fallback for tuple/object discovery. Commented out to avoid
329
+ * non-functional patterns (loops/mutation) and because current Zod v4 paths cover our use-cases.
330
+ */
331
+ /*
332
+ const _findZodNodesByType = (
333
+ root: any,
334
+ typeName: string,
335
+ maxDepth = 6
336
+ ): any[] => {
337
+ return []
338
+ }
339
+ */
340
+ const _firstDefined = (...vals) => vals.find(v => v !== undefined);
341
+ const _getFirstArgSchema = (fnSchema) => {
342
+ const def = _defOf(fnSchema);
343
+ const inputSchema = def === null || def === void 0 ? void 0 : def.input;
344
+ const tupleDef = _firstDefined(_defOf(inputSchema), inputSchema);
345
+ const itemsAny = _firstDefined(tupleDef === null || tupleDef === void 0 ? void 0 : tupleDef.items, tupleDef === null || tupleDef === void 0 ? void 0 : tupleDef.elements, tupleDef === null || tupleDef === void 0 ? void 0 : tupleDef.itemsArray);
346
+ // c8 ignore next 3
347
+ const items = Array.isArray(itemsAny)
348
+ ? itemsAny
349
+ : itemsAny
350
+ ? Array.from(itemsAny)
351
+ : undefined;
352
+ return Array.isArray(items) ? items[0] : undefined;
353
+ };
354
+ export const createOpenApiForNonNilAnnotatedFunction = (name) => {
355
+ return {
356
+ name,
357
+ input: {
358
+ type: 'object',
359
+ additionalProperties: true,
360
+ properties: {
361
+ args: {
362
+ type: 'object',
363
+ },
364
+ crossLayerProps: _crossLayerPropsOpenApi(),
365
+ },
366
+ required: ['args'],
367
+ },
368
+ output: {
369
+ type: 'object',
370
+ additionalProperties: true,
371
+ },
372
+ };
373
+ };
374
+ export const nilAnnotatedFunctionToOpenApi = (name, fn) => {
375
+ var _a, _b;
376
+ const schema = fn.schema;
377
+ const def = _defOf(schema);
378
+ const returnsSchema = _firstDefined(def === null || def === void 0 ? void 0 : def.output, def === null || def === void 0 ? void 0 : def.returns, def === null || def === void 0 ? void 0 : def.returnType, def === null || def === void 0 ? void 0 : def.result);
379
+ const argsSchema = _getFirstArgSchema(schema);
380
+ const argsJson = argsSchema ? _zodToJson(argsSchema) : {};
381
+ const outputJson = returnsSchema ? _zodToJson(returnsSchema) : {};
382
+ const inputObject = {
383
+ type: 'object',
384
+ additionalProperties: false,
385
+ properties: {
386
+ args: argsJson,
387
+ crossLayerProps: _crossLayerPropsOpenApi(),
388
+ },
389
+ required: ['args'],
390
+ };
391
+ const output = (outputJson === null || outputJson === void 0 ? void 0 : outputJson.type) === 'object' && (outputJson === null || outputJson === void 0 ? void 0 : outputJson.properties)
392
+ ? outputJson.properties
393
+ : outputJson;
394
+ const description = (_a = schema.description) !== null && _a !== void 0 ? _a : (_b = _defOf(schema)) === null || _b === void 0 ? void 0 : _b.description;
395
+ return Object.assign(Object.assign({ name }, (description ? { description } : {})), { input: inputObject, output });
396
+ };
397
+ //# sourceMappingURL=libs.js.map
package/libs.js.map ADDED
@@ -0,0 +1 @@
1
+ {"version":3,"file":"libs.js","sourceRoot":"","sources":["../src/libs.ts"],"names":[],"mappings":"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"}
package/mcp.d.ts CHANGED
@@ -1,5 +1,4 @@
1
1
  import { Config } from '@node-in-layers/core';
2
- import { ToolNameGenerator } from 'functional-models-orm-mcp';
3
2
  import { McpServerMcp, McpServerConfig, McpContext } from './types.js';
4
3
  declare const create: (context: McpContext<McpServerConfig & Config>) => McpServerMcp;
5
4
  /**
@@ -8,171 +7,4 @@ declare const create: (context: McpContext<McpServerConfig & Config>) => McpServ
8
7
  * @param opts Options for the tool name generator.
9
8
  * @returns A function that can be used to add the models to the MCP server.
10
9
  */
11
- declare const mcpModels: <TConfig extends Readonly<{
12
- systemName: string;
13
- environment: string;
14
- "@node-in-layers/core": Readonly<{
15
- logging: {
16
- logLevel: import("@node-in-layers/core/types.js").LogLevelNames;
17
- logFormat: import("@node-in-layers/core/types.js").LogFormat | readonly import("@node-in-layers/core/types.js").LogFormat[];
18
- maxLogSizeInCharacters?: number | undefined;
19
- tcpLoggingOptions?: Readonly<{
20
- url: string;
21
- headers?: Record<string, string | object> | undefined;
22
- }> | undefined;
23
- customLogger?: Readonly<{
24
- getLogger: (context: Readonly<{
25
- config: Readonly<any>;
26
- rootLogger: Readonly<any>;
27
- constants: {
28
- environment: string;
29
- workingDirectory: string;
30
- runtimeId: string;
31
- };
32
- }>, props?: {
33
- ids?: readonly Readonly<Record<string, string>>[] | undefined;
34
- data?: Record<string, any> | undefined;
35
- } | undefined) => import("@node-in-layers/core/types.js").HighLevelLogger;
36
- }> | undefined;
37
- getFunctionWrapLogLevel?: ((layerName: string, functionName?: string | undefined) => import("@node-in-layers/core/types.js").LogLevelNames) | undefined;
38
- ignoreLayerFunctions?: Record<string, boolean | Record<string, boolean | Record<string, boolean>>> | undefined;
39
- };
40
- layerOrder: readonly import("@node-in-layers/core/types.js").LayerDescription[];
41
- apps: readonly Readonly<{
42
- name: string;
43
- services?: Readonly<{
44
- create: (context: any) => import("@node-in-layers/core/types.js").MaybePromise<object>;
45
- }> | undefined;
46
- features?: Readonly<{
47
- create: (context: any) => import("@node-in-layers/core/types.js").MaybePromise<object>;
48
- }> | undefined;
49
- globals?: Readonly<{
50
- create: (context: Readonly<{
51
- config: Readonly<any>;
52
- rootLogger: Readonly<{
53
- getLogger: (context: Readonly<{
54
- config: Readonly<any>;
55
- rootLogger: Readonly<any>;
56
- constants: {
57
- environment: string;
58
- workingDirectory: string;
59
- runtimeId: string;
60
- };
61
- }>, props?: {
62
- ids?: readonly Readonly<Record<string, string>>[] | undefined;
63
- data?: Record<string, any> | undefined;
64
- } | undefined) => import("@node-in-layers/core/types.js").HighLevelLogger;
65
- }>;
66
- constants: {
67
- environment: string;
68
- workingDirectory: string;
69
- runtimeId: string;
70
- };
71
- }>) => Promise<any>;
72
- }> | undefined;
73
- models?: Record<string, Readonly<{
74
- create: <T extends Readonly<{
75
- [s: string]: any;
76
- }>, TModelExtensions extends object = object, TModelInstanceExtensions extends object = object>(modelProps: Readonly<{
77
- Model: import("functional-models/types.js").ModelFactory<object, object>;
78
- fetcher: import("functional-models/types.js").ModelInstanceFetcher<object, object>;
79
- getModel: <T_1 extends Readonly<{
80
- [s: string]: any;
81
- }>>(namespace: string, modelName: string) => () => import("functional-models/types.js").ModelType<T_1, object, object>;
82
- }>) => import("functional-models/types.js").ModelType<T, TModelExtensions, TModelInstanceExtensions>;
83
- }>> | undefined;
84
- }>[];
85
- modelFactory?: string | undefined;
86
- modelCruds?: boolean | undefined;
87
- customModelFactory?: {
88
- [x: string]: {
89
- [x: string]: string | [string, string] | [string, string, any[]];
90
- };
91
- } | undefined;
92
- }>;
93
- }> = Readonly<{
94
- systemName: string;
95
- environment: string;
96
- "@node-in-layers/core": Readonly<{
97
- logging: {
98
- logLevel: import("@node-in-layers/core/types.js").LogLevelNames;
99
- logFormat: import("@node-in-layers/core/types.js").LogFormat | readonly import("@node-in-layers/core/types.js").LogFormat[];
100
- maxLogSizeInCharacters?: number | undefined;
101
- tcpLoggingOptions?: Readonly<{
102
- url: string;
103
- headers?: Record<string, string | object> | undefined;
104
- }> | undefined;
105
- customLogger?: Readonly<{
106
- getLogger: (context: Readonly<{
107
- config: Readonly<any>;
108
- rootLogger: Readonly<any>;
109
- constants: {
110
- environment: string;
111
- workingDirectory: string;
112
- runtimeId: string;
113
- };
114
- }>, props?: {
115
- ids?: readonly Readonly<Record<string, string>>[] | undefined;
116
- data?: Record<string, any> | undefined;
117
- } | undefined) => import("@node-in-layers/core/types.js").HighLevelLogger;
118
- }> | undefined;
119
- getFunctionWrapLogLevel?: ((layerName: string, functionName?: string | undefined) => import("@node-in-layers/core/types.js").LogLevelNames) | undefined;
120
- ignoreLayerFunctions?: Record<string, boolean | Record<string, boolean | Record<string, boolean>>> | undefined;
121
- };
122
- layerOrder: readonly import("@node-in-layers/core/types.js").LayerDescription[];
123
- apps: readonly Readonly<{
124
- name: string;
125
- services?: Readonly<{
126
- create: (context: any) => import("@node-in-layers/core/types.js").MaybePromise<object>;
127
- }> | undefined;
128
- features?: Readonly<{
129
- create: (context: any) => import("@node-in-layers/core/types.js").MaybePromise<object>;
130
- }> | undefined;
131
- globals?: Readonly<{
132
- create: (context: Readonly<{
133
- config: Readonly<any>;
134
- rootLogger: Readonly<{
135
- getLogger: (context: Readonly<{
136
- config: Readonly<any>;
137
- rootLogger: Readonly<any>;
138
- constants: {
139
- environment: string;
140
- workingDirectory: string;
141
- runtimeId: string;
142
- };
143
- }>, props?: {
144
- ids?: readonly Readonly<Record<string, string>>[] | undefined;
145
- data?: Record<string, any> | undefined;
146
- } | undefined) => import("@node-in-layers/core/types.js").HighLevelLogger;
147
- }>;
148
- constants: {
149
- environment: string;
150
- workingDirectory: string;
151
- runtimeId: string;
152
- };
153
- }>) => Promise<any>;
154
- }> | undefined;
155
- models?: Record<string, Readonly<{
156
- create: <T extends Readonly<{
157
- [s: string]: any;
158
- }>, TModelExtensions extends object = object, TModelInstanceExtensions extends object = object>(modelProps: Readonly<{
159
- Model: import("functional-models/types.js").ModelFactory<object, object>;
160
- fetcher: import("functional-models/types.js").ModelInstanceFetcher<object, object>;
161
- getModel: <T_1 extends Readonly<{
162
- [s: string]: any;
163
- }>>(namespace: string, modelName: string) => () => import("functional-models/types.js").ModelType<T_1, object, object>;
164
- }>) => import("functional-models/types.js").ModelType<T, TModelExtensions, TModelInstanceExtensions>;
165
- }>> | undefined;
166
- }>[];
167
- modelFactory?: string | undefined;
168
- modelCruds?: boolean | undefined;
169
- customModelFactory?: {
170
- [x: string]: {
171
- [x: string]: string | [string, string] | [string, string, any[]];
172
- };
173
- } | undefined;
174
- }>;
175
- }>>(namespace: string, context: McpContext<TConfig>, opts?: {
176
- nameGenerator: ToolNameGenerator;
177
- }) => {};
178
- export { create, mcpModels };
10
+ export { create };
package/mcp.js CHANGED
@@ -7,18 +7,48 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
7
7
  step((generator = generator.apply(thisArg, _arguments || [])).next());
8
8
  });
9
9
  };
10
- import get from 'lodash/get.js';
11
- import { createErrorObject, } from '@node-in-layers/core';
10
+ import { randomUUID } from 'crypto';
11
+ import { createErrorObject, isErrorObject, } from '@node-in-layers/core';
12
+ import { ValidationError } from 'functional-models';
13
+ import { createMcpToolBulkDelete, createMcpToolBulkInsert, createMcpToolDelete, createMcpToolRetrieve, createMcpToolSearch, createMcpToolSave, defaultModelTypeParser, } from 'functional-models-orm-mcp';
12
14
  import { createSimpleServer } from '@l4t/mcp-ai/simple-server/index.js';
13
- import { generateMcpToolForModelOperation, } from 'functional-models-orm-mcp';
14
- import { v4 as uuidv4 } from 'uuid';
15
15
  import { asyncMap } from 'modern-async';
16
16
  import { McpNamespace, } from './types.js';
17
- import { ValidationError } from 'functional-models';
17
+ import { describeFeatureMcpTool, listFeaturesMcpTool, describeModelMcpTool, listModelsMcpTool, listDomainsMcpTool, isNilAnnotatedFunction, nilAnnotatedFunctionToOpenApi, createOpenApiForNonNilAnnotatedFunction, } from './libs.js';
18
18
  const DEFAULT_RESPONSE_REQUEST_LOG_LEVEL = 'info';
19
+ const createMcpResponse = (result, opts) => {
20
+ const isError = (opts === null || opts === void 0 ? void 0 : opts.isError) || isErrorObject(result);
21
+ return Object.assign(Object.assign({}, (isError ? { isError: true } : {})), { content: [
22
+ {
23
+ type: 'text',
24
+ text: JSON.stringify(result !== undefined ? result : '""'),
25
+ },
26
+ ] });
27
+ };
28
+ const createDomainNotFoundError = () => createErrorObject('DOMAIN_NOT_FOUND', 'Domain not found');
29
+ const createModelNotFoundError = () => createErrorObject('MODEL_NOT_FOUND', 'Model not found');
30
+ const createFeatureNotFoundError = () => createErrorObject('FEATURE_NOT_FOUND', 'Feature not found');
31
+ const createModelsNotFoundError = () => createErrorObject('MODELS_NOT_FOUND', 'Models not found');
32
+ const isDomainHidden = (hiddenPaths) => (domain) => {
33
+ return hiddenPaths.has(domain);
34
+ };
35
+ const areAllModelsHidden = (hiddenPaths) => (domain) => {
36
+ return hiddenPaths.has(`${domain}.cruds`);
37
+ };
38
+ const isFeatureHidden = (hiddenPaths) => (domain, featureName) => {
39
+ return hiddenPaths.has(`${domain}.${featureName}`);
40
+ };
41
+ const isModelHidden = (hiddenPaths) => (domain, modelName) => {
42
+ return hiddenPaths.has(`${domain}.cruds.${modelName}`);
43
+ };
19
44
  const create = (context) => {
45
+ const hiddenPaths = new Set([
46
+ '@node-in-layers/core',
47
+ '@node-in-layers/data',
48
+ '@node-in-layers/mcp-server',
49
+ ...(context.config[McpNamespace].hiddenPaths || []),
50
+ ]);
20
51
  const tools = [];
21
- const models = [];
22
52
  const sets = [];
23
53
  const preRouteMiddleware = [];
24
54
  const additionalRoutes = [];
@@ -26,44 +56,14 @@ const create = (context) => {
26
56
  // eslint-disable-next-line functional/immutable-data
27
57
  tools.push(tool);
28
58
  };
29
- const addModelCruds = (cruds, opts) => {
30
- // eslint-disable-next-line functional/immutable-data
31
- models.push(..._createToolsForModelCruds(cruds, opts));
32
- };
33
- const _createToolsForModelCruds = (cruds, opts) => {
34
- const model = cruds.getModel();
35
- const tools = [
36
- Object.assign(Object.assign({}, generateMcpToolForModelOperation(model, 'save', opts)), { execute: _execute((input) => __awaiter(void 0, void 0, void 0, function* () {
37
- return cruds.create(input).then(x => x.toObj());
38
- })) }),
39
- Object.assign(Object.assign({}, generateMcpToolForModelOperation(model, 'retrieve', opts)), { execute: _execute(({ id }) => __awaiter(void 0, void 0, void 0, function* () {
40
- return cruds.retrieve(id).then(x => (x ? x.toObj() : null));
41
- })) }),
42
- Object.assign(Object.assign({}, generateMcpToolForModelOperation(model, 'delete', opts)), { execute: _execute(({ id }) => __awaiter(void 0, void 0, void 0, function* () {
43
- yield cruds.delete(id);
44
- })) }),
45
- Object.assign(Object.assign({}, generateMcpToolForModelOperation(model, 'search', opts)), { execute: _execute((input) => __awaiter(void 0, void 0, void 0, function* () {
46
- return cruds.search(input).then((result) => __awaiter(void 0, void 0, void 0, function* () {
47
- const instances = yield asyncMap(result.instances, y => y.toObj());
48
- return {
49
- instances,
50
- page: result.page,
51
- };
52
- }));
53
- })) }),
54
- Object.assign(Object.assign({}, generateMcpToolForModelOperation(model, 'bulkInsert', opts)), { execute: _execute((input) => __awaiter(void 0, void 0, void 0, function* () {
55
- yield cruds.bulkInsert(input.items);
56
- })) }),
57
- Object.assign(Object.assign({}, generateMcpToolForModelOperation(model, 'bulkDelete', opts)), { execute: _execute((input) => __awaiter(void 0, void 0, void 0, function* () {
58
- yield cruds.bulkDelete(input.ids);
59
- })) }),
60
- ];
61
- return tools;
62
- };
59
+ const isDomainHiddenFunc = isDomainHidden(hiddenPaths);
60
+ const areAllModelsHiddenFunc = areAllModelsHidden(hiddenPaths);
61
+ const isFeatureHiddenFunc = isFeatureHidden(hiddenPaths);
62
+ const isModelHiddenFunc = isModelHidden(hiddenPaths);
63
63
  const _wrapToolsWithLogger = (tool) => {
64
64
  const execute = (input) => __awaiter(void 0, void 0, void 0, function* () {
65
65
  var _a, _b, _c, _d, _e, _f;
66
- const requestId = uuidv4();
66
+ const requestId = randomUUID();
67
67
  const logger = context.log
68
68
  .getIdLogger('logRequest', 'requestId', requestId)
69
69
  .applyData({
@@ -86,8 +86,193 @@ const create = (context) => {
86
86
  });
87
87
  return Object.assign(Object.assign({}, tool), { execute });
88
88
  };
89
+ const _listDomainsTool = () => {
90
+ return Object.assign(Object.assign({}, listDomainsMcpTool()), { execute: _execute(() => __awaiter(void 0, void 0, void 0, function* () {
91
+ const domains = Object.entries(context.features).reduce((acc, [domainName]) => {
92
+ var _a;
93
+ if (isDomainHiddenFunc(domainName)) {
94
+ return acc;
95
+ }
96
+ const description = (_a = context.config['@node-in-layers/core'].apps.find(app => app.name === domainName)) === null || _a === void 0 ? void 0 : _a.description;
97
+ return acc.concat(Object.assign({ name: domainName }, (description ? { description } : {})));
98
+ }, []);
99
+ return createMcpResponse(domains);
100
+ })) });
101
+ };
102
+ const _describeFeatureTool = () => {
103
+ return Object.assign(Object.assign({}, describeFeatureMcpTool()), { execute: _execute((input) => __awaiter(void 0, void 0, void 0, function* () {
104
+ var _a;
105
+ const domain = input.domain;
106
+ const featureName = input.featureName;
107
+ const feature = (_a = context[domain]) === null || _a === void 0 ? void 0 : _a[featureName];
108
+ if (!feature ||
109
+ isDomainHiddenFunc(domain) ||
110
+ isFeatureHiddenFunc(domain, featureName)) {
111
+ return createFeatureNotFoundError();
112
+ }
113
+ const openapi = isNilAnnotatedFunction(feature)
114
+ ? nilAnnotatedFunctionToOpenApi(feature.name, feature)
115
+ : createOpenApiForNonNilAnnotatedFunction(feature.name);
116
+ return createMcpResponse(openapi);
117
+ })) });
118
+ };
119
+ const _listFeaturesTool = () => {
120
+ return Object.assign(Object.assign({}, listFeaturesMcpTool()), { execute: _execute((input) => __awaiter(void 0, void 0, void 0, function* () {
121
+ const domain = input.domain;
122
+ if (isDomainHiddenFunc(domain)) {
123
+ return createDomainNotFoundError();
124
+ }
125
+ const features = domain.features;
126
+ const result = Object.entries(features).reduce((acc, [featureName, feature]) => {
127
+ var _a;
128
+ if (typeof feature !== 'function') {
129
+ return acc;
130
+ }
131
+ if (isFeatureHiddenFunc(domain, featureName)) {
132
+ return acc;
133
+ }
134
+ const obj = Object.assign({ name: featureName }, (((_a = feature.schema) === null || _a === void 0 ? void 0 : _a.description)
135
+ ? // @ts-ignore
136
+ { description: feature.schema.description }
137
+ : {}));
138
+ return acc.concat(obj);
139
+ }, []);
140
+ return createMcpResponse(result);
141
+ })) });
142
+ };
143
+ const _listModelsTool = () => {
144
+ return Object.assign(Object.assign({}, listModelsMcpTool()), { execute: _execute((input) => __awaiter(void 0, void 0, void 0, function* () {
145
+ const domain = input.domain;
146
+ if (isDomainHiddenFunc(domain) || areAllModelsHiddenFunc(domain)) {
147
+ return createDomainNotFoundError();
148
+ }
149
+ const models = context.features[domain].cruds;
150
+ if (!models) {
151
+ return createMcpResponse(createModelsNotFoundError());
152
+ }
153
+ const result = Object.entries(models).reduce((acc, [modelName, model]) => {
154
+ if (isModelHiddenFunc(domain, modelName)) {
155
+ return acc;
156
+ }
157
+ const description = model
158
+ .getModel()
159
+ .getModelDefinition().description;
160
+ return acc.concat(Object.assign({ modelType: model.getModel().getName() }, (description ? { description } : {})));
161
+ }, []);
162
+ return createMcpResponse(result);
163
+ })) });
164
+ };
165
+ const _describeModelTool = () => {
166
+ return Object.assign(Object.assign({}, describeModelMcpTool()), { execute: _execute((input) => __awaiter(void 0, void 0, void 0, function* () {
167
+ const domain = input.domain;
168
+ if (isDomainHiddenFunc(domain)) {
169
+ return createDomainNotFoundError();
170
+ }
171
+ const { modelName } = defaultModelTypeParser(input.modelType);
172
+ const model = context.features[domain].cruds[modelName];
173
+ if (!model ||
174
+ isModelHiddenFunc(domain, modelName) ||
175
+ areAllModelsHiddenFunc(domain)) {
176
+ return createModelNotFoundError();
177
+ }
178
+ const schema = model.getModel().getModelDefinition().schema;
179
+ return createMcpResponse(schema);
180
+ })) });
181
+ };
182
+ const _createMcpModelFunc = (modelFunc) => __awaiter(void 0, void 0, void 0, function* () {
183
+ return _execute((input) => __awaiter(void 0, void 0, void 0, function* () {
184
+ const modelType = input.modelType;
185
+ const { domain, modelName } = defaultModelTypeParser(modelType);
186
+ if (isDomainHiddenFunc(domain)) {
187
+ return createDomainNotFoundError();
188
+ }
189
+ const model = context.features[domain].cruds[modelName];
190
+ if (!model ||
191
+ isModelHiddenFunc(domain, modelName) ||
192
+ areAllModelsHiddenFunc(domain)) {
193
+ return createModelNotFoundError();
194
+ }
195
+ const result = yield modelFunc(input, model.getModel()).catch(e => {
196
+ if (e instanceof ValidationError) {
197
+ return createErrorObject('VALIDATION_ERROR', 'Validation Error', {
198
+ details: {
199
+ keysToErrors: e.keysToErrors,
200
+ modelName: e.modelName,
201
+ },
202
+ });
203
+ }
204
+ return createErrorObject('UNCAUGHT_EXCEPTION', 'An uncaught exception occurred while executing the feature.', e);
205
+ });
206
+ if (isErrorObject(result)) {
207
+ return createMcpResponse(result, { isError: true });
208
+ }
209
+ return createMcpResponse(result);
210
+ }));
211
+ });
212
+ const _createMcpToolSave = () => {
213
+ return Object.assign(Object.assign({}, createMcpToolSave()), { execute: _createMcpModelFunc((input, model) => __awaiter(void 0, void 0, void 0, function* () {
214
+ const data = input.instance;
215
+ const result = yield model.save(data).catch(e => {
216
+ if (e instanceof ValidationError) {
217
+ return createErrorObject('VALIDATION_ERROR', 'Validation Error', e);
218
+ }
219
+ return createErrorObject('UNCAUGHT_EXCEPTION', 'An uncaught exception occurred while executing the feature.', e);
220
+ });
221
+ if (isErrorObject(result)) {
222
+ return result;
223
+ }
224
+ return result.toObj();
225
+ })) });
226
+ };
227
+ const _createMcpToolRetrieve = () => {
228
+ return Object.assign(Object.assign({}, createMcpToolRetrieve()), { execute: _createMcpModelFunc((input, model) => __awaiter(void 0, void 0, void 0, function* () {
229
+ const result = yield model.retrieve(input.id);
230
+ if (!result) {
231
+ return createModelNotFoundError();
232
+ }
233
+ return result.toObj();
234
+ })) });
235
+ };
236
+ const _createMcpToolDelete = () => {
237
+ return Object.assign(Object.assign({}, createMcpToolDelete()), { execute: _createMcpModelFunc((input, model) => __awaiter(void 0, void 0, void 0, function* () {
238
+ yield model.delete(input.id);
239
+ return null;
240
+ })) });
241
+ };
242
+ const _createMcpToolSearch = () => {
243
+ return Object.assign(Object.assign({}, createMcpToolSearch()), { execute: _createMcpModelFunc((input, model) => __awaiter(void 0, void 0, void 0, function* () {
244
+ const result = yield model.search(input.query);
245
+ const instances = yield asyncMap(result.instances, i => i.toObj());
246
+ return { instances, page: result.page };
247
+ })) });
248
+ };
249
+ const _createMcpToolBulkInsert = () => {
250
+ return Object.assign(Object.assign({}, createMcpToolBulkInsert()), { execute: _createMcpModelFunc((input, model) => __awaiter(void 0, void 0, void 0, function* () {
251
+ yield model.bulkInsert(input.items);
252
+ return null;
253
+ })) });
254
+ };
255
+ const _createMcpToolBulkDelete = () => {
256
+ return Object.assign(Object.assign({}, createMcpToolBulkDelete()), { execute: _createMcpModelFunc((input, model) => __awaiter(void 0, void 0, void 0, function* () {
257
+ yield model.bulkDelete(input.ids);
258
+ return null;
259
+ })) });
260
+ };
89
261
  const _getServer = (options) => {
90
- const allTools = [...tools, ...models].map(_wrapToolsWithLogger);
262
+ const allTools = [
263
+ _listDomainsTool(),
264
+ _listFeaturesTool(),
265
+ _describeFeatureTool(),
266
+ _listModelsTool(),
267
+ _describeModelTool(),
268
+ _createMcpToolSave(),
269
+ _createMcpToolRetrieve(),
270
+ _createMcpToolDelete(),
271
+ _createMcpToolSearch(),
272
+ _createMcpToolBulkInsert(),
273
+ _createMcpToolBulkDelete(),
274
+ ...tools,
275
+ ].map(_wrapToolsWithLogger);
91
276
  const server = createSimpleServer({
92
277
  name: context.config[McpNamespace].name || '@node-in-layers/mcp-server',
93
278
  version: context.config[McpNamespace].version || '1.0.0',
@@ -129,80 +314,28 @@ const create = (context) => {
129
314
  };
130
315
  const _formatResponse = (result) => {
131
316
  if (result !== null && result !== undefined) {
132
- if (typeof result === 'object' && 'error' in result) {
133
- return {
134
- content: [
135
- {
136
- type: 'text',
137
- text: JSON.stringify(result),
138
- },
139
- ],
140
- };
317
+ if (isErrorObject(result)) {
318
+ return createMcpResponse(result, { isError: true });
141
319
  }
142
320
  }
143
- return {
144
- content: [
145
- {
146
- type: 'text',
147
- text: result ? JSON.stringify(result) : '\"\"',
148
- },
149
- ],
150
- };
321
+ return createMcpResponse(result);
151
322
  };
152
323
  const _execute = (func) => (...inputs) => {
153
324
  return func(...inputs)
154
325
  .then(_formatResponse)
155
326
  .catch(error => {
156
- if (error instanceof ValidationError) {
157
- return {
158
- isError: true,
159
- content: [
160
- {
161
- type: 'text',
162
- text: JSON.stringify({
163
- error: {
164
- code: 'VALIDATION_ERROR',
165
- message: 'Validation Error',
166
- details: {
167
- keysToErrors: error.keysToErrors,
168
- modelName: error.modelName,
169
- },
170
- },
171
- }),
172
- },
173
- ],
174
- };
175
- }
176
- const errorObj = createErrorObject('UNCAUGHT_EXCEPTION', 'An uncaught exception occurred while executing the feature.', error);
177
- return {
178
- isError: true,
179
- content: [
180
- {
181
- type: 'text',
182
- text: JSON.stringify(errorObj),
183
- },
184
- ],
185
- };
327
+ return _formatResponse(createErrorObject('UNCAUGHT_EXCEPTION', 'An uncaught exception occurred while executing the feature.', error));
186
328
  });
187
329
  };
188
- const addFeature = (featureFunc, tool) => {
189
- // eslint-disable-next-line functional/immutable-data
190
- tools.push(Object.assign(Object.assign({}, tool), { execute: _execute((input, crossLayerProps) => {
191
- return featureFunc(
192
- // @ts-ignore
193
- ...(Array.isArray(input) ? input : [input]).concat(crossLayerProps));
194
- }) }));
195
- };
196
330
  const set = (key, value) => {
331
+ // eslint-disable-next-line functional/immutable-data
197
332
  sets.push([key, value]);
198
333
  };
199
334
  return {
200
335
  start,
201
336
  getApp,
202
337
  addTool,
203
- addModelCruds,
204
338
  addPreRouteMiddleware,
205
- addFeature,
206
339
  addAdditionalRoute,
207
340
  set,
208
341
  };
@@ -213,23 +346,36 @@ const create = (context) => {
213
346
  * @param opts Options for the tool name generator.
214
347
  * @returns A function that can be used to add the models to the MCP server.
215
348
  */
216
- const mcpModels = (namespace, context, opts) => {
217
- const mcpFunctions = context.mcp[McpNamespace];
218
- const namedFeatures = get(context, `features.${namespace}`);
219
- if (!namedFeatures) {
220
- throw new Error(`features.${namespace} does not exist on context needed for mcp.`);
221
- }
222
- // Look for CRUDS functions.
223
- Object.entries(namedFeatures).forEach(([key, value]) => {
224
- if (typeof value === 'object') {
225
- if (key === 'cruds') {
226
- Object.entries(value).forEach(([, modelCrudFuncs]) => {
227
- mcpFunctions.addModelCruds(modelCrudFuncs, opts);
228
- });
229
- }
349
+ /*
350
+ const mcpModels = <TConfig extends Config = Config>(
351
+ namespace: string,
352
+ context: McpContext<TConfig>
353
+ ) => {
354
+ const mcpFunctions = context.mcp[McpNamespace]
355
+ const namedFeatures = get(context, `features.${namespace}`)
356
+ if (!namedFeatures) {
357
+ throw new Error(
358
+ `features.${namespace} does not exist on context needed for mcp.`
359
+ )
360
+ }
361
+ // Look for CRUDS functions.
362
+ Object.entries(namedFeatures).forEach(
363
+ ([key, value]: [key: string, value: any]) => {
364
+ if (typeof value === 'object') {
365
+ if (key === 'cruds') {
366
+ Object.entries(value).forEach(([, modelCrudFuncs]) => {
367
+ mcpFunctions.addModelCruds(
368
+ modelCrudFuncs as ModelCrudsFunctions<any>
369
+ )
370
+ })
230
371
  }
231
- }, {});
232
- return {};
233
- };
234
- export { create, mcpModels };
372
+ }
373
+ },
374
+ {}
375
+ )
376
+
377
+ return {}
378
+ }
379
+ */
380
+ export { create };
235
381
  //# sourceMappingURL=mcp.js.map
package/mcp.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"mcp.js","sourceRoot":"","sources":["../src/mcp.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"mcp.js","sourceRoot":"","sources":["../src/mcp.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@node-in-layers/mcp-server",
3
3
  "type": "module",
4
- "version": "1.6.0",
4
+ "version": "2.0.0",
5
5
  "description": "An MCP Server Node In Layers Package, generated by the Node In Layers Toolkit.",
6
6
  "main": "index.js",
7
7
  "scripts": {
@@ -10,10 +10,10 @@
10
10
  "commit": "cz",
11
11
  "dist": "npm run build && cd dist && npm publish",
12
12
  "eslint": "eslint .",
13
- "feature-tests": "./node_modules/.bin/cucumber-js -p default",
14
13
  "prettier": "prettier --write .",
15
- "test": "export TS_NODE_TRANSPILE_ONLY=true && export TS_NODE_PROJECT='./tsconfig.test.json' && mocha -r ts-node/register 'test/**/*.test.ts'",
16
- "test:coverage": "nyc --all --reporter cobertura --reporter text --reporter lcov --reporter html npm run test"
14
+ "test": "mocha -r tsx ./test/src/*.test.ts ./test/mocha/src/**/*.test.ts ./test/mocha/src/**/**/*.test.ts",
15
+ "test:coverage": "c8 --all --reporter cobertura --reporter text --reporter lcov --reporter html npm run test",
16
+ "test:features": "./node_modules/.bin/cucumber-js -p default"
17
17
  },
18
18
  "config": {
19
19
  "commitizen": {
@@ -23,7 +23,7 @@
23
23
  "author": "",
24
24
  "license": "ISC",
25
25
  "devDependencies": {
26
- "@cucumber/cucumber": "11.0.1",
26
+ "@cucumber/cucumber": "^11.3.0",
27
27
  "@eslint/compat": "^1.2.0",
28
28
  "@eslint/eslintrc": "^3.1.0",
29
29
  "@eslint/js": "^9.12.0",
@@ -38,6 +38,7 @@
38
38
  "@typescript-eslint/eslint-plugin": "8.13.0",
39
39
  "@typescript-eslint/parser": "8.13.0",
40
40
  "argparse": "^2.0.1",
41
+ "c8": "^10.1.3",
41
42
  "chai": "^4.2.0",
42
43
  "chai-as-promised": "^7.1.1",
43
44
  "cz-conventional-changelog": "^3.3.0",
@@ -58,17 +59,20 @@
58
59
  "sinon-chai": "^3.5.0",
59
60
  "source-map-support": "^0.5.21",
60
61
  "ts-node": "^10.4.0",
62
+ "tsx": "^4.20.6",
61
63
  "typescript": "5.3.3"
62
64
  },
63
65
  "dependencies": {
64
66
  "@l4t/mcp-ai": "^1.5.1",
65
67
  "@modelcontextprotocol/sdk": "^1.13.2",
66
- "@node-in-layers/core": "^1.7.0",
68
+ "@node-in-layers/core": "^1.9.1",
67
69
  "express": "^5.1.0",
68
- "functional-models": "^3.0.16",
69
- "functional-models-orm-mcp": "^3.2.0",
70
+ "functional-models": "^3.5.1",
71
+ "functional-models-openapi": "^3.0.2",
72
+ "functional-models-orm-mcp": "^3.5.2",
70
73
  "lodash": "^4.17.21",
71
74
  "modern-async": "^2.0.4",
72
- "uuid": "^11.1.0"
75
+ "uuid": "^11.1.0",
76
+ "zod": "^4.1.11"
73
77
  }
74
78
  }
package/types.d.ts CHANGED
@@ -1,23 +1,65 @@
1
- import { ExpressRoute, ExpressMiddleware, McpTool } from '@l4t/mcp-ai/common/types.js';
1
+ import { ExpressRoute, ExpressMiddleware } from '@l4t/mcp-ai/common/types.js';
2
2
  import { ServerTool } from '@l4t/mcp-ai/simple-server/types.js';
3
3
  import { ServerHttpConfig, ServerCliConfig, ServerSseConfig, ServerStatelessHttpConfig } from '@l4t/mcp-ai';
4
- import { Config, CommonContext, LogLevelNames, LayerContext, ModelCrudsFunctions, Response } from '@node-in-layers/core';
4
+ import { Config, LogLevelNames, LayerContext } from '@node-in-layers/core';
5
5
  import { Express } from 'express';
6
- import { ToolNameGenerator } from 'functional-models-orm-mcp';
7
6
  import { JsonAble } from 'functional-models';
8
7
  type Connection = ServerHttpConfig | ServerCliConfig | ServerSseConfig | ServerStatelessHttpConfig;
8
+ /**
9
+ * Configuration for the MCP server.
10
+ * @interface
11
+ */
9
12
  export type McpServerConfig = Readonly<{
10
13
  [McpNamespace]: {
14
+ /**
15
+ * The name of the MCP server.
16
+ */
11
17
  name?: string;
18
+ /**
19
+ * The version of the MCP server.
20
+ */
12
21
  version?: string;
22
+ /**
23
+ * Whether the MCP server is stateless.
24
+ */
13
25
  stateless?: boolean;
26
+ /**
27
+ * The server configuration.
28
+ */
14
29
  server: {
30
+ /**
31
+ * Connection configuration.
32
+ */
15
33
  connection: Connection;
16
34
  };
35
+ /**
36
+ * Dot paths, to hide from the server.
37
+ * Example:
38
+ * myDomain - hides an entire domain.
39
+ * myDomain.myFeature - hides a feature.
40
+ * myDomain.cruds - hides ALL models of the domain
41
+ * myDomain.cruds.MyModel - hides a specific model
42
+ */
43
+ hiddenPaths?: string[];
44
+ /**
45
+ * Logging configuration.
46
+ */
17
47
  logging?: {
48
+ /**
49
+ * The log level for requests.
50
+ */
18
51
  requestLogLevel?: LogLevelNames;
52
+ /**
53
+ * The log level for responses.
54
+ */
19
55
  responseLogLevel?: LogLevelNames;
56
+ /**
57
+ * The data to get for requests.
58
+ */
20
59
  requestLogGetData?: (req: Request) => Record<string, any>;
60
+ /**
61
+ * The data to get for responses.
62
+ */
21
63
  responseLogGetData?: (req: Request) => Record<string, any>;
22
64
  };
23
65
  };
@@ -28,11 +70,7 @@ export type McpServerMcp = Readonly<{
28
70
  addTool: (tool: ServerTool) => void;
29
71
  getApp: (options?: AppOptions) => Express;
30
72
  set: (key: string, value: any) => void;
31
- addModelCruds: (modelCruds: ModelCrudsFunctions<any>, opts?: {
32
- nameGenerator: ToolNameGenerator;
33
- }) => void;
34
73
  addPreRouteMiddleware: (middleware: ExpressMiddleware) => void;
35
- addFeature: <T extends object = object, R extends JsonAble | void = void>(featureFunc: (input: T) => Promise<Response<R>>, tool: McpTool) => void;
36
74
  addAdditionalRoute: (route: ExpressRoute) => void;
37
75
  }>;
38
76
  export type McpServerMcpLayer = Readonly<{
@@ -47,5 +85,11 @@ export type AppOptions = Readonly<{
47
85
  export type McpContext<TConfig extends Config = Config, TFeatures extends object = object, TMcpLayer extends object = object> = LayerContext<TConfig, {
48
86
  features: TFeatures;
49
87
  mcp: McpServerMcpLayer & TMcpLayer;
50
- }> & CommonContext<TConfig>;
88
+ }>;
89
+ export type OpenApiFunctionDescription = Readonly<{
90
+ name: string;
91
+ description?: string;
92
+ input: Record<string, JsonAble>;
93
+ output: Record<string, JsonAble>;
94
+ }>;
51
95
  export {};
package/types.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AA+CA,MAAM,CAAC,MAAM,YAAY,GAAG,4BAA4B,CAAA"}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AA8EA,MAAM,CAAC,MAAM,YAAY,GAAG,4BAA4B,CAAA"}