@jissp/nestjs-mcp-server 0.0.1 → 0.0.3
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 +6 -6
- package/dist/lib/mcp-server/base.executor.d.ts +2 -2
- package/dist/lib/mcp-server/decorators/index.d.ts +1 -0
- package/dist/lib/mcp-server/decorators/index.js +1 -0
- package/dist/lib/mcp-server/decorators/index.js.map +1 -1
- package/dist/lib/mcp-server/decorators/mcp-schema-property.decorator.d.ts +12 -0
- package/dist/lib/mcp-server/decorators/mcp-schema-property.decorator.js +33 -0
- package/dist/lib/mcp-server/decorators/mcp-schema-property.decorator.js.map +1 -0
- package/dist/lib/mcp-server/decorators/mcp-tool.decorator.d.ts +14 -1
- package/dist/lib/mcp-server/decorators/mcp-tool.decorator.js +42 -1
- package/dist/lib/mcp-server/decorators/mcp-tool.decorator.js.map +1 -1
- package/dist/lib/mcp-server/guards/mcp-session-id.guard.js.map +1 -1
- package/dist/lib/mcp-server/mcp-metadata-registry.service.d.ts +3 -1
- package/dist/lib/mcp-server/mcp-metadata-registry.service.js +17 -5
- package/dist/lib/mcp-server/mcp-metadata-registry.service.js.map +1 -1
- package/dist/lib/mcp-server/mcp-server.controller.d.ts +1 -1
- package/dist/lib/mcp-server/mcp-server.controller.js +2 -2
- package/dist/lib/mcp-server/mcp-server.controller.js.map +1 -1
- package/dist/lib/mcp-server/mcp-server.service.js +1 -1
- package/dist/lib/mcp-server/mcp-server.service.js.map +1 -1
- package/dist/lib/mcp-server/mcp-server.types.d.ts +7 -4
- package/dist/lib/metadata-scanner/metadata-scanner.module.js +1 -1
- package/dist/lib/metadata-scanner/metadata-scanner.module.js.map +1 -1
- package/dist/lib/metadata-scanner/metadata-scanner.service.d.ts +2 -1
- package/dist/lib/metadata-scanner/metadata-scanner.service.js +9 -4
- package/dist/lib/metadata-scanner/metadata-scanner.service.js.map +1 -1
- package/dist/lib/metadata-scanner/metadata-scanner.types.d.ts +4 -3
- package/package.json +4 -3
package/README.md
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
#
|
|
1
|
+
# nestjs-mcp-server
|
|
2
2
|
|
|
3
3
|
NestJS 기반의 Model Context Protocol (MCP) 서버 라이브러리입니다. 데코레이터와 메타데이터 스캐닝을 통해 MCP 리소스와 도구를 간편하게 정의하고 관리할 수 있습니다.
|
|
4
4
|
|
|
5
5
|
## 설치
|
|
6
6
|
|
|
7
7
|
```bash
|
|
8
|
-
npm install jissp-mcp-server
|
|
8
|
+
npm install @jissp/nestjs-mcp-server
|
|
9
9
|
```
|
|
10
10
|
|
|
11
11
|
## 주요 기능
|
|
@@ -24,7 +24,7 @@ npm install jissp-mcp-server-nestjs
|
|
|
24
24
|
|
|
25
25
|
```typescript
|
|
26
26
|
import { Module } from '@nestjs/common';
|
|
27
|
-
import { McpServerModule } from 'jissp-mcp-server
|
|
27
|
+
import { McpServerModule } from '@jissp/nestjs-mcp-server';
|
|
28
28
|
|
|
29
29
|
@Module({
|
|
30
30
|
imports: [
|
|
@@ -41,7 +41,7 @@ export class AppModule {
|
|
|
41
41
|
|
|
42
42
|
```typescript
|
|
43
43
|
import { Module } from '@nestjs/common';
|
|
44
|
-
import { McpServerModule } from 'jissp-mcp-server
|
|
44
|
+
import { McpServerModule } from '@jissp/nestjs-mcp-server';
|
|
45
45
|
import { MyToolExecutor } from './my-tool.executor';
|
|
46
46
|
import { MyResourceService } from './my-resource.service';
|
|
47
47
|
|
|
@@ -62,7 +62,7 @@ export class MyFeatureModule {
|
|
|
62
62
|
|
|
63
63
|
```typescript
|
|
64
64
|
import { Injectable } from '@nestjs/common';
|
|
65
|
-
import { McpTool, BaseExecutor, JsonRpcCallRequest } from 'jissp-mcp-server
|
|
65
|
+
import { McpTool, BaseExecutor, JsonRpcCallRequest } from '@jissp/nestjs-mcp-server';
|
|
66
66
|
|
|
67
67
|
@Injectable()
|
|
68
68
|
export class MyToolExecutor implements BaseExecutor {
|
|
@@ -91,7 +91,7 @@ export class MyToolExecutor implements BaseExecutor {
|
|
|
91
91
|
|
|
92
92
|
```typescript
|
|
93
93
|
import { Injectable } from '@nestjs/common';
|
|
94
|
-
import { McpResource } from 'jissp-mcp-server
|
|
94
|
+
import { McpResource } from '@jissp/nestjs-mcp-server';
|
|
95
95
|
|
|
96
96
|
@Injectable()
|
|
97
97
|
export class MyResourceService {
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { JsonRpcToolRequest } from './mcp-server.types';
|
|
2
2
|
export interface BaseExecutor<T = unknown> {
|
|
3
|
-
execute: (request:
|
|
3
|
+
execute: (request: JsonRpcToolRequest) => T | Promise<T>;
|
|
4
4
|
}
|
|
@@ -16,4 +16,5 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
|
16
16
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
17
|
__exportStar(require("./mcp-tool.decorator"), exports);
|
|
18
18
|
__exportStar(require("./mcp-resource.decorator"), exports);
|
|
19
|
+
__exportStar(require("./mcp-schema-property.decorator"), exports);
|
|
19
20
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../lib/mcp-server/decorators/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,uDAAqC;AACrC,2DAAyC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../lib/mcp-server/decorators/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,uDAAqC;AACrC,2DAAyC;AACzC,kEAAgD"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import 'reflect-metadata';
|
|
2
|
+
export declare const MCP_SCHEMA_PROPERTIES_METADATA = "MCP_SCHEMA_PROPERTIES_METADATA";
|
|
3
|
+
export interface McpSchemaPropertyOptions {
|
|
4
|
+
type: string;
|
|
5
|
+
description: string;
|
|
6
|
+
isRequired: boolean;
|
|
7
|
+
}
|
|
8
|
+
export type McpSchemaPropertyOptionsMap = Map<string, McpSchemaPropertyOptions>;
|
|
9
|
+
type PropertyDecoratorArgs = Parameters<PropertyDecorator>;
|
|
10
|
+
export declare const McpSchemaProperty: (options: McpSchemaPropertyOptions) => PropertyDecorator;
|
|
11
|
+
export declare function getMcpSchemaPropertiesMetadata(target: PropertyDecoratorArgs[0]): McpSchemaPropertyOptionsMap;
|
|
12
|
+
export {};
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.McpSchemaProperty = exports.MCP_SCHEMA_PROPERTIES_METADATA = void 0;
|
|
4
|
+
exports.getMcpSchemaPropertiesMetadata = getMcpSchemaPropertiesMetadata;
|
|
5
|
+
require("reflect-metadata");
|
|
6
|
+
exports.MCP_SCHEMA_PROPERTIES_METADATA = 'MCP_SCHEMA_PROPERTIES_METADATA';
|
|
7
|
+
const McpSchemaProperty = (options) => {
|
|
8
|
+
return (...args) => {
|
|
9
|
+
const [target, propertyKey] = args;
|
|
10
|
+
if (!propertyKey) {
|
|
11
|
+
return;
|
|
12
|
+
}
|
|
13
|
+
const key = String(propertyKey);
|
|
14
|
+
updateMcpSchemaPropertiesMetadata(target, key, options);
|
|
15
|
+
};
|
|
16
|
+
};
|
|
17
|
+
exports.McpSchemaProperty = McpSchemaProperty;
|
|
18
|
+
function getMcpSchemaPropertiesMetadata(target) {
|
|
19
|
+
const metadata = Reflect.getMetadata(exports.MCP_SCHEMA_PROPERTIES_METADATA, target);
|
|
20
|
+
if (!metadata) {
|
|
21
|
+
return new Map();
|
|
22
|
+
}
|
|
23
|
+
return metadata;
|
|
24
|
+
}
|
|
25
|
+
function setMcpSchemaPropertiesMetadata(mcpSchemaPropertiesMetadata, target, key, options) {
|
|
26
|
+
mcpSchemaPropertiesMetadata.set(key, options);
|
|
27
|
+
Reflect.defineMetadata(exports.MCP_SCHEMA_PROPERTIES_METADATA, mcpSchemaPropertiesMetadata, target);
|
|
28
|
+
}
|
|
29
|
+
function updateMcpSchemaPropertiesMetadata(target, key, options) {
|
|
30
|
+
const mcpSchemaPropertiesMetadata = getMcpSchemaPropertiesMetadata(target);
|
|
31
|
+
setMcpSchemaPropertiesMetadata(mcpSchemaPropertiesMetadata, target, key, options);
|
|
32
|
+
}
|
|
33
|
+
//# sourceMappingURL=mcp-schema-property.decorator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcp-schema-property.decorator.js","sourceRoot":"","sources":["../../../../lib/mcp-server/decorators/mcp-schema-property.decorator.ts"],"names":[],"mappings":";;;AAgCA,wEAYC;AA5CD,4BAA0B;AAEb,QAAA,8BAA8B,GAAG,gCAAgC,CAAC;AAcxE,MAAM,iBAAiB,GAAG,CAC/B,OAAiC,EACd,EAAE;IACrB,OAAO,CAAC,GAAG,IAA2B,EAAE,EAAE;QACxC,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,GAAG,IAAI,CAAC;QAEnC,IAAI,CAAC,WAAW,EAAE,CAAC;YACjB,OAAO;QACT,CAAC;QAED,MAAM,GAAG,GAAG,MAAM,CAAC,WAAW,CAAC,CAAC;QAEhC,iCAAiC,CAAC,MAAM,EAAE,GAAG,EAAE,OAAO,CAAC,CAAC;IAC1D,CAAC,CAAC;AACJ,CAAC,CAAC;AAdW,QAAA,iBAAiB,qBAc5B;AAEF,SAAgB,8BAA8B,CAC5C,MAAgC;IAEhC,MAAM,QAAQ,GAAG,OAAO,CAAC,WAAW,CAClC,sCAA8B,EAC9B,MAAM,CAC8B,CAAC;IACvC,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,OAAO,IAAI,GAAG,EAAoC,CAAC;IACrD,CAAC;IAED,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,SAAS,8BAA8B,CACrC,2BAAwD,EACxD,MAAgC,EAChC,GAAW,EACX,OAAiC;IAEjC,2BAA2B,CAAC,GAAG,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;IAE9C,OAAO,CAAC,cAAc,CACpB,sCAA8B,EAC9B,2BAA2B,EAC3B,MAAM,CACP,CAAC;AACJ,CAAC;AAED,SAAS,iCAAiC,CACxC,MAAgC,EAChC,GAAW,EACX,OAAiC;IAEjC,MAAM,2BAA2B,GAAG,8BAA8B,CAAC,MAAM,CAAC,CAAC;IAC3E,8BAA8B,CAC5B,2BAA2B,EAC3B,MAAM,EACN,GAAG,EACH,OAAO,CACR,CAAC;AACJ,CAAC"}
|
|
@@ -1,7 +1,20 @@
|
|
|
1
|
+
import 'reflect-metadata';
|
|
1
2
|
export declare const MCP_TOOL_METADATA = "MCP_TOOL_METADATA";
|
|
3
|
+
type ConstructorType = new (...args: any[]) => any;
|
|
2
4
|
export interface McpToolOptions {
|
|
3
5
|
name: string;
|
|
4
6
|
description?: string;
|
|
5
|
-
inputSchema?:
|
|
7
|
+
inputSchema?: JsonSchema | ConstructorType;
|
|
6
8
|
}
|
|
9
|
+
export interface JsonSchema {
|
|
10
|
+
type: 'object';
|
|
11
|
+
properties: InputSchemaProperties;
|
|
12
|
+
required?: string[];
|
|
13
|
+
}
|
|
14
|
+
interface InputSchemaProperty {
|
|
15
|
+
type: string;
|
|
16
|
+
description?: string;
|
|
17
|
+
}
|
|
18
|
+
type InputSchemaProperties = Record<string, InputSchemaProperty>;
|
|
7
19
|
export declare const McpTool: (options: McpToolOptions) => import("@nestjs/common").CustomDecorator<string>;
|
|
20
|
+
export {};
|
|
@@ -2,7 +2,48 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.McpTool = exports.MCP_TOOL_METADATA = void 0;
|
|
4
4
|
const common_1 = require("@nestjs/common");
|
|
5
|
+
require("reflect-metadata");
|
|
6
|
+
const mcp_schema_property_decorator_1 = require("./mcp-schema-property.decorator");
|
|
5
7
|
exports.MCP_TOOL_METADATA = 'MCP_TOOL_METADATA';
|
|
6
|
-
const McpTool = (options) =>
|
|
8
|
+
const McpTool = (options) => {
|
|
9
|
+
if (isConstructorType(options.inputSchema)) {
|
|
10
|
+
options.inputSchema = generateInputSchema(options.inputSchema);
|
|
11
|
+
}
|
|
12
|
+
return (0, common_1.SetMetadata)(exports.MCP_TOOL_METADATA, options);
|
|
13
|
+
};
|
|
7
14
|
exports.McpTool = McpTool;
|
|
15
|
+
function isConstructorType(value) {
|
|
16
|
+
return typeof value === 'function';
|
|
17
|
+
}
|
|
18
|
+
function generateInputSchema(inputSchemaClass) {
|
|
19
|
+
const schemaPropertyEntries = schemaPropertiesToEntries((0, mcp_schema_property_decorator_1.getMcpSchemaPropertiesMetadata)(inputSchemaClass.prototype));
|
|
20
|
+
const properties = buildSchemaProperties(schemaPropertyEntries);
|
|
21
|
+
const required = buildRequired(schemaPropertyEntries);
|
|
22
|
+
return {
|
|
23
|
+
type: 'object',
|
|
24
|
+
properties,
|
|
25
|
+
required: required,
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
function schemaPropertiesToEntries(schemaProperties) {
|
|
29
|
+
const schemaPropertiesEntries = [];
|
|
30
|
+
schemaProperties.forEach((value, key) => {
|
|
31
|
+
schemaPropertiesEntries.push([key, value]);
|
|
32
|
+
});
|
|
33
|
+
return schemaPropertiesEntries;
|
|
34
|
+
}
|
|
35
|
+
function buildSchemaProperties(entries) {
|
|
36
|
+
const propertyEntries = entries.map(([key, { type, description }]) => [
|
|
37
|
+
key,
|
|
38
|
+
{
|
|
39
|
+
type,
|
|
40
|
+
description,
|
|
41
|
+
},
|
|
42
|
+
]);
|
|
43
|
+
return Object.fromEntries(propertyEntries);
|
|
44
|
+
}
|
|
45
|
+
function buildRequired(entries) {
|
|
46
|
+
const filteredEntries = entries.filter(([, value]) => value.isRequired);
|
|
47
|
+
return filteredEntries.map(([name]) => name);
|
|
48
|
+
}
|
|
8
49
|
//# sourceMappingURL=mcp-tool.decorator.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mcp-tool.decorator.js","sourceRoot":"","sources":["../../../../lib/mcp-server/decorators/mcp-tool.decorator.ts"],"names":[],"mappings":";;;AAAA,2CAA6C;
|
|
1
|
+
{"version":3,"file":"mcp-tool.decorator.js","sourceRoot":"","sources":["../../../../lib/mcp-server/decorators/mcp-tool.decorator.ts"],"names":[],"mappings":";;;AAAA,2CAA6C;AAC7C,4BAA0B;AAC1B,mFAIyC;AAE5B,QAAA,iBAAiB,GAAG,mBAAmB,CAAC;AAsB9C,MAAM,OAAO,GAAG,CAAC,OAAuB,EAAE,EAAE;IACjD,IAAI,iBAAiB,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE,CAAC;QAC3C,OAAO,CAAC,WAAW,GAAG,mBAAmB,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;IACjE,CAAC;IAED,OAAO,IAAA,oBAAW,EAAC,yBAAiB,EAAE,OAAO,CAAC,CAAC;AACjD,CAAC,CAAC;AANW,QAAA,OAAO,WAMlB;AAEF,SAAS,iBAAiB,CAAC,KAAU;IACnC,OAAO,OAAO,KAAK,KAAK,UAAU,CAAC;AACrC,CAAC;AAED,SAAS,mBAAmB,CAAC,gBAAiC;IAC5D,MAAM,qBAAqB,GAAG,yBAAyB,CACrD,IAAA,8DAA8B,EAAC,gBAAgB,CAAC,SAAS,CAAC,CAC3D,CAAC;IAEF,MAAM,UAAU,GAA0B,qBAAqB,CAC7D,qBAAqB,CACtB,CAAC;IACF,MAAM,QAAQ,GAAG,aAAa,CAAC,qBAAqB,CAAC,CAAC;IAEtD,OAAO;QACL,IAAI,EAAE,QAAQ;QACd,UAAU;QACV,QAAQ,EAAE,QAAQ;KACnB,CAAC;AACJ,CAAC;AAED,SAAS,yBAAyB,CAChC,gBAA6C;IAE7C,MAAM,uBAAuB,GAAyC,EAAE,CAAC;IAEzE,gBAAgB,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE;QACtC,uBAAuB,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC;IAC7C,CAAC,CAAC,CAAC;IAEH,OAAO,uBAAuB,CAAC;AACjC,CAAC;AAED,SAAS,qBAAqB,CAAC,OAA6C;IAC1E,MAAM,eAAe,GAAG,OAAO,CAAC,GAAG,CACjC,CAAC,CAAC,GAAG,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC,EAAiC,EAAE,CAAC;QAC/D,GAAG;QACH;YACE,IAAI;YACJ,WAAW;SACZ;KACF,CACF,CAAC;IAEF,OAAO,MAAM,CAAC,WAAW,CAAC,eAAe,CAAC,CAAC;AAC7C,CAAC;AAED,SAAS,aAAa,CACpB,OAA6C;IAE7C,MAAM,eAAe,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;IAExE,OAAO,eAAe,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC;AAC/C,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mcp-session-id.guard.js","sourceRoot":"","sources":["../../../../lib/mcp-server/guards/mcp-session-id.guard.ts"],"names":[],"mappings":";;;;;;;;;
|
|
1
|
+
{"version":3,"file":"mcp-session-id.guard.js","sourceRoot":"","sources":["../../../../lib/mcp-server/guards/mcp-session-id.guard.ts"],"names":[],"mappings":";;;;;;;;;AAAA,2CAKwB;AAKjB,IAAM,iBAAiB,GAAvB,MAAM,iBAAiB;IAC5B,WAAW,CAAC,OAAyB;QACnC,MAAM,OAAO,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC,UAAU,EAAW,CAAC;QAC7D,MAAM,IAAI,GAAG,OAAO,CAAC,IAAsB,CAAC;QAG5C,IAAI,IAAI,CAAC,MAAM,KAAK,YAAY,EAAE,CAAC;YACjC,OAAO,IAAI,CAAC;QACd,CAAC;QAED,MAAM,SAAS,GAAG,OAAO,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC;QACpD,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,MAAM,IAAI,4BAAmB,CAAC,+BAA+B,CAAC,CAAC;QACjE,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC;CACF,CAAA;AAjBY,8CAAiB;4BAAjB,iBAAiB;IAD7B,IAAA,mBAAU,GAAE;GACA,iBAAiB,CAiB7B"}
|
|
@@ -14,8 +14,10 @@ export declare class McpMetadataRegistryService implements OnModuleInit {
|
|
|
14
14
|
getToolExecutor(name: string): BaseExecutor<unknown> | undefined;
|
|
15
15
|
getResources(): McpResourceOptions[];
|
|
16
16
|
getResourceHandler(uri: string): {
|
|
17
|
-
handler:
|
|
17
|
+
handler: CallableFunction;
|
|
18
18
|
params: Record<string, string>;
|
|
19
19
|
} | null;
|
|
20
20
|
private matchUri;
|
|
21
|
+
private isBaseExecutor;
|
|
22
|
+
private isCallableFunction;
|
|
21
23
|
}
|
|
@@ -28,9 +28,11 @@ let McpMetadataRegistryService = class McpMetadataRegistryService {
|
|
|
28
28
|
const metadataList = this.metadataScanner.scan({
|
|
29
29
|
metadataKey: decorators_1.MCP_TOOL_METADATA,
|
|
30
30
|
});
|
|
31
|
-
metadataList.forEach(({ metadata, instance }) => {
|
|
32
|
-
|
|
33
|
-
|
|
31
|
+
metadataList.forEach(({ metadata, instance, isClassMetadata }) => {
|
|
32
|
+
if (isClassMetadata || !this.isBaseExecutor(instance)) {
|
|
33
|
+
return;
|
|
34
|
+
}
|
|
35
|
+
this.tools.set(metadata.name, {
|
|
34
36
|
executor: instance,
|
|
35
37
|
metadata,
|
|
36
38
|
});
|
|
@@ -40,7 +42,10 @@ let McpMetadataRegistryService = class McpMetadataRegistryService {
|
|
|
40
42
|
const metadataList = this.metadataScanner.scan({
|
|
41
43
|
metadataKey: decorators_1.MCP_RESOURCE_METADATA,
|
|
42
44
|
});
|
|
43
|
-
metadataList.forEach(({ metadata, instance, methodName }) => {
|
|
45
|
+
metadataList.forEach(({ metadata, instance, methodName, isClassMetadata }) => {
|
|
46
|
+
if (isClassMetadata || !this.isCallableFunction(instance, methodName)) {
|
|
47
|
+
return;
|
|
48
|
+
}
|
|
44
49
|
this.resources.set(metadata.uri, {
|
|
45
50
|
handler: instance[methodName].bind(instance),
|
|
46
51
|
metadata,
|
|
@@ -76,14 +81,21 @@ let McpMetadataRegistryService = class McpMetadataRegistryService {
|
|
|
76
81
|
});
|
|
77
82
|
const regex = new RegExp(`^${regexSource}$`);
|
|
78
83
|
const match = uri.match(regex);
|
|
79
|
-
if (!match)
|
|
84
|
+
if (!match) {
|
|
80
85
|
return null;
|
|
86
|
+
}
|
|
81
87
|
const params = {};
|
|
82
88
|
paramNames.forEach((name, index) => {
|
|
83
89
|
params[name] = decodeURIComponent(match[index + 1]);
|
|
84
90
|
});
|
|
85
91
|
return params;
|
|
86
92
|
}
|
|
93
|
+
isBaseExecutor(instance) {
|
|
94
|
+
return this.isCallableFunction(instance, 'execute');
|
|
95
|
+
}
|
|
96
|
+
isCallableFunction(instance, methodName) {
|
|
97
|
+
return methodName in instance && typeof instance[methodName] === 'function';
|
|
98
|
+
}
|
|
87
99
|
};
|
|
88
100
|
exports.McpMetadataRegistryService = McpMetadataRegistryService;
|
|
89
101
|
exports.McpMetadataRegistryService = McpMetadataRegistryService = __decorate([
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mcp-metadata-registry.service.js","sourceRoot":"","sources":["../../../lib/mcp-server/mcp-metadata-registry.service.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,2CAA0D;AAC1D,0DAA6D;AAC7D,6CAKsB;AAIf,IAAM,0BAA0B,GAAhC,MAAM,0BAA0B;IAUR;IATrB,KAAK,GAAG,IAAI,GAAG,EAGpB,CAAC;IACI,SAAS,GAAG,IAAI,GAAG,EAGxB,CAAC;IAEJ,YAA6B,eAAuC;QAAvC,oBAAe,GAAf,eAAe,CAAwB;IAAG,CAAC;IAExE,YAAY;QACV,IAAI,CAAC,SAAS,EAAE,CAAC;QACjB,IAAI,CAAC,aAAa,EAAE,CAAC;IACvB,CAAC;IAEO,SAAS;QACf,MAAM,YAAY,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,
|
|
1
|
+
{"version":3,"file":"mcp-metadata-registry.service.js","sourceRoot":"","sources":["../../../lib/mcp-server/mcp-metadata-registry.service.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
+
import { MessageEvent } from '@nestjs/common';
|
|
1
2
|
import type { Request, Response } from 'express';
|
|
2
3
|
import { Observable } from 'rxjs';
|
|
3
|
-
import { MessageEvent } from '@nestjs/common';
|
|
4
4
|
import type { JsonRpcRequest } from './mcp-server.types';
|
|
5
5
|
import { McpServerService } from './mcp-server.service';
|
|
6
6
|
export declare class McpServerController {
|
|
@@ -13,10 +13,10 @@ var __param = (this && this.__param) || function (paramIndex, decorator) {
|
|
|
13
13
|
};
|
|
14
14
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
15
|
exports.McpServerController = void 0;
|
|
16
|
-
const rxjs_1 = require("rxjs");
|
|
17
16
|
const common_1 = require("@nestjs/common");
|
|
18
|
-
const
|
|
17
|
+
const rxjs_1 = require("rxjs");
|
|
19
18
|
const guards_1 = require("./guards");
|
|
19
|
+
const mcp_server_service_1 = require("./mcp-server.service");
|
|
20
20
|
let McpServerController = class McpServerController {
|
|
21
21
|
mcpService;
|
|
22
22
|
eventSubject = new rxjs_1.Subject();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mcp-server.controller.js","sourceRoot":"","sources":["../../../lib/mcp-server/mcp-server.controller.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"mcp-server.controller.js","sourceRoot":"","sources":["../../../lib/mcp-server/mcp-server.controller.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,2CAWwB;AAExB,+BAA2C;AAC3C,qCAA6C;AAE7C,6DAAwD;AAGjD,IAAM,mBAAmB,GAAzB,MAAM,mBAAmB;IAGD;IAFrB,YAAY,GAAG,IAAI,cAAO,EAAgB,CAAC;IAEnD,YAA6B,UAA4B;QAA5B,eAAU,GAAV,UAAU,CAAkB;IAAG,CAAC;IAO7D,GAAG,CAAQ,GAAY;QACrB,MAAM,SAAS,GAAG,GAAG,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC;QAChD,OAAO,CAAC,GAAG,CACT,kCAAkC,SAAS,EAAE,QAAQ,EAAE,IAAI,SAAS,EAAE,CACvE,CAAC;QAEF,OAAO,IAAI,CAAC,YAAY,CAAC,YAAY,EAAE,CAAC;IAC1C,CAAC;IAOK,AAAN,KAAK,CAAC,qBAAqB,CACjB,IAAoB,EACrB,GAAa;QAEpB,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;QAC3D,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,OAAO,GAAG,CAAC,MAAM,CAAC,mBAAU,CAAC,QAAQ,CAAC,CAAC,IAAI,EAAE,CAAC;QAChD,CAAC;QAED,IAAI,IAAI,CAAC,MAAM,KAAK,YAAY,EAAE,CAAC;YACjC,GAAG,CAAC,SAAS,CAAC,gBAAgB,EAAE,MAAM,CAAC,UAAU,EAAE,CAAC,CAAC;QACvD,CAAC;QAED,OAAO,GAAG,CAAC,MAAM,CAAC,mBAAU,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;IACzD,CAAC;CAQF,CAAA;AA9CY,kDAAmB;AAU9B;IAFC,IAAA,YAAG,GAAE;IACL,IAAA,YAAG,GAAE;IACD,WAAA,IAAA,YAAG,GAAE,CAAA;;;oCAAgB,iBAAU;8CAOnC;AAOK;IAFL,IAAA,kBAAS,EAAC,0BAAiB,CAAC;IAC5B,IAAA,aAAI,GAAE;IAEJ,WAAA,IAAA,aAAI,GAAE,CAAA;IACN,WAAA,IAAA,YAAG,GAAE,CAAA;;;;gEAYP;8BAtCU,mBAAmB;IAD/B,IAAA,mBAAU,EAAC,KAAK,CAAC;qCAIyB,qCAAgB;GAH9C,mBAAmB,CA8C/B"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mcp-server.service.js","sourceRoot":"","sources":["../../../lib/mcp-server/mcp-server.service.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,2CAA4C;
|
|
1
|
+
{"version":3,"file":"mcp-server.service.js","sourceRoot":"","sources":["../../../lib/mcp-server/mcp-server.service.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,2CAA4C;AAQ5C,mFAA6E;AAOtE,IAAM,gBAAgB,GAAtB,MAAM,gBAAgB;IAYE;IAXZ,cAAc,GAAG,IAAI,GAAG,CAGvC;QACA,CAAC,YAAY,EAAE,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC1C,CAAC,YAAY,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACzC,CAAC,YAAY,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACxC,CAAC,gBAAgB,EAAE,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAChD,CAAC,gBAAgB,EAAE,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;KACjD,CAAC,CAAC;IAEH,YAA6B,QAAoC;QAApC,aAAQ,GAAR,QAAQ,CAA4B;IAAG,CAAC;IAE9D,KAAK,CAAC,aAAa,CAAC,OAAuB;QAChD,MAAM,EAAE,MAAM,EAAE,EAAE,EAAE,GAAG,OAAO,CAAC;QAE/B,IAAI,CAAC;YACH,MAAM,aAAa,GAAG,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;YACtD,IAAI,CAAC,aAAa,EAAE,CAAC;gBACnB,OAAO,IAAI,CAAC;YACd,CAAC;YAED,OAAO,aAAa,CAAC,OAAO,CAAC,CAAC;QAChC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO;gBACL,MAAM,EAAE;oBACN,OAAO,EAAE,KAAK;oBACd,EAAE;oBACF,KAAK,EAAE;wBACL,IAAI,EAAE,CAAC,KAAK;wBACZ,OAAO,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe;qBAClE;iBACF;aACF,CAAC;QACJ,CAAC;IACH,CAAC;IAMO,UAAU,CAAC,EAAE,EAAE,EAAkB;QACvC,OAAO,IAAI,CAAC,UAAU,CAAC,EAAE,EAAE;YACzB,eAAe,EAAE,YAAY;YAC7B,YAAY,EAAE;gBACZ,KAAK,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE;gBAC5B,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE;aAClD;YACD,UAAU,EAAE;gBACV,IAAI,EAAE,mBAAmB;gBACzB,OAAO,EAAE,OAAO;aACjB;SACF,CAAC,CAAC;IACL,CAAC;IAMO,SAAS,CAAC,EAAE,EAAE,EAAkB;QACtC,OAAO,IAAI,CAAC,UAAU,CAAC,EAAE,EAAE;YACzB,KAAK,EAAE,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;gBAC1C,IAAI,EAAE,CAAC,CAAC,IAAI;gBACZ,WAAW,EAAE,CAAC,CAAC,WAAW;gBAC1B,WAAW,EAAE,CAAC,CAAC,WAAW,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE;aACjD,CAAC,CAAC;SACJ,CAAC,CAAC;IACL,CAAC;IAMO,KAAK,CAAC,QAAQ,CAAC,OAA2B;QAChD,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC;QAC/B,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QAC5D,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,MAAM,IAAI,KAAK,CAAC,mBAAmB,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;QACpD,CAAC;QAGD,MAAM,eAAe,GAAG,MAAM,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QAExD,OAAO,IAAI,CAAC,UAAU,CAAC,EAAE,EAAE;YACzB,OAAO,EAAE;gBACP;oBACE,IAAI,EAAE,MAAM;oBACZ,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,eAAe,CAAC;iBACtC;aACF;YACD,OAAO,EAAE,KAAK;SACf,CAAC,CAAC;IACL,CAAC;IAMO,YAAY,CAAC,EAAE,EAAE,EAAkB;QACzC,OAAO,IAAI,CAAC,UAAU,CAAC,EAAE,EAAE;YACzB,SAAS,EAAE,IAAI,CAAC,QAAQ,CAAC,YAAY,EAAE;SACxC,CAAC,CAAC;IACL,CAAC;IAMO,KAAK,CAAC,YAAY,CACxB,OAA8C;QAE9C,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC;QAC/B,MAAM,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC;QACvB,MAAM,WAAW,GAAG,IAAI,CAAC,QAAQ,CAAC,kBAAkB,CAAC,GAAG,CAAC,CAAC;QAE1D,IAAI,CAAC,WAAW,EAAE,CAAC;YACjB,MAAM,IAAI,KAAK,CAAC,uBAAuB,GAAG,EAAE,CAAC,CAAC;QAChD,CAAC;QAED,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,GAAG,WAAW,CAAC;QAGnD,MAAM,kBAAkB,GAAG;YACzB,GAAG,OAAO;YACV,MAAM,EAAE;gBACN,SAAS,EAAE,SAAS;aACrB;SACF,CAAC;QAEF,MAAM,eAAe,GAAG,MAAM,OAAO,CAAC,kBAAkB,CAAC,CAAC;QAE1D,OAAO,IAAI,CAAC,UAAU,CAAC,EAAE,EAAE;YACzB,QAAQ,EAAE;gBACR;oBACE,GAAG;oBACH,QAAQ,EAAE,kBAAkB;oBAC5B,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,eAAe,CAAC;iBACtC;aACF;SACF,CAAC,CAAC;IACL,CAAC;IAOO,UAAU,CAChB,EAAwB,EACxB,MAAS;QAET,OAAO;YACL,MAAM,EAAE;gBACN,OAAO,EAAE,KAAK;gBACd,EAAE;gBACF,MAAM;aACP;SACF,CAAC;IACJ,CAAC;CACF,CAAA;AAhKY,4CAAgB;2BAAhB,gBAAgB;IAD5B,IAAA,mBAAU,GAAE;qCAa4B,0DAA0B;GAZtD,gBAAgB,CAgK5B"}
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
import { ModuleMetadata, Provider } from '@nestjs/common';
|
|
2
2
|
import { BaseExecutor } from './base.executor';
|
|
3
|
-
export interface McpServerFeatureOptions extends Pick<ModuleMetadata, 'imports'> {
|
|
4
|
-
executors: Provider<BaseExecutor>[];
|
|
5
|
-
}
|
|
6
3
|
export interface McpServerConfig {
|
|
7
4
|
name: string;
|
|
8
5
|
version: string;
|
|
9
6
|
description?: string;
|
|
10
7
|
}
|
|
8
|
+
export interface McpServerFeatureOptions extends Pick<ModuleMetadata, 'imports'> {
|
|
9
|
+
executors: Provider<BaseExecutor>[];
|
|
10
|
+
}
|
|
11
11
|
export interface CommonJsonRpc {
|
|
12
12
|
jsonrpc: '2.0';
|
|
13
13
|
id?: number | string;
|
|
@@ -16,10 +16,13 @@ export interface JsonRpcRequest<T = any> extends CommonJsonRpc {
|
|
|
16
16
|
method: string;
|
|
17
17
|
params: T;
|
|
18
18
|
}
|
|
19
|
-
export type
|
|
19
|
+
export type JsonRpcToolRequest<T = unknown> = JsonRpcRequest<{
|
|
20
20
|
name: string;
|
|
21
21
|
arguments: T;
|
|
22
22
|
}>;
|
|
23
|
+
export interface JsonRpcResourceParams {
|
|
24
|
+
uri: string;
|
|
25
|
+
}
|
|
23
26
|
export interface JsonRpcResult<T = unknown> extends CommonJsonRpc {
|
|
24
27
|
result: T;
|
|
25
28
|
}
|
|
@@ -8,8 +8,8 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
|
|
|
8
8
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
9
|
exports.MetadataScannerModule = void 0;
|
|
10
10
|
const common_1 = require("@nestjs/common");
|
|
11
|
-
const metadata_scanner_service_1 = require("./metadata-scanner.service");
|
|
12
11
|
const core_1 = require("@nestjs/core");
|
|
12
|
+
const metadata_scanner_service_1 = require("./metadata-scanner.service");
|
|
13
13
|
let MetadataScannerModule = class MetadataScannerModule {
|
|
14
14
|
};
|
|
15
15
|
exports.MetadataScannerModule = MetadataScannerModule;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"metadata-scanner.module.js","sourceRoot":"","sources":["../../../lib/metadata-scanner/metadata-scanner.module.ts"],"names":[],"mappings":";;;;;;;;;AAAA,2CAAwC;AACxC,
|
|
1
|
+
{"version":3,"file":"metadata-scanner.module.js","sourceRoot":"","sources":["../../../lib/metadata-scanner/metadata-scanner.module.ts"],"names":[],"mappings":";;;;;;;;;AAAA,2CAAwC;AACxC,uCAA+C;AAC/C,yEAAoE;AAO7D,IAAM,qBAAqB,GAA3B,MAAM,qBAAqB;CAAG,CAAA;AAAxB,sDAAqB;gCAArB,qBAAqB;IALjC,IAAA,eAAM,EAAC;QACN,OAAO,EAAE,CAAC,sBAAe,CAAC;QAC1B,SAAS,EAAE,CAAC,iDAAsB,CAAC;QACnC,OAAO,EAAE,CAAC,iDAAsB,CAAC;KAClC,CAAC;GACW,qBAAqB,CAAG"}
|
|
@@ -4,6 +4,7 @@ export declare class MetadataScannerService {
|
|
|
4
4
|
private readonly reflector;
|
|
5
5
|
private readonly discovery;
|
|
6
6
|
constructor(reflector: Reflector, discovery: DiscoveryService);
|
|
7
|
-
scan(config: MetadataScannerConfig): ScannedMetadata[];
|
|
7
|
+
scan<Metadata = any>(config: MetadataScannerConfig): ScannedMetadata<any, Metadata>[];
|
|
8
8
|
private getMethodNames;
|
|
9
|
+
private isInstanceOfObject;
|
|
9
10
|
}
|
|
@@ -25,7 +25,7 @@ let MetadataScannerService = class MetadataScannerService {
|
|
|
25
25
|
const providers = this.discovery.getProviders();
|
|
26
26
|
const wrappers = [...controllers, ...providers];
|
|
27
27
|
wrappers.forEach(({ instance }) => {
|
|
28
|
-
if (!instance
|
|
28
|
+
if (!this.isInstanceOfObject(instance)) {
|
|
29
29
|
return;
|
|
30
30
|
}
|
|
31
31
|
const prototype = Object.getPrototypeOf(instance);
|
|
@@ -42,6 +42,7 @@ let MetadataScannerService = class MetadataScannerService {
|
|
|
42
42
|
instance,
|
|
43
43
|
methodName,
|
|
44
44
|
metadata,
|
|
45
|
+
isClassMetadata: methodName === 'constructor',
|
|
45
46
|
};
|
|
46
47
|
results.push(result);
|
|
47
48
|
});
|
|
@@ -51,11 +52,15 @@ let MetadataScannerService = class MetadataScannerService {
|
|
|
51
52
|
getMethodNames(prototype) {
|
|
52
53
|
return Object.getOwnPropertyNames(prototype).filter((methodName) => {
|
|
53
54
|
const descriptor = Object.getOwnPropertyDescriptor(prototype, methodName);
|
|
54
|
-
return
|
|
55
|
-
typeof descriptor.value === 'function' &&
|
|
56
|
-
methodName !== 'constructor');
|
|
55
|
+
return descriptor && typeof descriptor.value === 'function';
|
|
57
56
|
});
|
|
58
57
|
}
|
|
58
|
+
isInstanceOfObject(instance) {
|
|
59
|
+
if (!instance) {
|
|
60
|
+
return false;
|
|
61
|
+
}
|
|
62
|
+
return typeof instance === 'object';
|
|
63
|
+
}
|
|
59
64
|
};
|
|
60
65
|
exports.MetadataScannerService = MetadataScannerService;
|
|
61
66
|
exports.MetadataScannerService = MetadataScannerService = __decorate([
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"metadata-scanner.service.js","sourceRoot":"","sources":["../../../lib/metadata-scanner/metadata-scanner.service.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,2CAA4C;AAC5C,uCAA2D;AAOpD,IAAM,sBAAsB,GAA5B,MAAM,sBAAsB;IAEd;IACA;IAFnB,YACmB,SAAoB,EACpB,SAA2B;QAD3B,cAAS,GAAT,SAAS,CAAW;QACpB,cAAS,GAAT,SAAS,CAAkB;IAC3C,CAAC;IAKJ,IAAI,
|
|
1
|
+
{"version":3,"file":"metadata-scanner.service.js","sourceRoot":"","sources":["../../../lib/metadata-scanner/metadata-scanner.service.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,2CAA4C;AAC5C,uCAA2D;AAOpD,IAAM,sBAAsB,GAA5B,MAAM,sBAAsB;IAEd;IACA;IAFnB,YACmB,SAAoB,EACpB,SAA2B;QAD3B,cAAS,GAAT,SAAS,CAAW;QACpB,cAAS,GAAT,SAAS,CAAkB;IAC3C,CAAC;IAKJ,IAAI,CACF,MAA6B;QAE7B,MAAM,OAAO,GAAqC,EAAE,CAAC;QAErD,MAAM,WAAW,GAAG,IAAI,CAAC,SAAS,CAAC,cAAc,EAAE,CAAC;QACpD,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,YAAY,EAAE,CAAC;QAChD,MAAM,QAAQ,GAAG,CAAC,GAAG,WAAW,EAAE,GAAG,SAAS,CAAC,CAAC;QAEhD,QAAQ,CAAC,OAAO,CAAC,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE;YAChC,IAAI,CAAC,IAAI,CAAC,kBAAkB,CAAC,QAAQ,CAAC,EAAE,CAAC;gBACvC,OAAO;YACT,CAAC;YAED,MAAM,SAAS,GAAG,MAAM,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC;YAClD,IAAI,CAAC,SAAS,EAAE,CAAC;gBACf,OAAO;YACT,CAAC;YAED,MAAM,WAAW,GAAG,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC;YACnD,WAAW,CAAC,OAAO,CAAC,CAAC,UAAU,EAAE,EAAE;gBACjC,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CACjC,MAAM,CAAC,WAAW,EAClB,QAAQ,CAAC,UAAU,CAAC,CACrB,CAAC;gBACF,IAAI,CAAC,QAAQ,EAAE,CAAC;oBACd,OAAO;gBACT,CAAC;gBAED,MAAM,MAAM,GAAmC;oBAC7C,QAAQ;oBACR,UAAU;oBACV,QAAQ;oBACR,eAAe,EAAE,UAAU,KAAK,aAAa;iBAC9C,CAAC;gBAEF,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YACvB,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,OAAO,OAAO,CAAC;IACjB,CAAC;IAKO,cAAc,CAAC,SAAc;QACnC,OAAO,MAAM,CAAC,mBAAmB,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,CAAC,UAAU,EAAE,EAAE;YACjE,MAAM,UAAU,GAAG,MAAM,CAAC,wBAAwB,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;YAE1E,OAAO,UAAU,IAAI,OAAO,UAAU,CAAC,KAAK,KAAK,UAAU,CAAC;QAC9D,CAAC,CAAC,CAAC;IACL,CAAC;IAEO,kBAAkB,CAAC,QAAa;QACtC,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,OAAO,KAAK,CAAC;QACf,CAAC;QAED,OAAO,OAAO,QAAQ,KAAK,QAAQ,CAAC;IACtC,CAAC;CACF,CAAA;AAtEY,wDAAsB;iCAAtB,sBAAsB;IADlC,IAAA,mBAAU,GAAE;qCAGmB,gBAAS;QACT,uBAAgB;GAHnC,sBAAsB,CAsElC"}
|
|
@@ -1,7 +1,8 @@
|
|
|
1
|
-
export interface ScannedMetadata {
|
|
2
|
-
instance:
|
|
1
|
+
export interface ScannedMetadata<Instance = unknown, Metadata = any> {
|
|
2
|
+
instance: Instance;
|
|
3
|
+
metadata: Metadata;
|
|
3
4
|
methodName: string;
|
|
4
|
-
|
|
5
|
+
isClassMetadata: boolean;
|
|
5
6
|
}
|
|
6
7
|
export interface MetadataScannerConfig {
|
|
7
8
|
metadataKey: string | symbol;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@jissp/nestjs-mcp-server",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.3",
|
|
4
4
|
"description": "NestJS-based MCP Server with metadata scanning support",
|
|
5
5
|
"author": "jissp <jisspant@gmail.com>",
|
|
6
6
|
"private": false,
|
|
@@ -40,10 +40,11 @@
|
|
|
40
40
|
"metadata"
|
|
41
41
|
],
|
|
42
42
|
"scripts": {
|
|
43
|
-
"build": "tsc -p tsconfig.
|
|
43
|
+
"build": "tsc -p tsconfig.publish.json --outDir dist/lib --rootDir lib",
|
|
44
44
|
"format": "prettier --write \"src/**/*.ts\" \"test/**/*.ts\"",
|
|
45
45
|
"start": "nest start",
|
|
46
|
-
"test": "jest"
|
|
46
|
+
"test": "jest",
|
|
47
|
+
"publish": "npm publish --access public"
|
|
47
48
|
},
|
|
48
49
|
"peerDependencies": {
|
|
49
50
|
"@nestjs/common": "^11.0.1",
|