@mcp-abap-adt/core 1.4.3 → 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/CHANGELOG.md CHANGED
@@ -2,6 +2,42 @@
2
2
 
3
3
  ## [Unreleased]
4
4
 
5
+ ## [2.0.0] - 2025-12-30
6
+ ### Added
7
+ - **EmbeddableMcpServer**: New server class for external integration (e.g., cloud-llm-hub)
8
+ - Accepts injected `AbapConnection` from consumer
9
+ - Extends `BaseMcpServer` with proper handler registration
10
+ - Configurable exposition levels: `readonly`, `high`, `low`, `system`, `search`
11
+ - Export via `@mcp-abap-adt/core/server`
12
+
13
+ ### Changed
14
+ - **HandlerExporter**: Now serves only as registry factory
15
+ - Use `createRegistry()` to get `IHandlersRegistry` for custom scenarios
16
+ - `getHandlerEntries()` and `getToolNames()` still available for inspection
17
+
18
+ ### Removed
19
+ - **BREAKING**: `HandlerExporter.registerOnServer()` method removed
20
+ - Had bug with handler signature (passed context twice)
21
+ - Replace with `EmbeddableMcpServer` for cleaner architecture
22
+
23
+ ### Migration Guide
24
+ ```typescript
25
+ // Before (v1.x - broken)
26
+ import { HandlerExporter } from '@mcp-abap-adt/core/handlers';
27
+ const exporter = new HandlerExporter({ includeReadOnly: true, includeHighLevel: true });
28
+ const mcpServer = new McpServer({ name: 'mcp-abap-adt', version: '1.0.0' });
29
+ exporter.registerOnServer(mcpServer, () => connection, logger);
30
+
31
+ // After (v2.x)
32
+ import { EmbeddableMcpServer } from '@mcp-abap-adt/core/server';
33
+ const server = new EmbeddableMcpServer({
34
+ connection,
35
+ logger,
36
+ exposition: ['readonly', 'high'],
37
+ });
38
+ await server.connect(transport);
39
+ ```
40
+
5
41
  ## [1.4.3] - 2025-12-29
6
42
  ### Documentation
7
43
  - **CLI Help**: Extended `--help` output with comprehensive environment variables documentation
@@ -1,6 +1,4 @@
1
- import type { AbapConnection } from '@mcp-abap-adt/connection';
2
1
  import type { Logger } from '@mcp-abap-adt/logger';
3
- import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
4
2
  import type { HandlerEntry, IHandlersRegistry } from './interfaces.js';
5
3
  /**
6
4
  * Options for creating handler exporter
@@ -38,21 +36,27 @@ export interface HandlerExporterOptions {
38
36
  includeSearch?: boolean;
39
37
  }
40
38
  /**
41
- * Handler Exporter - exports MCP handlers for use in external servers
39
+ * Handler Exporter - factory for creating handlers registry
42
40
  *
43
- * This class provides a simple way to register ABAP ADT handlers on any McpServer instance.
44
- * It's designed for integration with external servers (like cloud-llm-hub) that manage
45
- * their own connection lifecycle.
41
+ * This class provides a way to create handlers registry with configurable
42
+ * exposition levels. Use with EmbeddableMcpServer for external integration.
46
43
  *
47
44
  * Usage:
48
45
  * ```typescript
49
- * import { HandlerExporter } from '@fr0ster/mcp-abap-adt';
46
+ * import { HandlerExporter, EmbeddableMcpServer } from '@mcp-abap-adt/core';
50
47
  *
51
- * // Create exporter
52
- * const exporter = new HandlerExporter();
48
+ * // Create exporter with specific handlers
49
+ * const exporter = new HandlerExporter({
50
+ * includeReadOnly: true,
51
+ * includeHighLevel: true,
52
+ * includeLowLevel: false,
53
+ * });
53
54
  *
54
- * // Register on your McpServer with connection provider
55
- * exporter.registerOnServer(mcpServer, () => getConnection());
55
+ * // Use with EmbeddableMcpServer
56
+ * const server = new EmbeddableMcpServer({
57
+ * connection: myConnection,
58
+ * handlersRegistry: exporter.createRegistry(),
59
+ * });
56
60
  * ```
57
61
  */
