jxp 4.2.0 → 5.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 (87) hide show
  1. package/.env.sample +16 -0
  2. package/README.md +2 -0
  3. package/dist/bin/mcp-stdio-bridge.d.ts +3 -0
  4. package/dist/bin/mcp-stdio-bridge.d.ts.map +1 -0
  5. package/dist/bin/mcp-stdio-bridge.js +87 -0
  6. package/dist/bin/mcp-stdio-bridge.js.map +1 -0
  7. package/dist/bin/server.d.ts.map +1 -1
  8. package/dist/bin/server.js +2 -1
  9. package/dist/bin/server.js.map +1 -1
  10. package/dist/libs/docs-auth.d.ts.map +1 -1
  11. package/dist/libs/docs-auth.js +4 -2
  12. package/dist/libs/docs-auth.js.map +1 -1
  13. package/dist/libs/docs.js +73 -42
  14. package/dist/libs/docs.js.map +1 -1
  15. package/dist/libs/jxp.d.ts.map +1 -1
  16. package/dist/libs/jxp.js +16 -319
  17. package/dist/libs/jxp.js.map +1 -1
  18. package/dist/libs/mcp/auth.d.ts +4 -0
  19. package/dist/libs/mcp/auth.d.ts.map +1 -0
  20. package/dist/libs/mcp/auth.js +49 -0
  21. package/dist/libs/mcp/auth.js.map +1 -0
  22. package/dist/libs/mcp/config.d.ts +21 -0
  23. package/dist/libs/mcp/config.d.ts.map +1 -0
  24. package/dist/libs/mcp/config.js +66 -0
  25. package/dist/libs/mcp/config.js.map +1 -0
  26. package/dist/libs/mcp/context.d.ts +5 -0
  27. package/dist/libs/mcp/context.d.ts.map +1 -0
  28. package/dist/libs/mcp/context.js +14 -0
  29. package/dist/libs/mcp/context.js.map +1 -0
  30. package/dist/libs/mcp/describe.d.ts +13 -0
  31. package/dist/libs/mcp/describe.d.ts.map +1 -0
  32. package/dist/libs/mcp/describe.js +36 -0
  33. package/dist/libs/mcp/describe.js.map +1 -0
  34. package/dist/libs/mcp/docs_auth.d.ts +5 -0
  35. package/dist/libs/mcp/docs_auth.d.ts.map +1 -0
  36. package/dist/libs/mcp/docs_auth.js +36 -0
  37. package/dist/libs/mcp/docs_auth.js.map +1 -0
  38. package/dist/libs/mcp/dynamic_import.d.ts +6 -0
  39. package/dist/libs/mcp/dynamic_import.d.ts.map +1 -0
  40. package/dist/libs/mcp/dynamic_import.js +12 -0
  41. package/dist/libs/mcp/dynamic_import.js.map +1 -0
  42. package/dist/libs/mcp/execute_tool.d.ts +10 -0
  43. package/dist/libs/mcp/execute_tool.d.ts.map +1 -0
  44. package/dist/libs/mcp/execute_tool.js +65 -0
  45. package/dist/libs/mcp/execute_tool.js.map +1 -0
  46. package/dist/libs/mcp/guides/default.md +67 -0
  47. package/dist/libs/mcp/guides.d.ts +14 -0
  48. package/dist/libs/mcp/guides.d.ts.map +1 -0
  49. package/dist/libs/mcp/guides.js +127 -0
  50. package/dist/libs/mcp/guides.js.map +1 -0
  51. package/dist/libs/mcp/model_visibility.d.ts +31 -0
  52. package/dist/libs/mcp/model_visibility.d.ts.map +1 -0
  53. package/dist/libs/mcp/model_visibility.js +73 -0
  54. package/dist/libs/mcp/model_visibility.js.map +1 -0
  55. package/dist/libs/mcp/mount.d.ts +10 -0
  56. package/dist/libs/mcp/mount.d.ts.map +1 -0
  57. package/dist/libs/mcp/mount.js +68 -0
  58. package/dist/libs/mcp/mount.js.map +1 -0
  59. package/dist/libs/mcp/read_service.d.ts +23 -0
  60. package/dist/libs/mcp/read_service.d.ts.map +1 -0
  61. package/dist/libs/mcp/read_service.js +141 -0
  62. package/dist/libs/mcp/read_service.js.map +1 -0
  63. package/dist/libs/mcp/server.d.ts +23 -0
  64. package/dist/libs/mcp/server.d.ts.map +1 -0
  65. package/dist/libs/mcp/server.js +111 -0
  66. package/dist/libs/mcp/server.js.map +1 -0
  67. package/dist/libs/read_handlers.d.ts +13 -0
  68. package/dist/libs/read_handlers.d.ts.map +1 -0
  69. package/dist/libs/read_handlers.js +381 -0
  70. package/dist/libs/read_handlers.js.map +1 -0
  71. package/dist/libs/schema_serialize.d.ts +3 -0
  72. package/dist/libs/schema_serialize.d.ts.map +1 -0
  73. package/dist/libs/schema_serialize.js +45 -0
  74. package/dist/libs/schema_serialize.js.map +1 -0
  75. package/dist/types/jxp-config.d.ts +7 -0
  76. package/dist/types/jxp-config.d.ts.map +1 -1
  77. package/docs/changelog.md +35 -0
  78. package/docs/index.md +1 -0
  79. package/docs/mcp.md +134 -0
  80. package/mkdocs.yml +1 -0
  81. package/package.json +11 -5
  82. package/templates/assets/docs.css +107 -0
  83. package/templates/assets/mcp-console.js +343 -0
  84. package/templates/index.pug +37 -0
  85. package/templates/mcp.pug +112 -0
  86. package/templates/navbar.pug +2 -0
  87. package/templates/sidebar.pug +4 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"guides.js","sourceRoot":"","sources":["../../../src/libs/mcp/guides.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,31 @@
1
+ import type { Model } from "mongoose";
2
+ import type { ModelRegistry } from "../builtin_models";
3
+ import type { McpConfig } from "./config";
4
+ export interface McpAuthUser {
5
+ _id: unknown;
6
+ email?: string;
7
+ name?: string;
8
+ admin?: boolean;
9
+ }
10
+ export interface McpAuthContext {
11
+ user: McpAuthUser | null;
12
+ groups: string[];
13
+ }
14
+ export declare function isDefaultHiddenModel(slug: string, model: Model<unknown>, config: McpConfig): boolean;
15
+ export declare function isVisibilityOverridden(slug: string, config: McpConfig): boolean;
16
+ export declare function isBlacklisted(slug: string, config: McpConfig): boolean;
17
+ export declare function canReadModel(auth: McpAuthContext, model: Model<unknown>, itemId?: string): Promise<boolean>;
18
+ /**
19
+ * Whether a model should appear in MCP list/describe and accept read tools.
20
+ * Whitelist overrides default-hidden only; never grants read permission.
21
+ */
22
+ export declare function isModelVisibleMcp(slug: string, model: Model<unknown>, auth: McpAuthContext, config: McpConfig, itemId?: string): Promise<boolean>;
23
+ export declare function assertModelVisibleMcp(slug: string, model: Model<unknown>, auth: McpAuthContext, config: McpConfig, itemId?: string): Promise<void>;
24
+ export declare function listVisibleModels(models: ModelRegistry, auth: McpAuthContext, config: McpConfig): Promise<{
25
+ slug: string;
26
+ collection: string;
27
+ permissions: {
28
+ read: boolean;
29
+ };
30
+ }[]>;
31
+ //# sourceMappingURL=model_visibility.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"model_visibility.d.ts","sourceRoot":"","sources":["../../../src/libs/mcp/model_visibility.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,UAAU,CAAC;AACtC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAEvD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAI1C,MAAM,WAAW,WAAW;IAC3B,GAAG,EAAE,OAAO,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,OAAO,CAAC;CAChB;AAED,MAAM,WAAW,cAAc;IAC9B,IAAI,EAAE,WAAW,GAAG,IAAI,CAAC;IACzB,MAAM,EAAE,MAAM,EAAE,CAAC;CACjB;AAED,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,CAAC,OAAO,CAAC,EAAE,MAAM,EAAE,SAAS,GAAG,OAAO,CAGpG;AAED,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,GAAG,OAAO,CAE/E;AAED,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,GAAG,OAAO,CAEtE;AAED,wBAAsB,YAAY,CACjC,IAAI,EAAE,cAAc,EACpB,KAAK,EAAE,KAAK,CAAC,OAAO,CAAC,EACrB,MAAM,CAAC,EAAE,MAAM,GACb,OAAO,CAAC,OAAO,CAAC,CAOlB;AAED;;;GAGG;AACH,wBAAsB,iBAAiB,CACtC,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,KAAK,CAAC,OAAO,CAAC,EACrB,IAAI,EAAE,cAAc,EACpB,MAAM,EAAE,SAAS,EACjB,MAAM,CAAC,EAAE,MAAM,GACb,OAAO,CAAC,OAAO,CAAC,CAOlB;AAED,wBAAsB,qBAAqB,CAC1C,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,KAAK,CAAC,OAAO,CAAC,EACrB,IAAI,EAAE,cAAc,EACpB,MAAM,EAAE,SAAS,EACjB,MAAM,CAAC,EAAE,MAAM,GACb,OAAO,CAAC,IAAI,CAAC,CAWf;AAED,wBAAsB,iBAAiB,CACtC,MAAM,EAAE,aAAa,EACrB,IAAI,EAAE,cAAc,EACpB,MAAM,EAAE,SAAS,GACf,OAAO,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE;QAAE,IAAI,EAAE,OAAO,CAAA;KAAE,CAAA;CAAE,EAAE,CAAC,CAcjF"}
@@ -0,0 +1,73 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.isDefaultHiddenModel = isDefaultHiddenModel;
4
+ exports.isVisibilityOverridden = isVisibilityOverridden;
5
+ exports.isBlacklisted = isBlacklisted;
6
+ exports.canReadModel = canReadModel;
7
+ exports.isModelVisibleMcp = isModelVisibleMcp;
8
+ exports.assertModelVisibleMcp = assertModelVisibleMcp;
9
+ exports.listVisibleModels = listVisibleModels;
10
+ const builtin_models_1 = require("../builtin_models");
11
+ const security = require("../security");
12
+ function isDefaultHiddenModel(slug, model, config) {
13
+ if ((0, builtin_models_1.isInternalModel)(model))
14
+ return true;
15
+ return config.defaultHiddenModels.has(slug.toLowerCase());
16
+ }
17
+ function isVisibilityOverridden(slug, config) {
18
+ return config.modelWhitelist.has(slug.toLowerCase());
19
+ }
20
+ function isBlacklisted(slug, config) {
21
+ return config.modelBlacklist.has(slug.toLowerCase());
22
+ }
23
+ async function canReadModel(auth, model, itemId) {
24
+ try {
25
+ await security.check_perms(auth.user, auth.groups, model, "r", itemId);
26
+ return true;
27
+ }
28
+ catch {
29
+ return false;
30
+ }
31
+ }
32
+ /**
33
+ * Whether a model should appear in MCP list/describe and accept read tools.
34
+ * Whitelist overrides default-hidden only; never grants read permission.
35
+ */
36
+ async function isModelVisibleMcp(slug, model, auth, config, itemId) {
37
+ if (!(await canReadModel(auth, model, itemId)))
38
+ return false;
39
+ if (isBlacklisted(slug, config))
40
+ return false;
41
+ if (isDefaultHiddenModel(slug, model, config) && !isVisibilityOverridden(slug, config)) {
42
+ return false;
43
+ }
44
+ return true;
45
+ }
46
+ async function assertModelVisibleMcp(slug, model, auth, config, itemId) {
47
+ const errors = require("restify-errors");
48
+ if (!(await canReadModel(auth, model, itemId))) {
49
+ throw new errors.ForbiddenError(`No read access to model "${slug}"`);
50
+ }
51
+ if (isBlacklisted(slug, config)) {
52
+ throw new errors.ForbiddenError(`Model "${slug}" is not available via MCP`);
53
+ }
54
+ if (isDefaultHiddenModel(slug, model, config) && !isVisibilityOverridden(slug, config)) {
55
+ throw new errors.NotFoundError(`Model "${slug}" not found`);
56
+ }
57
+ }
58
+ async function listVisibleModels(models, auth, config) {
59
+ const slugs = Object.keys(models).sort();
60
+ const out = [];
61
+ for (const slug of slugs) {
62
+ const model = models[slug];
63
+ if (await isModelVisibleMcp(slug, model, auth, config)) {
64
+ out.push({
65
+ slug,
66
+ collection: model.collection.name,
67
+ permissions: { read: true },
68
+ });
69
+ }
70
+ }
71
+ return out;
72
+ }
73
+ //# sourceMappingURL=model_visibility.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"model_visibility.js","sourceRoot":"","sources":["../../../src/libs/mcp/model_visibility.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ import type { Server } from "restify";
2
+ import type { JXPConfig } from "../../types/jxp-config";
3
+ import type { ModelRegistry } from "../builtin_models";
4
+ import { isMcpEnabled } from "./config";
5
+ export declare function mountMcp(server: Server, opts: {
6
+ config: JXPConfig;
7
+ models: ModelRegistry;
8
+ }): void;
9
+ export { isMcpEnabled };
10
+ //# sourceMappingURL=mount.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mount.d.ts","sourceRoot":"","sources":["../../../src/libs/mcp/mount.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AAEtC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AACvD,OAAO,EAAgB,YAAY,EAAE,MAAM,UAAU,CAAC;AAgEtD,wBAAgB,QAAQ,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE;IAAE,MAAM,EAAE,SAAS,CAAC;IAAC,MAAM,EAAE,aAAa,CAAA;CAAE,GAAG,IAAI,CAwBjG;AAED,OAAO,EAAE,YAAY,EAAE,CAAC"}
@@ -0,0 +1,68 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.isMcpEnabled = void 0;
4
+ exports.mountMcp = mountMcp;
5
+ const config_1 = require("./config");
6
+ Object.defineProperty(exports, "isMcpEnabled", { enumerable: true, get: function () { return config_1.isMcpEnabled; } });
7
+ const auth_1 = require("./auth");
8
+ const context_1 = require("./context");
9
+ const server_1 = require("./server");
10
+ const dynamic_import_1 = require("./dynamic_import");
11
+ let serverPromise = null;
12
+ let nodeTransportModule = null;
13
+ async function getMcpServer(config, models) {
14
+ if (!serverPromise) {
15
+ serverPromise = (0, server_1.createMcpServer)(config, models);
16
+ }
17
+ return serverPromise;
18
+ }
19
+ async function createStatelessTransport() {
20
+ if (!nodeTransportModule) {
21
+ nodeTransportModule = (0, dynamic_import_1.dynamicImport)("@modelcontextprotocol/node");
22
+ }
23
+ const { NodeStreamableHTTPServerTransport } = await nodeTransportModule;
24
+ return new NodeStreamableHTTPServerTransport({ sessionIdGenerator: undefined });
25
+ }
26
+ async function handleMcpRequest(req, res, parsedBody, config, models) {
27
+ const mcpConfig = (0, config_1.getMcpConfig)();
28
+ let auth;
29
+ try {
30
+ auth = await (0, auth_1.authenticateMcpRequest)(req, mcpConfig.requireApiKey);
31
+ }
32
+ catch (err) {
33
+ const status = err.statusCode || 401;
34
+ res.writeHead(status, { "Content-Type": "application/json" });
35
+ res.end(JSON.stringify({ error: err.message || String(err) }));
36
+ return;
37
+ }
38
+ const mcpServer = await getMcpServer(config, models);
39
+ const transport = await createStatelessTransport();
40
+ await mcpServer.connect(transport);
41
+ await context_1.mcpAuthStorage.run(auth, async () => {
42
+ await transport.handleRequest(req, res, parsedBody);
43
+ });
44
+ }
45
+ function mountMcp(server, opts) {
46
+ if (!(0, config_1.isMcpEnabled)()) {
47
+ return;
48
+ }
49
+ const mcpPath = (0, config_1.getMcpConfig)().path;
50
+ console.log(new Date(), `MCP enabled at ${mcpPath}`);
51
+ const handler = async (req, res) => {
52
+ try {
53
+ const nodeReq = req;
54
+ const nodeRes = res;
55
+ await handleMcpRequest(nodeReq, nodeRes, req.body, opts.config, opts.models);
56
+ }
57
+ catch (err) {
58
+ const message = err instanceof Error ? err.message : String(err);
59
+ if (!res.headersSent) {
60
+ res.writeHead(500, { "Content-Type": "application/json" });
61
+ res.end(JSON.stringify({ error: message }));
62
+ }
63
+ }
64
+ };
65
+ server.get(mcpPath, handler);
66
+ server.post(mcpPath, handler);
67
+ }
68
+ //# sourceMappingURL=mount.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mount.js","sourceRoot":"","sources":["../../../src/libs/mcp/mount.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,23 @@
1
+ import type { JXPConfig } from "../../types/jxp-config";
2
+ import type { ModelRegistry } from "../builtin_models";
3
+ import { type McpAuthContext } from "./model_visibility";
4
+ export interface FindParams {
5
+ model: string;
6
+ id?: string;
7
+ filter?: Record<string, unknown>;
8
+ search?: string | Record<string, unknown>;
9
+ populate?: string | Record<string, string>;
10
+ fields?: string;
11
+ sort?: string;
12
+ limit?: number;
13
+ page?: number;
14
+ skip?: number;
15
+ }
16
+ export declare function mcpFind(models: ModelRegistry, baseConfig: JXPConfig, auth: McpAuthContext, params: FindParams): Promise<unknown>;
17
+ export declare function mcpCount(models: ModelRegistry, baseConfig: JXPConfig, auth: McpAuthContext, params: {
18
+ model: string;
19
+ filter?: Record<string, unknown>;
20
+ search?: string | Record<string, unknown>;
21
+ }): Promise<unknown>;
22
+ export declare function mcpExportCsv(models: ModelRegistry, baseConfig: JXPConfig, auth: McpAuthContext, params: Omit<FindParams, "id">): Promise<string>;
23
+ //# sourceMappingURL=read_service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"read_service.d.ts","sourceRoot":"","sources":["../../../src/libs/mcp/read_service.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAevD,OAAO,EAAyB,KAAK,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAIhF,MAAM,WAAW,UAAU;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACjC,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC1C,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC3C,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;CACd;AA+DD,wBAAsB,OAAO,CAC5B,MAAM,EAAE,aAAa,EACrB,UAAU,EAAE,SAAS,EACrB,IAAI,EAAE,cAAc,EACpB,MAAM,EAAE,UAAU,GAChB,OAAO,CAAC,OAAO,CAAC,CAyBlB;AAED,wBAAsB,QAAQ,CAC7B,MAAM,EAAE,aAAa,EACrB,UAAU,EAAE,SAAS,EACrB,IAAI,EAAE,cAAc,EACpB,MAAM,EAAE;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CAAE,GACpG,OAAO,CAAC,OAAO,CAAC,CAkBlB;AAED,wBAAsB,YAAY,CACjC,MAAM,EAAE,aAAa,EACrB,UAAU,EAAE,SAAS,EACrB,IAAI,EAAE,cAAc,EACpB,MAAM,EAAE,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,GAC5B,OAAO,CAAC,MAAM,CAAC,CA0BjB"}
@@ -0,0 +1,141 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.mcpFind = mcpFind;
4
+ exports.mcpCount = mcpCount;
5
+ exports.mcpExportCsv = mcpExportCsv;
6
+ const read_handlers_1 = require("../read_handlers");
7
+ const config_1 = require("./config");
8
+ const model_visibility_1 = require("./model_visibility");
9
+ const errors = require("restify-errors");
10
+ function truncateValue(value, maxLen) {
11
+ if (typeof value === "string" && value.length > maxLen) {
12
+ return value.slice(0, maxLen);
13
+ }
14
+ if (Array.isArray(value)) {
15
+ return value.map((v) => truncateValue(v, maxLen));
16
+ }
17
+ if (value && typeof value === "object" && !(value instanceof Date)) {
18
+ const out = {};
19
+ for (const [k, v] of Object.entries(value)) {
20
+ out[k] = truncateValue(v, maxLen);
21
+ }
22
+ return out;
23
+ }
24
+ return value;
25
+ }
26
+ function truncateResultPayload(payload, maxLen) {
27
+ if (!payload || typeof payload !== "object")
28
+ return payload;
29
+ const clone = JSON.parse(JSON.stringify(payload));
30
+ if (clone.data && Array.isArray(clone.data)) {
31
+ clone.data = clone.data.map((row) => {
32
+ const next = truncateValue(row, maxLen);
33
+ if (JSON.stringify(row).length > JSON.stringify(next).length) {
34
+ next._truncated = true;
35
+ }
36
+ return next;
37
+ });
38
+ }
39
+ else if (clone.data && typeof clone.data === "object") {
40
+ const row = truncateValue(clone.data, maxLen);
41
+ if (JSON.stringify(clone.data).length > JSON.stringify(row).length) {
42
+ row._truncated = true;
43
+ }
44
+ clone.data = row;
45
+ }
46
+ return clone;
47
+ }
48
+ function buildQueryFromFindParams(params, mcp) {
49
+ const query = {};
50
+ if (params.filter)
51
+ query.filter = params.filter;
52
+ if (params.search !== undefined)
53
+ query.search = params.search;
54
+ if (params.populate !== undefined)
55
+ query.populate = params.populate;
56
+ if (params.fields)
57
+ query.fields = params.fields;
58
+ if (params.sort)
59
+ query.sort = params.sort;
60
+ if (params.page)
61
+ query.page = params.page;
62
+ if (params.skip)
63
+ query.skip = params.skip;
64
+ if (params.limit !== undefined) {
65
+ query.limit = Math.min(params.limit, mcp.maxLimit);
66
+ }
67
+ return query;
68
+ }
69
+ function mcpConfigForRequest(baseConfig, forCsv = false) {
70
+ const mcp = (0, config_1.getMcpConfig)();
71
+ const query_limits_overlay = forCsv
72
+ ? (0, config_1.overlayMcpCsvLimits)(baseConfig.query_limits, mcp)
73
+ : (0, config_1.overlayMcpQueryLimits)(baseConfig.query_limits, mcp);
74
+ return { ...baseConfig, query_limits: query_limits_overlay };
75
+ }
76
+ async function mcpFind(models, baseConfig, auth, params) {
77
+ const mcp = (0, config_1.getMcpConfig)();
78
+ const slug = params.model;
79
+ const Model = models[slug];
80
+ if (!Model) {
81
+ throw new errors.NotFoundError(`Model "${slug}" not found`);
82
+ }
83
+ await (0, model_visibility_1.assertModelVisibleMcp)(slug, Model, auth, mcp, params.id);
84
+ const config = mcpConfigForRequest(baseConfig);
85
+ const query = buildQueryFromFindParams(params, mcp);
86
+ if (mcp.disableAutopopulate && query.autopopulate) {
87
+ delete query.autopopulate;
88
+ }
89
+ const res = (0, read_handlers_1.buildSyntheticResponse)(auth.user, auth.groups);
90
+ if (params.id) {
91
+ const req = (0, read_handlers_1.buildSyntheticRequest)(config, slug, Model, query, { item_id: params.id });
92
+ await (0, read_handlers_1.executeGetOne)(req, res);
93
+ return truncateResultPayload(res.result, mcp.truncateStringsAt);
94
+ }
95
+ const req = (0, read_handlers_1.buildSyntheticRequest)(config, slug, Model, query);
96
+ await (0, read_handlers_1.executeList)(req, res);
97
+ return truncateResultPayload(res.result, mcp.truncateStringsAt);
98
+ }
99
+ async function mcpCount(models, baseConfig, auth, params) {
100
+ const mcp = (0, config_1.getMcpConfig)();
101
+ const slug = params.model;
102
+ const Model = models[slug];
103
+ if (!Model) {
104
+ throw new errors.NotFoundError(`Model "${slug}" not found`);
105
+ }
106
+ await (0, model_visibility_1.assertModelVisibleMcp)(slug, Model, auth, mcp);
107
+ const config = mcpConfigForRequest(baseConfig);
108
+ const query = {};
109
+ if (params.filter)
110
+ query.filter = params.filter;
111
+ if (params.search !== undefined)
112
+ query.search = params.search;
113
+ const req = (0, read_handlers_1.buildSyntheticRequest)(config, slug, Model, query);
114
+ const res = (0, read_handlers_1.buildSyntheticResponse)(auth.user, auth.groups);
115
+ await (0, read_handlers_1.executeCount)(req, res);
116
+ return res.result;
117
+ }
118
+ async function mcpExportCsv(models, baseConfig, auth, params) {
119
+ const mcp = (0, config_1.getMcpConfig)();
120
+ const slug = params.model;
121
+ const Model = models[slug];
122
+ if (!Model) {
123
+ throw new errors.NotFoundError(`Model "${slug}" not found`);
124
+ }
125
+ await (0, model_visibility_1.assertModelVisibleMcp)(slug, Model, auth, mcp);
126
+ const config = mcpConfigForRequest(baseConfig, true);
127
+ const query = buildQueryFromFindParams(params, mcp);
128
+ const req = (0, read_handlers_1.buildSyntheticRequest)(config, slug, Model, query);
129
+ const res = (0, read_handlers_1.buildSyntheticResponse)(auth.user, auth.groups);
130
+ await (0, read_handlers_1.executeList)(req, res);
131
+ const csv = (0, read_handlers_1.resultToCsv)(res.result);
132
+ const maxBytes = mcp.maxCsvBytes;
133
+ if (maxBytes > 0) {
134
+ const size = Buffer.byteLength(csv, "utf8");
135
+ if (size > maxBytes) {
136
+ throw new errors.PayloadTooLargeError(`CSV export size ${size} bytes exceeds MCP maximum ${maxBytes} bytes. Use fields and a lower limit.`);
137
+ }
138
+ }
139
+ return csv;
140
+ }
141
+ //# sourceMappingURL=read_service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"read_service.js","sourceRoot":"","sources":["../../../src/libs/mcp/read_service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,23 @@
1
+ import type { JXPConfig } from "../../types/jxp-config";
2
+ import type { ModelRegistry } from "../builtin_models";
3
+ type McpToolResult = {
4
+ content: {
5
+ type: string;
6
+ text: string;
7
+ }[];
8
+ isError?: boolean;
9
+ };
10
+ type McpServerInstance = {
11
+ registerTool: (name: string, config: Record<string, unknown>, handler: (args: Record<string, unknown>) => Promise<McpToolResult>) => void;
12
+ registerResource: (name: string, uri: string, config: Record<string, unknown>, handler: () => Promise<{
13
+ contents: {
14
+ uri: string;
15
+ mimeType: string;
16
+ text: string;
17
+ }[];
18
+ }>) => void;
19
+ connect: (transport: unknown) => Promise<void>;
20
+ };
21
+ export declare function createMcpServer(config: JXPConfig, models: ModelRegistry): Promise<McpServerInstance>;
22
+ export {};
23
+ //# sourceMappingURL=server.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../../src/libs/mcp/server.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAgBvD,KAAK,aAAa,GAAG;IAAE,OAAO,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IAAC,OAAO,CAAC,EAAE,OAAO,CAAA;CAAE,CAAC;AAEtF,KAAK,iBAAiB,GAAG;IACxB,YAAY,EAAE,CACb,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC/B,OAAO,EAAE,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,OAAO,CAAC,aAAa,CAAC,KAC9D,IAAI,CAAC;IACV,gBAAgB,EAAE,CACjB,IAAI,EAAE,MAAM,EACZ,GAAG,EAAE,MAAM,EACX,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC/B,OAAO,EAAE,MAAM,OAAO,CAAC;QAAE,QAAQ,EAAE;YAAE,GAAG,EAAE,MAAM,CAAC;YAAC,QAAQ,EAAE,MAAM,CAAC;YAAC,IAAI,EAAE,MAAM,CAAA;SAAE,EAAE,CAAA;KAAE,CAAC,KACnF,IAAI,CAAC;IACV,OAAO,EAAE,CAAC,SAAS,EAAE,OAAO,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CAC/C,CAAC;AAaF,wBAAsB,eAAe,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,aAAa,8BA+J7E"}
@@ -0,0 +1,111 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.createMcpServer = createMcpServer;
4
+ const config_1 = require("./config");
5
+ const context_1 = require("./context");
6
+ const guides_1 = require("./guides");
7
+ const execute_tool_1 = require("./execute_tool");
8
+ const dynamic_import_1 = require("./dynamic_import");
9
+ const path = require("path");
10
+ const { z } = require("zod");
11
+ const pkg = require(path.join(__dirname, "../../../package.json"));
12
+ function toolText(payload) {
13
+ return {
14
+ content: [{ type: "text", text: typeof payload === "string" ? payload : JSON.stringify(payload, null, 2) }],
15
+ };
16
+ }
17
+ function toolError(err) {
18
+ const message = err instanceof Error ? err.message : String(err);
19
+ return { content: [{ type: "text", text: message }], isError: true };
20
+ }
21
+ async function createMcpServer(config, models) {
22
+ const { McpServer } = await (0, dynamic_import_1.dynamicImport)("@modelcontextprotocol/server");
23
+ const mcpConfig = (0, config_1.getMcpConfig)();
24
+ const guideCtx = { config, mcpConfig };
25
+ const server = new McpServer({ name: "jxp", version: pkg.version }, { instructions: (0, guides_1.buildMcpInstructions)(guideCtx) });
26
+ server.registerResource(guides_1.MCP_GUIDE_RESOURCE_NAME, guides_1.MCP_GUIDE_URI, {
27
+ title: "JXP MCP usage guide",
28
+ description: "Full markdown guide for querying JXP via MCP tools.",
29
+ mimeType: "text/markdown",
30
+ }, async () => ({
31
+ contents: [
32
+ {
33
+ uri: guides_1.MCP_GUIDE_URI,
34
+ mimeType: "text/markdown",
35
+ text: (0, guides_1.buildMcpGuideMarkdown)(guideCtx),
36
+ },
37
+ ],
38
+ }));
39
+ const modelSlug = z.string().min(1).describe("Model slug (from jxp_list_models)");
40
+ server.registerTool("jxp_list_models", {
41
+ title: "List JXP models",
42
+ description: "Always call this first to discover model slugs. Read resource jxp-guide if unsure about workflow.",
43
+ inputSchema: z.object({}),
44
+ }, async () => {
45
+ const auth = (0, context_1.getMcpAuth)();
46
+ const result = await (0, execute_tool_1.executeMcpTool)("jxp_list_models", {}, config, models, auth);
47
+ return result.isError ? toolError(result.text) : toolText(JSON.parse(result.text));
48
+ });
49
+ server.registerTool("jxp_describe_model", {
50
+ title: "Describe JXP model",
51
+ description: "JSON schema for a model: fields, links, populate hints. Call after jxp_list_models before jxp_find.",
52
+ inputSchema: z.object({ model: modelSlug }),
53
+ }, async ({ model }) => {
54
+ const auth = (0, context_1.getMcpAuth)();
55
+ const result = await (0, execute_tool_1.executeMcpTool)("jxp_describe_model", { model: String(model) }, config, models, auth);
56
+ return result.isError ? toolError(result.text) : toolText(JSON.parse(result.text));
57
+ });
58
+ const findSchema = z.object({
59
+ model: modelSlug,
60
+ id: z.string().optional().describe("MongoDB _id for a single document"),
61
+ filter: z.record(z.string(), z.unknown()).optional(),
62
+ search: z.union([z.string(), z.record(z.string(), z.unknown())]).optional(),
63
+ populate: z.union([z.string(), z.record(z.string(), z.string())]).optional(),
64
+ fields: z.string().optional().describe("Comma-separated field projection"),
65
+ sort: z.string().optional(),
66
+ limit: z.number().int().positive().optional(),
67
+ page: z.number().int().positive().optional(),
68
+ skip: z.number().int().nonnegative().optional(),
69
+ });
70
+ server.registerTool("jxp_find", {
71
+ title: "Find JXP documents",
72
+ description: "List or get documents. Use jxp_count first on large collections. Always set fields and a low limit. " +
73
+ `Default limit ${mcpConfig.defaultLimit}, max ${mcpConfig.maxLimit}.`,
74
+ inputSchema: findSchema,
75
+ }, async (args) => {
76
+ const auth = (0, context_1.getMcpAuth)();
77
+ const result = await (0, execute_tool_1.executeMcpTool)("jxp_find", args, config, models, auth);
78
+ if (result.isError)
79
+ return toolError(result.text);
80
+ try {
81
+ return toolText(JSON.parse(result.text));
82
+ }
83
+ catch {
84
+ return toolText(result.text);
85
+ }
86
+ });
87
+ server.registerTool("jxp_count", {
88
+ title: "Count JXP documents",
89
+ description: "Count matching documents. Use before jxp_find on large collections to avoid huge result sets.",
90
+ inputSchema: z.object({
91
+ model: modelSlug,
92
+ filter: z.record(z.string(), z.unknown()).optional(),
93
+ search: z.union([z.string(), z.record(z.string(), z.unknown())]).optional(),
94
+ }),
95
+ }, async (args) => {
96
+ const auth = (0, context_1.getMcpAuth)();
97
+ const result = await (0, execute_tool_1.executeMcpTool)("jxp_count", args, config, models, auth);
98
+ return result.isError ? toolError(result.text) : toolText(JSON.parse(result.text));
99
+ });
100
+ server.registerTool("jxp_export_csv", {
101
+ title: "Export JXP documents as CSV",
102
+ description: "Export matching documents as CSV text. Prefer fields and a low limit. No populate support.",
103
+ inputSchema: findSchema.omit({ id: true }),
104
+ }, async (args) => {
105
+ const auth = (0, context_1.getMcpAuth)();
106
+ const result = await (0, execute_tool_1.executeMcpTool)("jxp_export_csv", args, config, models, auth);
107
+ return result.isError ? toolError(result.text) : toolText(result.text);
108
+ });
109
+ return server;
110
+ }
111
+ //# sourceMappingURL=server.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../../../src/libs/mcp/server.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ import type { JXPConfig, JXPRequest, JXPResponse } from "../types/jxp-config";
2
+ import type { Model } from "mongoose";
3
+ export declare function parseFilter(filter: unknown, depth?: number): Record<string, unknown>;
4
+ export declare function getOneDocument(Model: Model<unknown>, item_id: string, params: Record<string, unknown>, options: {
5
+ user?: JXPResponse["user"];
6
+ }): Promise<any>;
7
+ export declare function executeList(req: JXPRequest, res: JXPResponse): Promise<void>;
8
+ export declare function executeGetOne(req: JXPRequest, res: JXPResponse): Promise<void>;
9
+ export declare function executeCount(req: JXPRequest, res: JXPResponse): Promise<void>;
10
+ export declare function resultToCsv(result: Record<string, unknown>): string;
11
+ export declare function buildSyntheticRequest(config: JXPConfig, modelname: string, Model: Model<unknown>, query: Record<string, unknown>, params?: Record<string, string>): JXPRequest;
12
+ export declare function buildSyntheticResponse(user: JXPResponse["user"], groups: string[]): JXPResponse;
13
+ //# sourceMappingURL=read_handlers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"read_handlers.d.ts","sourceRoot":"","sources":["../../src/libs/read_handlers.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAC9E,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,UAAU,CAAC;AAiCtC,wBAAgB,WAAW,CAAC,MAAM,EAAE,OAAO,EAAE,KAAK,SAAI,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAmG/E;AAED,wBAAsB,cAAc,CACnC,KAAK,EAAE,KAAK,CAAC,OAAO,CAAC,EACrB,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC/B,OAAO,EAAE;IAAE,IAAI,CAAC,EAAE,WAAW,CAAC,MAAM,CAAC,CAAA;CAAE,gBAmCvC;AAED,wBAAsB,WAAW,CAAC,GAAG,EAAE,UAAU,EAAE,GAAG,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAqHlF;AAED,wBAAsB,aAAa,CAAC,GAAG,EAAE,UAAU,EAAE,GAAG,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CASpF;AAED,wBAAsB,YAAY,CAAC,GAAG,EAAE,UAAU,EAAE,GAAG,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAyBnF;AAED,wBAAgB,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAOnE;AAED,wBAAgB,qBAAqB,CACpC,MAAM,EAAE,SAAS,EACjB,SAAS,EAAE,MAAM,EACjB,KAAK,EAAE,KAAK,CAAC,OAAO,CAAC,EACrB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC9B,MAAM,GAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAM,GACjC,UAAU,CAWZ;AAED,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,WAAW,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,WAAW,CAe/F"}