@rekog/mcp-nest 1.9.4 → 1.9.6
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/README.md +5 -1
- package/dist/mcp/decorators/prompt.decorator.d.ts +1 -2
- package/dist/mcp/decorators/prompt.decorator.d.ts.map +1 -1
- package/dist/mcp/decorators/prompt.decorator.js.map +1 -1
- package/dist/mcp/index.d.ts +2 -2
- package/dist/mcp/index.d.ts.map +1 -1
- package/dist/mcp/index.js +2 -2
- package/dist/mcp/index.js.map +1 -1
- package/dist/mcp/interfaces/dynamic-prompt.interface.d.ts +11 -0
- package/dist/mcp/interfaces/dynamic-prompt.interface.d.ts.map +1 -0
- package/dist/mcp/interfaces/dynamic-prompt.interface.js +3 -0
- package/dist/mcp/interfaces/dynamic-prompt.interface.js.map +1 -0
- package/dist/mcp/interfaces/dynamic-resource.interface.d.ts +11 -0
- package/dist/mcp/interfaces/dynamic-resource.interface.d.ts.map +1 -0
- package/dist/mcp/interfaces/dynamic-resource.interface.js +3 -0
- package/dist/mcp/interfaces/dynamic-resource.interface.js.map +1 -0
- package/dist/mcp/interfaces/dynamic-tool.interface.js.map +1 -1
- package/dist/mcp/interfaces/index.d.ts +2 -0
- package/dist/mcp/interfaces/index.d.ts.map +1 -1
- package/dist/mcp/interfaces/index.js.map +1 -1
- package/dist/mcp/mcp.module.d.ts.map +1 -1
- package/dist/mcp/mcp.module.js +15 -11
- package/dist/mcp/mcp.module.js.map +1 -1
- package/dist/mcp/services/handlers/mcp-handler.base.d.ts +4 -4
- package/dist/mcp/services/handlers/mcp-handler.base.d.ts.map +1 -1
- package/dist/mcp/services/handlers/mcp-handler.base.js.map +1 -1
- package/dist/mcp/services/handlers/mcp-prompts.handler.d.ts +2 -2
- package/dist/mcp/services/handlers/mcp-prompts.handler.d.ts.map +1 -1
- package/dist/mcp/services/handlers/mcp-prompts.handler.js +13 -3
- package/dist/mcp/services/handlers/mcp-prompts.handler.js.map +1 -1
- package/dist/mcp/services/handlers/mcp-resources.handler.d.ts +2 -2
- package/dist/mcp/services/handlers/mcp-resources.handler.d.ts.map +1 -1
- package/dist/mcp/services/handlers/mcp-resources.handler.js +12 -2
- package/dist/mcp/services/handlers/mcp-resources.handler.js.map +1 -1
- package/dist/mcp/services/handlers/mcp-tools.handler.d.ts +2 -2
- package/dist/mcp/services/handlers/mcp-tools.handler.d.ts.map +1 -1
- package/dist/mcp/services/handlers/mcp-tools.handler.js +5 -5
- package/dist/mcp/services/handlers/mcp-tools.handler.js.map +1 -1
- package/dist/mcp/services/mcp-dynamic-registry.service.d.ts +26 -0
- package/dist/mcp/services/mcp-dynamic-registry.service.d.ts.map +1 -0
- package/dist/mcp/services/mcp-dynamic-registry.service.js +133 -0
- package/dist/mcp/services/mcp-dynamic-registry.service.js.map +1 -0
- package/dist/mcp/services/mcp-executor.service.d.ts +2 -2
- package/dist/mcp/services/mcp-executor.service.d.ts.map +1 -1
- package/dist/mcp/services/mcp-executor.service.js +2 -2
- package/dist/mcp/services/mcp-executor.service.js.map +1 -1
- package/dist/mcp/services/{mcp-registry.service.d.ts → mcp-registry-discovery.service.d.ts} +16 -15
- package/dist/mcp/services/mcp-registry-discovery.service.d.ts.map +1 -0
- package/dist/mcp/services/{mcp-registry.service.js → mcp-registry-discovery.service.js} +41 -25
- package/dist/mcp/services/mcp-registry-discovery.service.js.map +1 -0
- package/dist/mcp/services/mcp-sse.service.d.ts +2 -2
- package/dist/mcp/services/mcp-sse.service.d.ts.map +1 -1
- package/dist/mcp/services/mcp-sse.service.js +2 -2
- package/dist/mcp/services/mcp-sse.service.js.map +1 -1
- package/dist/mcp/services/mcp-streamable-http.service.d.ts +2 -2
- package/dist/mcp/services/mcp-streamable-http.service.d.ts.map +1 -1
- package/dist/mcp/services/mcp-streamable-http.service.js +2 -2
- package/dist/mcp/services/mcp-streamable-http.service.js.map +1 -1
- package/dist/mcp/services/tool-authorization.service.d.ts +4 -4
- package/dist/mcp/services/tool-authorization.service.d.ts.map +1 -1
- package/dist/mcp/services/tool-authorization.service.js.map +1 -1
- package/dist/mcp/transport/stdio.service.d.ts +2 -2
- package/dist/mcp/transport/stdio.service.d.ts.map +1 -1
- package/dist/mcp/transport/stdio.service.js +7 -7
- package/dist/mcp/transport/stdio.service.js.map +1 -1
- package/dist/mcp/utils/capabilities-builder.d.ts +2 -2
- package/dist/mcp/utils/capabilities-builder.d.ts.map +1 -1
- package/dist/mcp/utils/capabilities-builder.js.map +1 -1
- package/dist/mcp/utils/mcp-server.factory.d.ts +2 -2
- package/dist/mcp/utils/mcp-server.factory.d.ts.map +1 -1
- package/dist/mcp/utils/mcp-server.factory.js.map +1 -1
- package/package.json +9 -9
- package/src/mcp/decorators/prompt.decorator.ts +1 -1
- package/src/mcp/index.ts +2 -2
- package/src/mcp/interfaces/dynamic-prompt.interface.ts +20 -0
- package/src/mcp/interfaces/dynamic-resource.interface.ts +22 -0
- package/src/mcp/interfaces/dynamic-tool.interface.ts +2 -2
- package/src/mcp/interfaces/index.ts +10 -0
- package/src/mcp/mcp.module.ts +15 -11
- package/src/mcp/services/handlers/mcp-handler.base.ts +6 -3
- package/src/mcp/services/handlers/mcp-prompts.handler.ts +36 -4
- package/src/mcp/services/handlers/mcp-resources.handler.ts +24 -2
- package/src/mcp/services/handlers/mcp-tools.handler.ts +11 -8
- package/src/mcp/services/mcp-dynamic-registry.service.ts +236 -0
- package/src/mcp/services/mcp-executor.service.ts +2 -2
- package/src/mcp/services/{mcp-registry.service.spec.ts → mcp-registry-discovery.service.spec.ts} +18 -12
- package/src/mcp/services/{mcp-registry.service.ts → mcp-registry-discovery.service.ts} +77 -35
- package/src/mcp/services/mcp-sse.service.ts +2 -2
- package/src/mcp/services/mcp-streamable-http.service.ts +2 -2
- package/src/mcp/services/tool-authorization.service.ts +4 -4
- package/src/mcp/transport/stdio.service.ts +8 -8
- package/src/mcp/utils/capabilities-builder.ts +2 -2
- package/src/mcp/utils/mcp-server.factory.ts +2 -2
- package/dist/authz/services/jwt-token.service.spec.d.ts +0 -2
- package/dist/authz/services/jwt-token.service.spec.d.ts.map +0 -1
- package/dist/authz/services/jwt-token.service.spec.js +0 -86
- package/dist/authz/services/jwt-token.service.spec.js.map +0 -1
- package/dist/authz/stores/memory-store.service.spec.d.ts +0 -2
- package/dist/authz/stores/memory-store.service.spec.d.ts.map +0 -1
- package/dist/authz/stores/memory-store.service.spec.js +0 -382
- package/dist/authz/stores/memory-store.service.spec.js.map +0 -1
- package/dist/authz/stores/typeorm/typeorm-store.service.spec.d.ts +0 -2
- package/dist/authz/stores/typeorm/typeorm-store.service.spec.d.ts.map +0 -1
- package/dist/authz/stores/typeorm/typeorm-store.service.spec.js +0 -340
- package/dist/authz/stores/typeorm/typeorm-store.service.spec.js.map +0 -1
- package/dist/mcp/services/mcp-registry.service.d.ts.map +0 -1
- package/dist/mcp/services/mcp-registry.service.js.map +0 -1
- package/dist/mcp/services/mcp-registry.service.spec.d.ts +0 -2
- package/dist/mcp/services/mcp-registry.service.spec.d.ts.map +0 -1
- package/dist/mcp/services/mcp-registry.service.spec.js +0 -245
- package/dist/mcp/services/mcp-registry.service.spec.js.map +0 -1
- package/dist/mcp/services/mcp-tool-builder.service.d.ts +0 -15
- package/dist/mcp/services/mcp-tool-builder.service.d.ts.map +0 -1
- package/dist/mcp/services/mcp-tool-builder.service.js +0 -70
- package/dist/mcp/services/mcp-tool-builder.service.js.map +0 -1
- package/dist/mcp/transport/custom-decorator.spec.d.ts +0 -2
- package/dist/mcp/transport/custom-decorator.spec.d.ts.map +0 -1
- package/dist/mcp/transport/custom-decorator.spec.js +0 -34
- package/dist/mcp/transport/custom-decorator.spec.js.map +0 -1
- package/dist/mcp/utils/mcp-logger.factory.spec.d.ts +0 -2
- package/dist/mcp/utils/mcp-logger.factory.spec.d.ts.map +0 -1
- package/dist/mcp/utils/mcp-logger.factory.spec.js +0 -150
- package/dist/mcp/utils/mcp-logger.factory.spec.js.map +0 -1
- package/dist/mcp/utils/normalize-endpoint.spec.d.ts +0 -2
- package/dist/mcp/utils/normalize-endpoint.spec.d.ts.map +0 -1
- package/dist/mcp/utils/normalize-endpoint.spec.js +0 -40
- package/dist/mcp/utils/normalize-endpoint.spec.js.map +0 -1
- package/src/mcp/services/mcp-tool-builder.service.ts +0 -151
|
@@ -1,40 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
const normalize_endpoint_1 = require("./normalize-endpoint");
|
|
4
|
-
describe('normalizeEndpoint', () => {
|
|
5
|
-
it('returns empty string for null or undefined', () => {
|
|
6
|
-
expect((0, normalize_endpoint_1.normalizeEndpoint)(null)).toBe('');
|
|
7
|
-
expect((0, normalize_endpoint_1.normalizeEndpoint)(undefined)).toBe('');
|
|
8
|
-
});
|
|
9
|
-
it('collapses multiple slashes in the path', () => {
|
|
10
|
-
const input = 'foo//bar///baz';
|
|
11
|
-
const expected = 'foo/bar/baz';
|
|
12
|
-
expect((0, normalize_endpoint_1.normalizeEndpoint)(input)).toBe(expected);
|
|
13
|
-
});
|
|
14
|
-
it('removes leading slash', () => {
|
|
15
|
-
const input = '/foo/bar';
|
|
16
|
-
const expected = 'foo/bar';
|
|
17
|
-
expect((0, normalize_endpoint_1.normalizeEndpoint)(input)).toBe(expected);
|
|
18
|
-
});
|
|
19
|
-
it('preserves http protocol and collapses slashes after domain', () => {
|
|
20
|
-
const input = 'http://localhost:3000//remote-auth/auth/callback';
|
|
21
|
-
const expected = 'http://localhost:3000/remote-auth/auth/callback';
|
|
22
|
-
expect((0, normalize_endpoint_1.normalizeEndpoint)(input)).toBe(expected);
|
|
23
|
-
});
|
|
24
|
-
it('preserves https protocol and collapses slashes after domain', () => {
|
|
25
|
-
const input = 'https://example.com///path///to';
|
|
26
|
-
const expected = 'https://example.com/path/to';
|
|
27
|
-
expect((0, normalize_endpoint_1.normalizeEndpoint)(input)).toBe(expected);
|
|
28
|
-
});
|
|
29
|
-
it('preserves other protocols (ftp)', () => {
|
|
30
|
-
const input = 'ftp://example.com//dir/file';
|
|
31
|
-
const expected = 'ftp://example.com/dir/file';
|
|
32
|
-
expect((0, normalize_endpoint_1.normalizeEndpoint)(input)).toBe(expected);
|
|
33
|
-
});
|
|
34
|
-
it('handles no protocol and leading double slashes', () => {
|
|
35
|
-
const input = '//foo//bar';
|
|
36
|
-
const expected = 'foo/bar';
|
|
37
|
-
expect((0, normalize_endpoint_1.normalizeEndpoint)(input)).toBe(expected);
|
|
38
|
-
});
|
|
39
|
-
});
|
|
40
|
-
//# sourceMappingURL=normalize-endpoint.spec.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"normalize-endpoint.spec.js","sourceRoot":"","sources":["../../../src/mcp/utils/normalize-endpoint.spec.ts"],"names":[],"mappings":";;AAAA,6DAAyD;AAEzD,QAAQ,CAAC,mBAAmB,EAAE,GAAG,EAAE;IACjC,EAAE,CAAC,4CAA4C,EAAE,GAAG,EAAE;QACpD,MAAM,CAAC,IAAA,sCAAiB,EAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACzC,MAAM,CAAC,IAAA,sCAAiB,EAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAChD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,wCAAwC,EAAE,GAAG,EAAE;QAChD,MAAM,KAAK,GAAG,gBAAgB,CAAC;QAC/B,MAAM,QAAQ,GAAG,aAAa,CAAC;QAC/B,MAAM,CAAC,IAAA,sCAAiB,EAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAClD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,uBAAuB,EAAE,GAAG,EAAE;QAC/B,MAAM,KAAK,GAAG,UAAU,CAAC;QACzB,MAAM,QAAQ,GAAG,SAAS,CAAC;QAC3B,MAAM,CAAC,IAAA,sCAAiB,EAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAClD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,4DAA4D,EAAE,GAAG,EAAE;QACpE,MAAM,KAAK,GAAG,kDAAkD,CAAC;QACjE,MAAM,QAAQ,GAAG,iDAAiD,CAAC;QACnE,MAAM,CAAC,IAAA,sCAAiB,EAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAClD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,6DAA6D,EAAE,GAAG,EAAE;QACrE,MAAM,KAAK,GAAG,iCAAiC,CAAC;QAChD,MAAM,QAAQ,GAAG,6BAA6B,CAAC;QAC/C,MAAM,CAAC,IAAA,sCAAiB,EAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAClD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,iCAAiC,EAAE,GAAG,EAAE;QACzC,MAAM,KAAK,GAAG,6BAA6B,CAAC;QAC5C,MAAM,QAAQ,GAAG,4BAA4B,CAAC;QAC9C,MAAM,CAAC,IAAA,sCAAiB,EAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAClD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,gDAAgD,EAAE,GAAG,EAAE;QACxD,MAAM,KAAK,GAAG,YAAY,CAAC;QAC3B,MAAM,QAAQ,GAAG,SAAS,CAAC;QAC3B,MAAM,CAAC,IAAA,sCAAiB,EAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAClD,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC","sourcesContent":["import { normalizeEndpoint } from './normalize-endpoint';\n\ndescribe('normalizeEndpoint', () => {\n it('returns empty string for null or undefined', () => {\n expect(normalizeEndpoint(null)).toBe('');\n expect(normalizeEndpoint(undefined)).toBe('');\n });\n\n it('collapses multiple slashes in the path', () => {\n const input = 'foo//bar///baz';\n const expected = 'foo/bar/baz';\n expect(normalizeEndpoint(input)).toBe(expected);\n });\n\n it('removes leading slash', () => {\n const input = '/foo/bar';\n const expected = 'foo/bar';\n expect(normalizeEndpoint(input)).toBe(expected);\n });\n\n it('preserves http protocol and collapses slashes after domain', () => {\n const input = 'http://localhost:3000//remote-auth/auth/callback';\n const expected = 'http://localhost:3000/remote-auth/auth/callback';\n expect(normalizeEndpoint(input)).toBe(expected);\n });\n\n it('preserves https protocol and collapses slashes after domain', () => {\n const input = 'https://example.com///path///to';\n const expected = 'https://example.com/path/to';\n expect(normalizeEndpoint(input)).toBe(expected);\n });\n\n it('preserves other protocols (ftp)', () => {\n const input = 'ftp://example.com//dir/file';\n const expected = 'ftp://example.com/dir/file';\n expect(normalizeEndpoint(input)).toBe(expected);\n });\n\n it('handles no protocol and leading double slashes', () => {\n const input = '//foo//bar';\n const expected = 'foo/bar';\n expect(normalizeEndpoint(input)).toBe(expected);\n });\n});\n"]}
|
|
@@ -1,151 +0,0 @@
|
|
|
1
|
-
import { Injectable, Inject, Logger } from '@nestjs/common';
|
|
2
|
-
import { z } from 'zod';
|
|
3
|
-
import {
|
|
4
|
-
DynamicToolDefinition,
|
|
5
|
-
DynamicToolHandler,
|
|
6
|
-
} from '../interfaces/dynamic-tool.interface';
|
|
7
|
-
import { McpRegistryService } from './mcp-registry.service';
|
|
8
|
-
import type { McpOptions } from '../interfaces';
|
|
9
|
-
import { createMcpLogger } from '../utils/mcp-logger.factory';
|
|
10
|
-
import { ToolMetadata } from '../decorators/tool.decorator';
|
|
11
|
-
|
|
12
|
-
/**
|
|
13
|
-
* Symbol used to identify dynamic tools in the registry.
|
|
14
|
-
* When a tool's providerClass equals this token, it's a dynamic tool.
|
|
15
|
-
*/
|
|
16
|
-
export const DYNAMIC_TOOL_HANDLER_TOKEN = Symbol('DYNAMIC_TOOL_HANDLER');
|
|
17
|
-
|
|
18
|
-
/**
|
|
19
|
-
* Global map of dynamic tool handlers, scoped by moduleId.
|
|
20
|
-
* Using a module-level Map ensures handlers persist across different
|
|
21
|
-
* McpToolBuilder instances that may be created by the DI container.
|
|
22
|
-
*/
|
|
23
|
-
const globalHandlers = new Map<string, Map<string, DynamicToolHandler>>();
|
|
24
|
-
|
|
25
|
-
/**
|
|
26
|
-
* Service for programmatically registering MCP tools at runtime.
|
|
27
|
-
*
|
|
28
|
-
* Use this to register tools with descriptions/parameters from databases
|
|
29
|
-
* or other dynamic sources during application bootstrap.
|
|
30
|
-
*
|
|
31
|
-
* @example
|
|
32
|
-
* ```typescript
|
|
33
|
-
* @Injectable()
|
|
34
|
-
* export class DynamicToolsService implements OnModuleInit {
|
|
35
|
-
* constructor(
|
|
36
|
-
* private readonly toolBuilder: McpToolBuilder,
|
|
37
|
-
* private readonly dbService: DatabaseService,
|
|
38
|
-
* ) {}
|
|
39
|
-
*
|
|
40
|
-
* async onModuleInit() {
|
|
41
|
-
* const collections = await this.dbService.getCollections();
|
|
42
|
-
*
|
|
43
|
-
* this.toolBuilder.registerTool({
|
|
44
|
-
* name: 'search-knowledge',
|
|
45
|
-
* description: `Search collections: ${collections.join(', ')}`,
|
|
46
|
-
* parameters: z.object({ query: z.string() }),
|
|
47
|
-
* handler: async (args, context) => {
|
|
48
|
-
* const results = await this.dbService.search(args.query);
|
|
49
|
-
* return { content: [{ type: 'text', text: JSON.stringify(results) }] };
|
|
50
|
-
* },
|
|
51
|
-
* });
|
|
52
|
-
* }
|
|
53
|
-
* }
|
|
54
|
-
* ```
|
|
55
|
-
*/
|
|
56
|
-
@Injectable()
|
|
57
|
-
export class McpToolBuilder {
|
|
58
|
-
private readonly logger: Logger;
|
|
59
|
-
|
|
60
|
-
constructor(
|
|
61
|
-
private readonly registry: McpRegistryService,
|
|
62
|
-
@Inject('MCP_MODULE_ID') private readonly mcpModuleId: string,
|
|
63
|
-
@Inject('MCP_OPTIONS') private readonly options: McpOptions,
|
|
64
|
-
) {
|
|
65
|
-
this.logger = createMcpLogger(McpToolBuilder.name, this.options);
|
|
66
|
-
// Initialize handler map for this module if it doesn't exist
|
|
67
|
-
if (!globalHandlers.has(mcpModuleId)) {
|
|
68
|
-
globalHandlers.set(mcpModuleId, new Map());
|
|
69
|
-
}
|
|
70
|
-
}
|
|
71
|
-
|
|
72
|
-
/**
|
|
73
|
-
* Register a dynamic tool for the current MCP server.
|
|
74
|
-
*
|
|
75
|
-
* Tools registered here will appear in the `tools/list` response and
|
|
76
|
-
* can be called via `tools/call` just like decorator-based tools.
|
|
77
|
-
*
|
|
78
|
-
* @param definition - The tool definition including name, description, parameters, and handler
|
|
79
|
-
*
|
|
80
|
-
* @example
|
|
81
|
-
* ```typescript
|
|
82
|
-
* toolBuilder.registerTool({
|
|
83
|
-
* name: 'search-knowledge',
|
|
84
|
-
* description: await getDescriptionFromDB(),
|
|
85
|
-
* parameters: z.object({ query: z.string() }),
|
|
86
|
-
* handler: async (args, context) => {
|
|
87
|
-
* const results = await searchService.search(args.query);
|
|
88
|
-
* return { content: [{ type: 'text', text: JSON.stringify(results) }] };
|
|
89
|
-
* },
|
|
90
|
-
* });
|
|
91
|
-
* ```
|
|
92
|
-
*/
|
|
93
|
-
registerTool(definition: DynamicToolDefinition): void {
|
|
94
|
-
this.logger.debug(`Registering dynamic tool: ${definition.name}`);
|
|
95
|
-
|
|
96
|
-
// Store the handler for later execution (scoped by moduleId)
|
|
97
|
-
const moduleHandlers = globalHandlers.get(this.mcpModuleId)!;
|
|
98
|
-
moduleHandlers.set(definition.name, definition.handler);
|
|
99
|
-
|
|
100
|
-
// Default to empty object schema if no parameters provided (matches @Tool decorator behavior)
|
|
101
|
-
const parameters = definition.parameters ?? z.object({});
|
|
102
|
-
|
|
103
|
-
// Build metadata matching ToolMetadata interface
|
|
104
|
-
const metadata: ToolMetadata = {
|
|
105
|
-
name: definition.name,
|
|
106
|
-
description: definition.description,
|
|
107
|
-
parameters,
|
|
108
|
-
outputSchema: definition.outputSchema,
|
|
109
|
-
annotations: definition.annotations,
|
|
110
|
-
_meta: definition._meta,
|
|
111
|
-
isPublic: definition.isPublic,
|
|
112
|
-
requiredScopes: definition.requiredScopes,
|
|
113
|
-
requiredRoles: definition.requiredRoles,
|
|
114
|
-
};
|
|
115
|
-
|
|
116
|
-
// Register with the registry
|
|
117
|
-
this.registry.registerDynamicTool(this.mcpModuleId, {
|
|
118
|
-
type: 'tool',
|
|
119
|
-
metadata,
|
|
120
|
-
providerClass: DYNAMIC_TOOL_HANDLER_TOKEN,
|
|
121
|
-
methodName: definition.name,
|
|
122
|
-
});
|
|
123
|
-
}
|
|
124
|
-
|
|
125
|
-
/**
|
|
126
|
-
* Get the handler function for a dynamic tool.
|
|
127
|
-
* Used internally by McpToolsHandler to execute dynamic tools.
|
|
128
|
-
*
|
|
129
|
-
* @param toolName - The name of the tool
|
|
130
|
-
* @returns The handler function, or undefined if not found
|
|
131
|
-
*/
|
|
132
|
-
getHandler(toolName: string): DynamicToolHandler | undefined {
|
|
133
|
-
return globalHandlers.get(this.mcpModuleId)?.get(toolName);
|
|
134
|
-
}
|
|
135
|
-
|
|
136
|
-
/**
|
|
137
|
-
* Get the handler function for a dynamic tool by module ID.
|
|
138
|
-
* Static method used when the module ID is known but the correct
|
|
139
|
-
* McpToolBuilder instance may not be available.
|
|
140
|
-
*
|
|
141
|
-
* @param mcpModuleId - The module ID to look up handlers for
|
|
142
|
-
* @param toolName - The name of the tool
|
|
143
|
-
* @returns The handler function, or undefined if not found
|
|
144
|
-
*/
|
|
145
|
-
static getHandlerByModuleId(
|
|
146
|
-
mcpModuleId: string,
|
|
147
|
-
toolName: string,
|
|
148
|
-
): DynamicToolHandler | undefined {
|
|
149
|
-
return globalHandlers.get(mcpModuleId)?.get(toolName);
|
|
150
|
-
}
|
|
151
|
-
}
|