58
62
  export declare class HandlerExporter {
@@ -69,20 +73,9 @@ export declare class HandlerExporter {
69
73
  */
70
74
  getToolNames(): string[];
71
75
  /**
72
- * Create handlers registry for use with v2 servers
76
+ * Create handlers registry for use with EmbeddableMcpServer or BaseMcpServer
73
77
  */
74
78
  createRegistry(): IHandlersRegistry;
75
- /**
76
- * Register all handlers on an McpServer instance
77
- *
78
- * @param server - McpServer instance to register handlers on
79
- * @param connectionProvider - Function that returns AbapConnection for each request
80
- * @param logger - Optional logger (defaults to constructor logger)
81
- *
82
- * The connectionProvider is called for each handler invocation, allowing
83
- * per-request connection management (e.g., different JWT tokens per request)
84
- */
85
- registerOnServer(server: McpServer, connectionProvider: () => AbapConnection | Promise<AbapConnection>, logger?: Logger): void;
86
79
  }
87
80
  /**
88
81
  * Create default handler exporter with all handler groups
@@ -1 +1 @@
1
- {"version":3,"file":"HandlerExporter.d.ts","sourceRoot":"","sources":["../../../src/lib/handlers/HandlerExporter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAC/D,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAEnD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAOzE,OAAO,KAAK,EACV,YAAY,EAEZ,iBAAiB,EAClB,MAAM,iBAAiB,CAAC;AAGzB;;GAEG;AACH,MAAM,WAAW,sBAAsB;IACrC;;;OAGG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAEhB;;;OAGG;IACH,eAAe,CAAC,EAAE,OAAO,CAAC;IAE1B;;;OAGG;IACH,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAE3B;;;OAGG;IACH,eAAe,CAAC,EAAE,OAAO,CAAC;IAE1B;;;OAGG;IACH,aAAa,CAAC,EAAE,OAAO,CAAC;IAExB;;;OAGG;IACH,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,qBAAa,eAAe;IAC1B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAkB;gBAEpC,OAAO,CAAC,EAAE,sBAAsB;IA8B5C;;;OAGG;IACH,iBAAiB,IAAI,YAAY,EAAE;IAQnC;;OAEG;IACH,YAAY,IAAI,MAAM,EAAE;IAIxB;;OAEG;IACH,cAAc,IAAI,iBAAiB;IAInC;;;;;;;;;OASG;IACH,gBAAgB,CACd,MAAM,EAAE,SAAS,EACjB,kBAAkB,EAAE,MAAM,cAAc,GAAG,OAAO,CAAC,cAAc,CAAC,EAClE,MAAM,CAAC,EAAE,MAAM,GACd,IAAI;CAmER;AAED;;GAEG;AACH,wBAAgB,4BAA4B,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,eAAe,CAE7E"}
1
+ {"version":3,"file":"HandlerExporter.d.ts","sourceRoot":"","sources":["../../../src/lib/handlers/HandlerExporter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAQnD,OAAO,KAAK,EACV,YAAY,EAEZ,iBAAiB,EAClB,MAAM,iBAAiB,CAAC;AAGzB;;GAEG;AACH,MAAM,WAAW,sBAAsB;IACrC;;;OAGG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAEhB;;;OAGG;IACH,eAAe,CAAC,EAAE,OAAO,CAAC;IAE1B;;;OAGG;IACH,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAE3B;;;OAGG;IACH,eAAe,CAAC,EAAE,OAAO,CAAC;IAE1B;;;OAGG;IACH,aAAa,CAAC,EAAE,OAAO,CAAC;IAExB;;;OAGG;IACH,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB;AAED;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,qBAAa,eAAe;IAC1B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAkB;gBAEpC,OAAO,CAAC,EAAE,sBAAsB;IA8B5C;;;OAGG;IACH,iBAAiB,IAAI,YAAY,EAAE;IAQnC;;OAEG;IACH,YAAY,IAAI,MAAM,EAAE;IAIxB;;OAEG;IACH,cAAc,IAAI,iBAAiB;CAGpC;AAED;;GAEG;AACH,wBAAgB,4BAA4B,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,eAAe,CAE7E"}
@@ -10,21 +10,27 @@ const SearchHandlersGroup_js_1 = require("./groups/SearchHandlersGroup.js");
10
10
  const SystemHandlersGroup_js_1 = require("./groups/SystemHandlersGroup.js");
11
11
  const CompositeHandlersRegistry_js_1 = require("./registry/CompositeHandlersRegistry.js");
12
12
  /**
13
- * Handler Exporter - exports MCP handlers for use in external servers
13
+ * Handler Exporter - factory for creating handlers registry
14
14
  *
15
- * This class provides a simple way to register ABAP ADT handlers on any McpServer instance.
16
- * It's designed for integration with external servers (like cloud-llm-hub) that manage
17
- * their own connection lifecycle.
15
+ * This class provides a way to create handlers registry with configurable
16
+ * exposition levels. Use with EmbeddableMcpServer for external integration.
18
17
  *
19
18
  * Usage:
20
19
  * ```typescript
21
- * import { HandlerExporter } from '@fr0ster/mcp-abap-adt';
20
+ * import { HandlerExporter, EmbeddableMcpServer } from '@mcp-abap-adt/core';
22
21
  *
23
- * // Create exporter
24
- * const exporter = new HandlerExporter();
22
+ * // Create exporter with specific handlers
23
+ * const exporter = new HandlerExporter({
24
+ * includeReadOnly: true,
25
+ * includeHighLevel: true,
26
+ * includeLowLevel: false,
27
+ * });
25
28
  *
26
- * // Register on your McpServer with connection provider
27
- * exporter.registerOnServer(mcpServer, () => getConnection());
29
+ * // Use with EmbeddableMcpServer
30
+ * const server = new EmbeddableMcpServer({
31
+ * connection: myConnection,
32
+ * handlersRegistry: exporter.createRegistry(),
33
+ * });
28
34
  * ```
29
35
  */
30
36
  class HandlerExporter {
@@ -33,7 +39,7 @@ class HandlerExporter {
33
39
  constructor(options) {
34
40
  this.logger = options?.logger ?? logger_1.defaultLogger;
35
41
  // Create dummy context for group instantiation
36
- // Real context will be provided per-request via registerOnServer
42
+ // Real context is provided by BaseMcpServer.registerHandlers() via getConnection()
37
43
  const dummyContext = {
38
44
  connection: null,
39
45
  logger: this.logger,
@@ -74,71 +80,11 @@ class HandlerExporter {
74
80
  return this.getHandlerEntries().map((e) => e.toolDefinition.name);
75
81
  }
76
82
  /**
77
- * Create handlers registry for use with v2 servers
83
+ * Create handlers registry for use with EmbeddableMcpServer or BaseMcpServer
78
84
  */
79
85
  createRegistry() {
80
86
  return new CompositeHandlersRegistry_js_1.CompositeHandlersRegistry(this.handlerGroups);
81
87
  }
82
- /**
83
- * Register all handlers on an McpServer instance
84
- *
85
- * @param server - McpServer instance to register handlers on
86
- * @param connectionProvider - Function that returns AbapConnection for each request
87
- * @param logger - Optional logger (defaults to constructor logger)
88
- *
89
- * The connectionProvider is called for each handler invocation, allowing
90
- * per-request connection management (e.g., different JWT tokens per request)
91
- */
92
- registerOnServer(server, connectionProvider, logger) {
93
- const log = logger ?? this.logger;
94
- for (const group of this.handlerGroups) {
95
- const handlers = group.getHandlers();
96
- for (const entry of handlers) {
97
- // Wrap handler to inject connection from provider
98
- const wrappedHandler = async (args) => {
99
- const connection = await connectionProvider();
100
- const context = {
101
- connection,
102
- logger: log,
103
- };
104
- const result = await entry.handler(context, args);
105
- // Handle errors: if handler returns isError, throw McpError
106
- if (result?.isError) {
107
- const { ErrorCode, McpError } = await import('@modelcontextprotocol/sdk/types.js');
108
- const errorText = (result.content || [])
109
- .map((item) => {
110
- if (item?.type === 'json' && item.json !== undefined) {
111
- return JSON.stringify(item.json);
112
- }
113
- return item?.text || String(item);
114
- })
115
- .join('\n') || 'Unknown error';
116
- throw new McpError(ErrorCode.InternalError, errorText);
117
- }
118
- // Normalize content: SDK expects text/image/audio/resource, convert custom json to text
119
- const content = (result?.content || []).map((item) => {
120
- if (item?.type === 'json' && item.json !== undefined) {
121
- return {
122
- type: 'text',
123
- text: JSON.stringify(item.json),
124
- };
125
- }
126
- return {
127
- type: 'text',
128
- text: item?.text || String(item || ''),
129
- };
130
- });
131
- return { content };
132
- };
133
- // Register tool on server
134
- server.registerTool(entry.toolDefinition.name, {
135
- description: entry.toolDefinition.description,
136
- inputSchema: entry.toolDefinition.inputSchema,
137
- }, wrappedHandler);
138
- }
139
- }
140
- log.info?.(`[HandlerExporter] Registered ${this.getToolNames().length} tools on server`);
141
- }
142
88
  }
143
89
  exports.HandlerExporter = HandlerExporter;
144
90
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"HandlerExporter.js","sourceRoot":"","sources":["../../../src/lib/handlers/HandlerExporter.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"HandlerExporter.js","sourceRoot":"","sources":["../../../src/lib/handlers/HandlerExporter.ts"],"names":[],"mappings":";;;AAgJA,oEAEC;AAjJD,iDAAqD;AAErD,kFAA4E;AAC5E,gFAA0E;AAC1E,gFAA0E;AAC1E,4EAAsE;AACtE,4EAAsE;AAMtE,0FAAoF;AA2CpF;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,MAAa,eAAe;IACT,MAAM,CAAS;IACf,aAAa,CAAkB;IAEhD,YAAY,OAAgC;QAC1C,IAAI,CAAC,MAAM,GAAG,OAAO,EAAE,MAAM,IAAI,sBAAa,CAAC;QAE/C,+CAA+C;QAC/C,mFAAmF;QACnF,MAAM,YAAY,GAAmB;YACnC,UAAU,EAAE,IAAW;YACvB,MAAM,EAAE,IAAI,CAAC,MAAM;SACpB,CAAC;QAEF,wCAAwC;QACxC,IAAI,CAAC,aAAa,GAAG,EAAE,CAAC;QAExB,IAAI,OAAO,EAAE,eAAe,KAAK,KAAK,EAAE,CAAC;YACvC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,gDAAqB,CAAC,YAAY,CAAC,CAAC,CAAC;QACnE,CAAC;QACD,IAAI,OAAO,EAAE,gBAAgB,KAAK,KAAK,EAAE,CAAC;YACxC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,kDAAsB,CAAC,YAAY,CAAC,CAAC,CAAC;QACpE,CAAC;QACD,IAAI,OAAO,EAAE,eAAe,KAAK,KAAK,EAAE,CAAC;YACvC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,gDAAqB,CAAC,YAAY,CAAC,CAAC,CAAC;QACnE,CAAC;QACD,IAAI,OAAO,EAAE,aAAa,KAAK,KAAK,EAAE,CAAC;YACrC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,4CAAmB,CAAC,YAAY,CAAC,CAAC,CAAC;QACjE,CAAC;QACD,IAAI,OAAO,EAAE,aAAa,KAAK,KAAK,EAAE,CAAC;YACrC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,4CAAmB,CAAC,YAAY,CAAC,CAAC,CAAC;QACjE,CAAC;IACH,CAAC;IAED;;;OAGG;IACH,iBAAiB;QACf,MAAM,OAAO,GAAmB,EAAE,CAAC;QACnC,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;YACvC,OAAO,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC;QACvC,CAAC;QACD,OAAO,OAAO,CAAC;IACjB,CAAC;IAED;;OAEG;IACH,YAAY;QACV,OAAO,IAAI,CAAC,iBAAiB,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;IACpE,CAAC;IAED;;OAEG;IACH,cAAc;QACZ,OAAO,IAAI,wDAAyB,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;IAC3D,CAAC;CACF;AA3DD,0CA2DC;AAED;;GAEG;AACH,SAAgB,4BAA4B,CAAC,MAAe;IAC1D,OAAO,IAAI,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC;AACzC,CAAC"}
@@ -0,0 +1,72 @@
1
+ import type { AbapConnection } from '@mcp-abap-adt/connection';
2
+ import { type Logger } from '@mcp-abap-adt/logger';
3
+ import type { IHandlersRegistry } from '../lib/handlers/interfaces.js';
4
+ import { BaseMcpServer } from './BaseMcpServer.js';
5
+ /**
6
+ * Options for EmbeddableMcpServer
7
+ */
8
+ export interface EmbeddableMcpServerOptions {
9
+ /**
10
+ * ABAP connection to use for all handler calls
11
+ * Injected from consumer (e.g., CloudSdkAbapConnection in cloud-llm-hub)
12
+ */
13
+ connection: AbapConnection;
14
+ /**
15
+ * Logger instance
16
+ * @default defaultLogger
17
+ */
18
+ logger?: Logger;
19
+ /**
20
+ * Handlers registry to use
21
+ * If not provided, default registry is created based on exposition option
22
+ */
23
+ handlersRegistry?: IHandlersRegistry;
24
+ /**
25
+ * Exposition levels to include when creating default registry
26
+ * @default ['readonly', 'high']
27
+ */
28
+ exposition?: ('readonly' | 'high' | 'low' | 'system' | 'search')[];
29
+ /**
30
+ * Server version
31
+ * @default from package.json or '1.0.0'
32
+ */
33
+ version?: string;
34
+ }
35
+ /**
36
+ * Embeddable MCP Server for integration with external applications
37
+ *
38
+ * This server is designed for consumers like cloud-llm-hub that:
39
+ * - Have their own connection management (e.g., BTP destinations, Cloud SDK)
40
+ * - Create new server instance per request (SSE/HTTP mode)
41
+ * - Need to inject connection from outside
42
+ *
43
+ * Usage:
44
+ * ```typescript
45
+ * // Create connection (consumer's own implementation)
46
+ * const connection = new CloudSdkAbapConnection(config);
47
+ *
48
+ * // Create embeddable server with injected connection
49
+ * const server = new EmbeddableMcpServer({
50
+ * connection,
51
+ * logger: myLogger,
52
+ * exposition: ['readonly', 'high'],
53
+ * });
54
+ *
55
+ * // Connect transport and handle request
56
+ * await server.connect(transport);
57
+ * ```
58
+ */
59
+ export declare class EmbeddableMcpServer extends BaseMcpServer {
60
+ private readonly injectedConnection;
61
+ constructor(options: EmbeddableMcpServerOptions);
62
+ /**
63
+ * Returns the injected connection
64
+ * Called by BaseMcpServer.registerHandlers() wrapper lambdas
65
+ */
66
+ protected getConnection(): Promise<AbapConnection>;
67
+ /**
68
+ * Creates default handlers registry based on exposition levels
69
+ */
70
+ private createDefaultRegistry;
71
+ }
72
+ //# sourceMappingURL=EmbeddableMcpServer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"EmbeddableMcpServer.d.ts","sourceRoot":"","sources":["../../src/server/EmbeddableMcpServer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAC/D,OAAO,EAAiB,KAAK,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAOlE,OAAO,KAAK,EAEV,iBAAiB,EAClB,MAAM,+BAA+B,CAAC;AAEvC,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAInD;;GAEG;AACH,MAAM,WAAW,0BAA0B;IACzC;;;OAGG;IACH,UAAU,EAAE,cAAc,CAAC;IAE3B;;;OAGG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAEhB;;;OAGG;IACH,gBAAgB,CAAC,EAAE,iBAAiB,CAAC;IAErC;;;OAGG;IACH,UAAU,CAAC,EAAE,CAAC,UAAU,GAAG,MAAM,GAAG,KAAK,GAAG,QAAQ,GAAG,QAAQ,CAAC,EAAE,CAAC;IAEnE;;;OAGG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,qBAAa,mBAAoB,SAAQ,aAAa;IACpD,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAAiB;gBAExC,OAAO,EAAE,0BAA0B;IAoB/C;;;OAGG;cACa,aAAa,IAAI,OAAO,CAAC,cAAc,CAAC;IAIxD;;OAEG;IACH,OAAO,CAAC,qBAAqB;CA+B9B"}
@@ -0,0 +1,88 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.EmbeddableMcpServer = void 0;
4
+ const logger_1 = require("@mcp-abap-adt/logger");
5
+ const HighLevelHandlersGroup_js_1 = require("../lib/handlers/groups/HighLevelHandlersGroup.js");
6
+ const LowLevelHandlersGroup_js_1 = require("../lib/handlers/groups/LowLevelHandlersGroup.js");
7
+ const ReadOnlyHandlersGroup_js_1 = require("../lib/handlers/groups/ReadOnlyHandlersGroup.js");
8
+ const SearchHandlersGroup_js_1 = require("../lib/handlers/groups/SearchHandlersGroup.js");
9
+ const SystemHandlersGroup_js_1 = require("../lib/handlers/groups/SystemHandlersGroup.js");
10
+ const CompositeHandlersRegistry_js_1 = require("../lib/handlers/registry/CompositeHandlersRegistry.js");
11
+ const BaseMcpServer_js_1 = require("./BaseMcpServer.js");
12
+ const DEFAULT_VERSION = process.env.npm_package_version ?? '1.0.0';
13
+ /**
14
+ * Embeddable MCP Server for integration with external applications
15
+ *
16
+ * This server is designed for consumers like cloud-llm-hub that:
17
+ * - Have their own connection management (e.g., BTP destinations, Cloud SDK)
18
+ * - Create new server instance per request (SSE/HTTP mode)
19
+ * - Need to inject connection from outside
20
+ *
21
+ * Usage:
22
+ * ```typescript
23
+ * // Create connection (consumer's own implementation)
24
+ * const connection = new CloudSdkAbapConnection(config);
25
+ *
26
+ * // Create embeddable server with injected connection
27
+ * const server = new EmbeddableMcpServer({
28
+ * connection,
29
+ * logger: myLogger,
30
+ * exposition: ['readonly', 'high'],
31
+ * });
32
+ *
33
+ * // Connect transport and handle request
34
+ * await server.connect(transport);
35
+ * ```
36
+ */
37
+ class EmbeddableMcpServer extends BaseMcpServer_js_1.BaseMcpServer {
38
+ injectedConnection;
39
+ constructor(options) {
40
+ super({
41
+ name: 'mcp-abap-adt',
42
+ version: options.version ?? DEFAULT_VERSION,
43
+ logger: options.logger ?? logger_1.defaultLogger,
44
+ });
45
+ this.injectedConnection = options.connection;
46
+ // Use provided registry or create default based on exposition
47
+ const registry = options.handlersRegistry ??
48
+ this.createDefaultRegistry(options.exposition ?? ['readonly', 'high'], options.logger);
49
+ this.registerHandlers(registry);
50
+ }
51
+ /**
52
+ * Returns the injected connection
53
+ * Called by BaseMcpServer.registerHandlers() wrapper lambdas
54
+ */
55
+ async getConnection() {
56
+ return this.injectedConnection;
57
+ }
58
+ /**
59
+ * Creates default handlers registry based on exposition levels
60
+ */
61
+ createDefaultRegistry(exposition, logger) {
62
+ // Dummy context - not actually used because BaseMcpServer.registerHandlers()
63
+ // creates wrapper lambdas that call getConnection() for fresh context
64
+ const dummyContext = {
65
+ connection: null,
66
+ logger: logger ?? logger_1.defaultLogger,
67
+ };
68
+ const groups = [];
69
+ if (exposition.includes('readonly')) {
70
+ groups.push(new ReadOnlyHandlersGroup_js_1.ReadOnlyHandlersGroup(dummyContext));
71
+ }
72
+ if (exposition.includes('high')) {
73
+ groups.push(new HighLevelHandlersGroup_js_1.HighLevelHandlersGroup(dummyContext));
74
+ }
75
+ if (exposition.includes('low')) {
76
+ groups.push(new LowLevelHandlersGroup_js_1.LowLevelHandlersGroup(dummyContext));
77
+ }
78
+ if (exposition.includes('system')) {
79
+ groups.push(new SystemHandlersGroup_js_1.SystemHandlersGroup(dummyContext));
80
+ }
81
+ if (exposition.includes('search')) {
82
+ groups.push(new SearchHandlersGroup_js_1.SearchHandlersGroup(dummyContext));
83
+ }
84
+ return new CompositeHandlersRegistry_js_1.CompositeHandlersRegistry(groups);
85
+ }
86
+ }
87
+ exports.EmbeddableMcpServer = EmbeddableMcpServer;
88
+ //# sourceMappingURL=EmbeddableMcpServer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"EmbeddableMcpServer.js","sourceRoot":"","sources":["../../src/server/EmbeddableMcpServer.ts"],"names":[],"mappings":";;;AACA,iDAAkE;AAElE,gGAA0F;AAC1F,8FAAwF;AACxF,8FAAwF;AACxF,0FAAoF;AACpF,0FAAoF;AAKpF,wGAAkG;AAClG,yDAAmD;AAEnD,MAAM,eAAe,GAAG,OAAO,CAAC,GAAG,CAAC,mBAAmB,IAAI,OAAO,CAAC;AAqCnE;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,MAAa,mBAAoB,SAAQ,gCAAa;IACnC,kBAAkB,CAAiB;IAEpD,YAAY,OAAmC;QAC7C,KAAK,CAAC;YACJ,IAAI,EAAE,cAAc;YACpB,OAAO,EAAE,OAAO,CAAC,OAAO,IAAI,eAAe;YAC3C,MAAM,EAAE,OAAO,CAAC,MAAM,IAAI,sBAAa;SACxC,CAAC,CAAC;QAEH,IAAI,CAAC,kBAAkB,GAAG,OAAO,CAAC,UAAU,CAAC;QAE7C,8DAA8D;QAC9D,MAAM,QAAQ,GACZ,OAAO,CAAC,gBAAgB;YACxB,IAAI,CAAC,qBAAqB,CACxB,OAAO,CAAC,UAAU,IAAI,CAAC,UAAU,EAAE,MAAM,CAAC,EAC1C,OAAO,CAAC,MAAM,CACf,CAAC;QAEJ,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAC;IAClC,CAAC;IAED;;;OAGG;IACO,KAAK,CAAC,aAAa;QAC3B,OAAO,IAAI,CAAC,kBAAkB,CAAC;IACjC,CAAC;IAED;;OAEG;IACK,qBAAqB,CAC3B,UAAiE,EACjE,MAAe;QAEf,6EAA6E;QAC7E,sEAAsE;QACtE,MAAM,YAAY,GAAmB;YACnC,UAAU,EAAE,IAAW;YACvB,MAAM,EAAE,MAAM,IAAI,sBAAa;SAChC,CAAC;QAEF,MAAM,MAAM,GAAoB,EAAE,CAAC;QAEnC,IAAI,UAAU,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC;YACpC,MAAM,CAAC,IAAI,CAAC,IAAI,gDAAqB,CAAC,YAAY,CAAC,CAAC,CAAC;QACvD,CAAC;QACD,IAAI,UAAU,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;YAChC,MAAM,CAAC,IAAI,CAAC,IAAI,kDAAsB,CAAC,YAAY,CAAC,CAAC,CAAC;QACxD,CAAC;QACD,IAAI,UAAU,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;YAC/B,MAAM,CAAC,IAAI,CAAC,IAAI,gDAAqB,CAAC,YAAY,CAAC,CAAC,CAAC;QACvD,CAAC;QACD,IAAI,UAAU,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;YAClC,MAAM,CAAC,IAAI,CAAC,IAAI,4CAAmB,CAAC,YAAY,CAAC,CAAC,CAAC;QACrD,CAAC;QACD,IAAI,UAAU,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;YAClC,MAAM,CAAC,IAAI,CAAC,IAAI,4CAAmB,CAAC,YAAY,CAAC,CAAC,CAAC;QACrD,CAAC;QAED,OAAO,IAAI,wDAAyB,CAAC,MAAM,CAAC,CAAC;IAC/C,CAAC;CACF;AAjED,kDAiEC"}
@@ -1,4 +1,5 @@
1
1
  export * from './BaseMcpServer.js';
2
+ export * from './EmbeddableMcpServer.js';
2
3
  export * from './IHttpApplication.js';
3
4
  export * from './SseServer.js';
4
5
  export * from './StdioServer.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/server/index.ts"],"names":[],"mappings":"AAAA,cAAc,oBAAoB,CAAC;AACnC,cAAc,uBAAuB,CAAC;AACtC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,kBAAkB,CAAC;AACjC,cAAc,2BAA2B,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/server/index.ts"],"names":[],"mappings":"AAAA,cAAc,oBAAoB,CAAC;AACnC,cAAc,0BAA0B,CAAC;AACzC,cAAc,uBAAuB,CAAC;AACtC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,kBAAkB,CAAC;AACjC,cAAc,2BAA2B,CAAC"}
@@ -15,6 +15,7 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
15
15
  };
16
16
  Object.defineProperty(exports, "__esModule", { value: true });
17
17
  __exportStar(require("./BaseMcpServer.js"), exports);
18
+ __exportStar(require("./EmbeddableMcpServer.js"), exports);
18
19
  __exportStar(require("./IHttpApplication.js"), exports);
19
20
  __exportStar(require("./SseServer.js"), exports);
20
21
  __exportStar(require("./StdioServer.js"), exports);
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/server/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,qDAAmC;AACnC,wDAAsC;AACtC,iDAA+B;AAC/B,mDAAiC;AACjC,4DAA0C"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/server/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,qDAAmC;AACnC,2DAAyC;AACzC,wDAAsC;AACtC,iDAA+B;AAC/B,mDAAiC;AACjC,4DAA0C"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mcp-abap-adt/core",
3
- "version": "1.4.3",
3
+ "version": "2.0.0",
4
4
  "main": "dist/index.js",
5
5
  "types": "dist/index.d.ts",
6
6
  "exports": {