@jissp/nestjs-mcp-server 0.0.2 → 0.0.4

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 (54) hide show
  1. package/README.md +60 -7
  2. package/dist/lib/mcp-server/base.executor.d.ts +2 -2
  3. package/dist/lib/mcp-server/decorators/index.d.ts +1 -0
  4. package/dist/lib/mcp-server/decorators/index.js +1 -0
  5. package/dist/lib/mcp-server/decorators/index.js.map +1 -1
  6. package/dist/lib/mcp-server/decorators/mcp-resource.decorator.d.ts +1 -2
  7. package/dist/lib/mcp-server/decorators/mcp-resource.decorator.js +3 -5
  8. package/dist/lib/mcp-server/decorators/mcp-resource.decorator.js.map +1 -1
  9. package/dist/lib/mcp-server/decorators/mcp-schema-property.decorator.d.ts +7 -0
  10. package/dist/lib/mcp-server/decorators/mcp-schema-property.decorator.js +7 -0
  11. package/dist/lib/mcp-server/decorators/mcp-schema-property.decorator.js.map +1 -0
  12. package/dist/lib/mcp-server/decorators/mcp-tool.decorator.d.ts +14 -3
  13. package/dist/lib/mcp-server/decorators/mcp-tool.decorator.js +3 -5
  14. package/dist/lib/mcp-server/decorators/mcp-tool.decorator.js.map +1 -1
  15. package/dist/lib/mcp-server/guards/mcp-session-id.guard.js.map +1 -1
  16. package/dist/lib/mcp-server/index.d.ts +1 -0
  17. package/dist/lib/mcp-server/index.js +1 -0
  18. package/dist/lib/mcp-server/index.js.map +1 -1
  19. package/dist/lib/mcp-server/mcp-metadata-input-schema.builder.d.ts +10 -0
  20. package/dist/lib/mcp-server/mcp-metadata-input-schema.builder.js +57 -0
  21. package/dist/lib/mcp-server/mcp-metadata-input-schema.builder.js.map +1 -0
  22. package/dist/lib/mcp-server/mcp-metadata-registry.service.d.ts +6 -2
  23. package/dist/lib/mcp-server/mcp-metadata-registry.service.js +26 -9
  24. package/dist/lib/mcp-server/mcp-metadata-registry.service.js.map +1 -1
  25. package/dist/lib/mcp-server/mcp-server.controller.d.ts +1 -1
  26. package/dist/lib/mcp-server/mcp-server.controller.js +2 -2
  27. package/dist/lib/mcp-server/mcp-server.controller.js.map +1 -1
  28. package/dist/lib/mcp-server/mcp-server.module.js +6 -1
  29. package/dist/lib/mcp-server/mcp-server.module.js.map +1 -1
  30. package/dist/lib/mcp-server/mcp-server.service.js +1 -1
  31. package/dist/lib/mcp-server/mcp-server.service.js.map +1 -1
  32. package/dist/lib/mcp-server/mcp-server.types.d.ts +7 -4
  33. package/dist/lib/metadata-scanner/decorators/create-property.decorator.d.ts +5 -0
  34. package/dist/lib/metadata-scanner/decorators/create-property.decorator.js +35 -0
  35. package/dist/lib/metadata-scanner/decorators/create-property.decorator.js.map +1 -0
  36. package/dist/lib/metadata-scanner/decorators/index.d.ts +1 -0
  37. package/dist/lib/metadata-scanner/decorators/index.js +18 -0
  38. package/dist/lib/metadata-scanner/decorators/index.js.map +1 -0
  39. package/dist/lib/metadata-scanner/index.d.ts +2 -0
  40. package/dist/lib/metadata-scanner/index.js +2 -0
  41. package/dist/lib/metadata-scanner/index.js.map +1 -1
  42. package/dist/lib/metadata-scanner/metadata-scanner.module.js +1 -1
  43. package/dist/lib/metadata-scanner/metadata-scanner.module.js.map +1 -1
  44. package/dist/lib/metadata-scanner/metadata-scanner.service.d.ts +4 -2
  45. package/dist/lib/metadata-scanner/metadata-scanner.service.js +35 -15
  46. package/dist/lib/metadata-scanner/metadata-scanner.service.js.map +1 -1
  47. package/dist/lib/metadata-scanner/metadata-scanner.types.d.ts +13 -5
  48. package/dist/lib/metadata-scanner/utils/index.d.ts +1 -0
  49. package/dist/lib/metadata-scanner/utils/index.js +18 -0
  50. package/dist/lib/metadata-scanner/utils/index.js.map +1 -0
  51. package/dist/lib/metadata-scanner/utils/is-constructor-type.d.ts +2 -0
  52. package/dist/lib/metadata-scanner/utils/is-constructor-type.js +7 -0
  53. package/dist/lib/metadata-scanner/utils/is-constructor-type.js.map +1 -0
  54. package/package.json +4 -3
package/README.md CHANGED
@@ -1,6 +1,10 @@
1
1
  # nestjs-mcp-server
2
2
 
3
- NestJS 기반의 Model Context Protocol (MCP) 서버 라이브러리입니다. 데코레이터와 메타데이터 스캐닝을 통해 MCP 리소스와 도구를 간편하게 정의하고 관리할 수 있습니다.
3
+ > **참고**: 프로젝트는 토이프로젝트 또는 개인적인 용도로 로컬 MCP 구현하기 위해 만든 Simple 모듈입니다.
4
+ >
5
+ NestJS 기반의 Model Context Protocol (MCP) 서버 라이브러리입니다.
6
+
7
+ 데코레이터와 메타데이터 스캐닝을 통해 MCP 리소스와 도구를 간편하게 정의하고 관리할 수 있습니다.
4
8
 
5
9
  ## 설치
6
10
 
@@ -10,7 +14,7 @@ npm install @jissp/nestjs-mcp-server
10
14
 
11
15
  ## 주요 기능
12
16
 
13
- - **데코레이터 기반 정의**: `@McpTool`, `@McpResource` 데코레이터로 리소스와 도구 정의
17
+ - **데코레이터 기반 정의**: `@McpTool`, `@McpResource`, `@McpSchemaProperty` 데코레이터로 리소스와 도구 정의
14
18
  - **자동 메타데이터 스캔**: 클래스와 메서드의 메타데이터 자동 수집
15
19
  - **Executor 패턴**: 커스텀 executor를 통한 확장 가능한 아키텍처
16
20
  - **JSON-RPC 통신**: 표준 JSON-RPC 2.0 프로토콜 지원
@@ -58,14 +62,16 @@ export class MyFeatureModule {
58
62
 
59
63
  ### 3. 도구(Tool) 정의
60
64
 
61
- 도구는 `BaseExecutor` 인터페이스를 구현해야 하며, 실행 메서드에 `@McpTool` 데코레이터를 사용합니다.
65
+ 도구는 클래스 메서드에 `@McpTool` 데코레이터를 사용하여 정의합니다. 입력 스키마는 직접 JSON Schema 객체로 전달하거나, `@McpSchemaProperty`가 적용된 클래스를 전달하여 자동으로 생성할 수 있습니다.
66
+
67
+ #### JSON Schema 직접 정의 방식
62
68
 
63
69
  ```typescript
64
70
  import { Injectable } from '@nestjs/common';
65
- import { McpTool, BaseExecutor, JsonRpcCallRequest } from '@jissp/nestjs-mcp-server';
71
+ import { McpTool, JsonRpcCallRequest } from '@jissp/nestjs-mcp-server';
66
72
 
67
73
  @Injectable()
68
- export class MyToolExecutor implements BaseExecutor {
74
+ export class MyToolExecutor {
69
75
  @McpTool({
70
76
  name: 'calculate-sum',
71
77
  description: '두 숫자의 합을 계산합니다.',
@@ -85,6 +91,41 @@ export class MyToolExecutor implements BaseExecutor {
85
91
  }
86
92
  ```
87
93
 
94
+ #### @McpSchemaProperty 클래스 기반 방식
95
+
96
+ ```typescript
97
+ import { Injectable } from '@nestjs/common';
98
+ import { McpTool, McpSchemaProperty } from '@jissp/nestjs-mcp-server';
99
+
100
+ export class CalculateSumDto {
101
+ @McpSchemaProperty({
102
+ type: 'number',
103
+ description: '첫 번째 숫자',
104
+ isRequired: true,
105
+ })
106
+ a: number;
107
+
108
+ @McpSchemaProperty({
109
+ type: 'number',
110
+ description: '두 번째 숫자',
111
+ isRequired: true,
112
+ })
113
+ b: number;
114
+ }
115
+
116
+ @Injectable()
117
+ export class MyToolExecutor {
118
+ @McpTool({
119
+ name: 'calculate-sum',
120
+ description: '두 숫자의 합을 계산합니다.',
121
+ inputSchema: CalculateSumDto,
122
+ })
123
+ async execute(params: CalculateSumDto) {
124
+ return params.a + params.b;
125
+ }
126
+ }
127
+ ```
128
+
88
129
  ### 4. 리소스(Resource) 정의
89
130
 
90
131
  리소스는 서비스 내의 메서드에 `@McpResource` 데코레이터를 사용하여 정의합니다. URI 템플릿을 지원합니다.
@@ -128,13 +169,25 @@ MCP 서버의 핵심 기능(SSE 스트림, JSON-RPC 처리 등)을 전역 모듈
128
169
 
129
170
  #### `@McpTool(options: McpToolOptions)`
130
171
 
131
- 메서드를 MCP 도구로 등록합니다. 해당 클래스는 `BaseExecutor`를 구현해야 합니다.
172
+ 메서드를 MCP 도구로 등록합니다.
132
173
 
133
174
  ```typescript
134
175
  {
135
176
  name: string; // 도구 이름 (필수)
136
177
  description ? : string; // 도구 설명
137
- inputSchema ? : any; // JSON Schema 형식의 입력 파라미터 정의
178
+ inputSchema ? : any; // JSON Schema 형식의 입력 파라미터 정의 또는 DTO 클래스
179
+ }
180
+ ```
181
+
182
+ #### `@McpSchemaProperty(options: McpSchemaPropertyOptions)`
183
+
184
+ 입력 파라미터 DTO의 속성을 정의하여 자동으로 JSON Schema를 생성합니다.
185
+
186
+ ```typescript
187
+ {
188
+ type: string; // 데이터 타입 (예: 'string', 'number', 'boolean')
189
+ description: string; // 속성 설명
190
+ isRequired: boolean; // 필수 여부
138
191
  }
139
192
  ```
140
193
 
@@ -1,4 +1,4 @@
1
- import { JsonRpcCallRequest } from './mcp-server.types';
1
+ import { JsonRpcToolRequest } from './mcp-server.types';
2
2
  export interface BaseExecutor<T = unknown> {
3
- execute: (request: JsonRpcCallRequest) => T | Promise<T>;
3
+ execute: (request: JsonRpcToolRequest) => T | Promise<T>;
4
4
  }
@@ -1,2 +1,3 @@
1
1
  export * from './mcp-tool.decorator';
2
2
  export * from './mcp-resource.decorator';
3
+ export * from './mcp-schema-property.decorator';
@@ -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"}
@@ -1,8 +1,7 @@
1
- export declare const MCP_RESOURCE_METADATA = "MCP_RESOURCE_METADATA";
2
1
  export interface McpResourceOptions {
3
2
  uri: string;
4
3
  name: string;
5
4
  mimeType?: string;
6
5
  description?: string;
7
6
  }
8
- export declare const McpResource: (options: McpResourceOptions) => import("@nestjs/common").CustomDecorator<string>;
7
+ export declare const McpResource: import("@nestjs/core").ReflectableDecorator<McpResourceOptions, McpResourceOptions>;
@@ -1,8 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.McpResource = exports.MCP_RESOURCE_METADATA = void 0;
4
- const common_1 = require("@nestjs/common");
5
- exports.MCP_RESOURCE_METADATA = 'MCP_RESOURCE_METADATA';
6
- const McpResource = (options) => (0, common_1.SetMetadata)(exports.MCP_RESOURCE_METADATA, options);
7
- exports.McpResource = McpResource;
3
+ exports.McpResource = void 0;
4
+ const core_1 = require("@nestjs/core");
5
+ exports.McpResource = core_1.Reflector.createDecorator();
8
6
  //# sourceMappingURL=mcp-resource.decorator.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"mcp-resource.decorator.js","sourceRoot":"","sources":["../../../../lib/mcp-server/decorators/mcp-resource.decorator.ts"],"names":[],"mappings":";;;AAAA,2CAA6C;AAEhC,QAAA,qBAAqB,GAAG,uBAAuB,CAAC;AAStD,MAAM,WAAW,GAAG,CAAC,OAA2B,EAAE,EAAE,CACzD,IAAA,oBAAW,EAAC,6BAAqB,EAAE,OAAO,CAAC,CAAC;AADjC,QAAA,WAAW,eACsB"}
1
+ {"version":3,"file":"mcp-resource.decorator.js","sourceRoot":"","sources":["../../../../lib/mcp-server/decorators/mcp-resource.decorator.ts"],"names":[],"mappings":";;;AAAA,uCAAyC;AAS5B,QAAA,WAAW,GAAG,gBAAS,CAAC,eAAe,EAAsB,CAAC"}
@@ -0,0 +1,7 @@
1
+ export declare const MCP_SCHEMA_PROPERTIES_METADATA = "MCP_SCHEMA_PROPERTIES_METADATA";
2
+ export interface McpSchemaPropertyOptions {
3
+ type: string;
4
+ description: string;
5
+ isRequired: boolean;
6
+ }
7
+ export declare const McpSchemaProperty: (options: McpSchemaPropertyOptions) => (...args: [target: Object, propertyKey: string | symbol]) => void;
@@ -0,0 +1,7 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.McpSchemaProperty = exports.MCP_SCHEMA_PROPERTIES_METADATA = void 0;
4
+ const metadata_scanner_1 = require("../../metadata-scanner");
5
+ exports.MCP_SCHEMA_PROPERTIES_METADATA = 'MCP_SCHEMA_PROPERTIES_METADATA';
6
+ exports.McpSchemaProperty = (0, metadata_scanner_1.createPropertyDecorator)(exports.MCP_SCHEMA_PROPERTIES_METADATA);
7
+ //# 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":";;;AAAA,6DAAiE;AAEpD,QAAA,8BAA8B,GAAG,gCAAgC,CAAC;AAQlE,QAAA,iBAAiB,GAC5B,IAAA,0CAAuB,EACrB,sCAA8B,CAC/B,CAAC"}
@@ -1,7 +1,18 @@
1
- export declare const MCP_TOOL_METADATA = "MCP_TOOL_METADATA";
1
+ type ConstructorType = new (...args: any[]) => any;
2
2
  export interface McpToolOptions {
3
3
  name: string;
4
4
  description?: string;
5
- inputSchema?: any;
5
+ inputSchema?: JsonSchema | ConstructorType;
6
6
  }
7
- export declare const McpTool: (options: McpToolOptions) => import("@nestjs/common").CustomDecorator<string>;
7
+ export interface JsonSchema {
8
+ type: 'object';
9
+ properties: InputSchemaProperties;
10
+ required?: string[];
11
+ }
12
+ export interface InputSchemaProperty {
13
+ type: string;
14
+ description?: string;
15
+ }
16
+ export type InputSchemaProperties = Record<string, InputSchemaProperty>;
17
+ export declare const McpTool: import("@nestjs/core").ReflectableDecorator<McpToolOptions, McpToolOptions>;
18
+ export {};
@@ -1,8 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.McpTool = exports.MCP_TOOL_METADATA = void 0;
4
- const common_1 = require("@nestjs/common");
5
- exports.MCP_TOOL_METADATA = 'MCP_TOOL_METADATA';
6
- const McpTool = (options) => (0, common_1.SetMetadata)(exports.MCP_TOOL_METADATA, options);
7
- exports.McpTool = McpTool;
3
+ exports.McpTool = void 0;
4
+ const core_1 = require("@nestjs/core");
5
+ exports.McpTool = core_1.Reflector.createDecorator();
8
6
  //# 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;AAEhC,QAAA,iBAAiB,GAAG,mBAAmB,CAAC;AAQ9C,MAAM,OAAO,GAAG,CAAC,OAAuB,EAAE,EAAE,CACjD,IAAA,oBAAW,EAAC,yBAAiB,EAAE,OAAO,CAAC,CAAC;AAD7B,QAAA,OAAO,WACsB"}
1
+ {"version":3,"file":"mcp-tool.decorator.js","sourceRoot":"","sources":["../../../../lib/mcp-server/decorators/mcp-tool.decorator.ts"],"names":[],"mappings":";;;AAAA,uCAAyC;AAsB5B,QAAA,OAAO,GAAG,gBAAS,CAAC,eAAe,EAAkB,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":";;;;;;;;;AACA,2CAKwB;AAIjB,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"}
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"}
@@ -3,6 +3,7 @@ export * from './decorators';
3
3
  export * from './mcp-server.types';
4
4
  export * from './base.executor';
5
5
  export * from './mcp-metadata-registry.service';
6
+ export * from './mcp-metadata-input-schema.builder';
6
7
  export * from './mcp-server.controller';
7
8
  export * from './mcp-server.service';
8
9
  export * from './mcp-server.module';
@@ -19,6 +19,7 @@ __exportStar(require("./decorators"), exports);
19
19
  __exportStar(require("./mcp-server.types"), exports);
20
20
  __exportStar(require("./base.executor"), exports);
21
21
  __exportStar(require("./mcp-metadata-registry.service"), exports);
22
+ __exportStar(require("./mcp-metadata-input-schema.builder"), exports);
22
23
  __exportStar(require("./mcp-server.controller"), exports);
23
24
  __exportStar(require("./mcp-server.service"), exports);
24
25
  __exportStar(require("./mcp-server.module"), exports);
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../lib/mcp-server/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,2CAAyB;AACzB,+CAA6B;AAC7B,qDAAmC;AACnC,kDAAgC;AAChC,kEAAgD;AAChD,0DAAwC;AACxC,uDAAqC;AACrC,sDAAoC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../lib/mcp-server/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,2CAAyB;AACzB,+CAA6B;AAC7B,qDAAmC;AACnC,kDAAgC;AAChC,kEAAgD;AAChD,sEAAoD;AACpD,0DAAwC;AACxC,uDAAqC;AACrC,sDAAoC"}
@@ -0,0 +1,10 @@
1
+ import { MetadataScannerService } from '../metadata-scanner';
2
+ import { JsonSchema, McpToolOptions } from './decorators';
3
+ export declare class McpMetadataInputSchemaBuilder {
4
+ private readonly metadataScannerService;
5
+ constructor(metadataScannerService: MetadataScannerService);
6
+ build(mcpToolOptions: McpToolOptions): JsonSchema | undefined;
7
+ private generateInputSchema;
8
+ private buildSchemaProperties;
9
+ private buildRequired;
10
+ }
@@ -0,0 +1,57 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ var __metadata = (this && this.__metadata) || function (k, v) {
9
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.McpMetadataInputSchemaBuilder = void 0;
13
+ const common_1 = require("@nestjs/common");
14
+ const metadata_scanner_1 = require("../metadata-scanner");
15
+ const decorators_1 = require("./decorators");
16
+ let McpMetadataInputSchemaBuilder = class McpMetadataInputSchemaBuilder {
17
+ metadataScannerService;
18
+ constructor(metadataScannerService) {
19
+ this.metadataScannerService = metadataScannerService;
20
+ }
21
+ build(mcpToolOptions) {
22
+ if (!(0, metadata_scanner_1.isConstructorType)(mcpToolOptions.inputSchema)) {
23
+ return mcpToolOptions.inputSchema;
24
+ }
25
+ return this.generateInputSchema(mcpToolOptions.inputSchema);
26
+ }
27
+ generateInputSchema(inputSchemaClass) {
28
+ const properties = this.metadataScannerService.scanProperties(decorators_1.MCP_SCHEMA_PROPERTIES_METADATA, inputSchemaClass);
29
+ return {
30
+ type: 'object',
31
+ properties: this.buildSchemaProperties(properties),
32
+ required: this.buildRequired(properties),
33
+ };
34
+ }
35
+ buildSchemaProperties(propertiesMetadata) {
36
+ const entries = propertiesMetadata.map(({ key, metadata }) => [
37
+ key,
38
+ {
39
+ type: metadata.type,
40
+ description: metadata.description,
41
+ },
42
+ ]);
43
+ return Object.fromEntries(entries);
44
+ }
45
+ buildRequired(propertiesMetadata) {
46
+ const filteredEntries = propertiesMetadata.filter(({ metadata: { isRequired } }) => {
47
+ return isRequired;
48
+ });
49
+ return filteredEntries.map(({ key }) => key);
50
+ }
51
+ };
52
+ exports.McpMetadataInputSchemaBuilder = McpMetadataInputSchemaBuilder;
53
+ exports.McpMetadataInputSchemaBuilder = McpMetadataInputSchemaBuilder = __decorate([
54
+ (0, common_1.Injectable)(),
55
+ __metadata("design:paramtypes", [metadata_scanner_1.MetadataScannerService])
56
+ ], McpMetadataInputSchemaBuilder);
57
+ //# sourceMappingURL=mcp-metadata-input-schema.builder.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcp-metadata-input-schema.builder.js","sourceRoot":"","sources":["../../../lib/mcp-server/mcp-metadata-input-schema.builder.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,2CAA4C;AAC5C,0DAK6B;AAC7B,6CAOsB;AAGf,IAAM,6BAA6B,GAAnC,MAAM,6BAA6B;IAErB;IADnB,YACmB,sBAA8C;QAA9C,2BAAsB,GAAtB,sBAAsB,CAAwB;IAC9D,CAAC;IAEG,KAAK,CAAC,cAA8B;QACzC,IAAI,CAAC,IAAA,oCAAiB,EAAC,cAAc,CAAC,WAAW,CAAC,EAAE,CAAC;YACnD,OAAO,cAAc,CAAC,WAAW,CAAC;QACpC,CAAC;QAED,OAAO,IAAI,CAAC,mBAAmB,CAAC,cAAc,CAAC,WAAW,CAAC,CAAC;IAC9D,CAAC;IAEO,mBAAmB,CAAC,gBAAiC;QAC3D,MAAM,UAAU,GACd,IAAI,CAAC,sBAAsB,CAAC,cAAc,CACxC,2CAA8B,EAC9B,gBAAgB,CACjB,CAAC;QAEJ,OAAO;YACL,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE,IAAI,CAAC,qBAAqB,CAAC,UAAU,CAAC;YAClD,QAAQ,EAAE,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC;SACzC,CAAC;IACJ,CAAC;IAEO,qBAAqB,CAC3B,kBAAuE;QAEvE,MAAM,OAAO,GAAG,kBAAkB,CAAC,GAAG,CACpC,CAAC,EAAE,GAAG,EAAE,QAAQ,EAAE,EAAiC,EAAE,CAAC;YACpD,GAAG;YACH;gBACE,IAAI,EAAE,QAAQ,CAAC,IAAI;gBACnB,WAAW,EAAE,QAAQ,CAAC,WAAW;aAClC;SACF,CACF,CAAC;QAEF,OAAO,MAAM,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;IACrC,CAAC;IAEO,aAAa,CACnB,kBAAuE;QAEvE,MAAM,eAAe,GAAG,kBAAkB,CAAC,MAAM,CAC/C,CAAC,EAAE,QAAQ,EAAE,EAAE,UAAU,EAAE,EAAE,EAAE,EAAE;YAC/B,OAAO,UAAU,CAAC;QACpB,CAAC,CACF,CAAC;QAEF,OAAO,eAAe,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC;IAC/C,CAAC;CACF,CAAA;AAtDY,sEAA6B;wCAA7B,6BAA6B;IADzC,IAAA,mBAAU,GAAE;qCAGgC,yCAAsB;GAFtD,6BAA6B,CAsDzC"}
@@ -2,11 +2,13 @@ import { OnModuleInit } from '@nestjs/common';
2
2
  import { MetadataScannerService } from '../metadata-scanner';
3
3
  import { McpResourceOptions, McpToolOptions } from './decorators';
4
4
  import { BaseExecutor } from './base.executor';
5
+ import { McpMetadataInputSchemaBuilder } from './mcp-metadata-input-schema.builder';
5
6
  export declare class McpMetadataRegistryService implements OnModuleInit {
6
7
  private readonly metadataScanner;
8
+ private readonly mcpMetadataInputSchemaBuilder;
7
9
  private tools;
8
10
  private resources;
9
- constructor(metadataScanner: MetadataScannerService);
11
+ constructor(metadataScanner: MetadataScannerService, mcpMetadataInputSchemaBuilder: McpMetadataInputSchemaBuilder);
10
12
  onModuleInit(): void;
11
13
  private scanTools;
12
14
  private scanResources;
@@ -14,8 +16,10 @@ export declare class McpMetadataRegistryService implements OnModuleInit {
14
16
  getToolExecutor(name: string): BaseExecutor<unknown> | undefined;
15
17
  getResources(): McpResourceOptions[];
16
18
  getResourceHandler(uri: string): {
17
- handler: Function;
19
+ handler: CallableFunction;
18
20
  params: Record<string, string>;
19
21
  } | null;
20
22
  private matchUri;
23
+ private isBaseExecutor;
24
+ private isCallableFunction;
21
25
  }
@@ -13,12 +13,15 @@ exports.McpMetadataRegistryService = void 0;
13
13
  const common_1 = require("@nestjs/common");
14
14
  const metadata_scanner_1 = require("../metadata-scanner");
15
15
  const decorators_1 = require("./decorators");
16
+ const mcp_metadata_input_schema_builder_1 = require("./mcp-metadata-input-schema.builder");
16
17
  let McpMetadataRegistryService = class McpMetadataRegistryService {
17
18
  metadataScanner;
19
+ mcpMetadataInputSchemaBuilder;
18
20
  tools = new Map();
19
21
  resources = new Map();
20
- constructor(metadataScanner) {
22
+ constructor(metadataScanner, mcpMetadataInputSchemaBuilder) {
21
23
  this.metadataScanner = metadataScanner;
24
+ this.mcpMetadataInputSchemaBuilder = mcpMetadataInputSchemaBuilder;
22
25
  }
23
26
  onModuleInit() {
24
27
  this.scanTools();
@@ -26,11 +29,14 @@ let McpMetadataRegistryService = class McpMetadataRegistryService {
26
29
  }
27
30
  scanTools() {
28
31
  const metadataList = this.metadataScanner.scan({
29
- metadataKey: decorators_1.MCP_TOOL_METADATA,
32
+ decorator: decorators_1.McpTool,
30
33
  });
31
- metadataList.forEach(({ metadata, instance }) => {
32
- const toolMeta = metadata;
33
- this.tools.set(toolMeta.name, {
34
+ metadataList.forEach(({ metadata, instance, isClassMetadata }) => {
35
+ if (isClassMetadata || !this.isBaseExecutor(instance)) {
36
+ return;
37
+ }
38
+ metadata.inputSchema = this.mcpMetadataInputSchemaBuilder.build(metadata);
39
+ this.tools.set(metadata.name, {
34
40
  executor: instance,
35
41
  metadata,
36
42
  });
@@ -38,9 +44,12 @@ let McpMetadataRegistryService = class McpMetadataRegistryService {
38
44
  }
39
45
  scanResources() {
40
46
  const metadataList = this.metadataScanner.scan({
41
- metadataKey: decorators_1.MCP_RESOURCE_METADATA,
47
+ decorator: decorators_1.McpResource,
42
48
  });
43
- metadataList.forEach(({ metadata, instance, methodName }) => {
49
+ metadataList.forEach(({ metadata, instance, methodName, isClassMetadata }) => {
50
+ if (isClassMetadata || !this.isCallableFunction(instance, methodName)) {
51
+ return;
52
+ }
44
53
  this.resources.set(metadata.uri, {
45
54
  handler: instance[methodName].bind(instance),
46
55
  metadata,
@@ -76,18 +85,26 @@ let McpMetadataRegistryService = class McpMetadataRegistryService {
76
85
  });
77
86
  const regex = new RegExp(`^${regexSource}$`);
78
87
  const match = uri.match(regex);
79
- if (!match)
88
+ if (!match) {
80
89
  return null;
90
+ }
81
91
  const params = {};
82
92
  paramNames.forEach((name, index) => {
83
93
  params[name] = decodeURIComponent(match[index + 1]);
84
94
  });
85
95
  return params;
86
96
  }
97
+ isBaseExecutor(instance) {
98
+ return this.isCallableFunction(instance, 'execute');
99
+ }
100
+ isCallableFunction(instance, methodName) {
101
+ return methodName in instance && typeof instance[methodName] === 'function';
102
+ }
87
103
  };
88
104
  exports.McpMetadataRegistryService = McpMetadataRegistryService;
89
105
  exports.McpMetadataRegistryService = McpMetadataRegistryService = __decorate([
90
106
  (0, common_1.Injectable)(),
91
- __metadata("design:paramtypes", [metadata_scanner_1.MetadataScannerService])
107
+ __metadata("design:paramtypes", [metadata_scanner_1.MetadataScannerService,
108
+ mcp_metadata_input_schema_builder_1.McpMetadataInputSchemaBuilder])
92
109
  ], McpMetadataRegistryService);
93
110
  //# sourceMappingURL=mcp-metadata-registry.service.js.map
@@ -1 +1 @@
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
+ {"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 mcp_server_service_1 = require("./mcp-server.service");
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":";;;;;;;;;;;;;;;AACA,+BAA2C;AAC3C,2CAWwB;AAExB,6DAAwD;AACxD,qCAA6C;AAGtC,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
+ {"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"}
@@ -11,6 +11,7 @@ exports.McpServerModule = void 0;
11
11
  const common_1 = require("@nestjs/common");
12
12
  const metadata_scanner_1 = require("../metadata-scanner");
13
13
  const mcp_server_controller_1 = require("./mcp-server.controller");
14
+ const mcp_metadata_input_schema_builder_1 = require("./mcp-metadata-input-schema.builder");
14
15
  const mcp_metadata_registry_service_1 = require("./mcp-metadata-registry.service");
15
16
  const mcp_server_service_1 = require("./mcp-server.service");
16
17
  let McpServerModule = McpServerModule_1 = class McpServerModule {
@@ -20,7 +21,11 @@ let McpServerModule = McpServerModule_1 = class McpServerModule {
20
21
  module: McpServerModule_1,
21
22
  imports: [metadata_scanner_1.MetadataScannerModule],
22
23
  controllers: [mcp_server_controller_1.McpServerController],
23
- providers: [mcp_metadata_registry_service_1.McpMetadataRegistryService, mcp_server_service_1.McpServerService],
24
+ providers: [
25
+ mcp_metadata_registry_service_1.McpMetadataRegistryService,
26
+ mcp_metadata_input_schema_builder_1.McpMetadataInputSchemaBuilder,
27
+ mcp_server_service_1.McpServerService,
28
+ ],
24
29
  exports: [],
25
30
  };
26
31
  }
@@ -1 +1 @@
1
- {"version":3,"file":"mcp-server.module.js","sourceRoot":"","sources":["../../../lib/mcp-server/mcp-server.module.ts"],"names":[],"mappings":";;;;;;;;;;AAAA,2CAAuD;AACvD,0DAA4D;AAE5D,mEAA8D;AAC9D,mFAA6E;AAC7E,6DAAwD;AAGjD,IAAM,eAAe,uBAArB,MAAM,eAAe;IACnB,MAAM,CAAC,OAAO;QACnB,OAAO;YACL,MAAM,EAAE,IAAI;YACZ,MAAM,EAAE,iBAAe;YACvB,OAAO,EAAE,CAAC,wCAAqB,CAAC;YAChC,WAAW,EAAE,CAAC,2CAAmB,CAAC;YAClC,SAAS,EAAE,CAAC,0DAA0B,EAAE,qCAAgB,CAAC;YACzD,OAAO,EAAE,EAAE;SACZ,CAAC;IACJ,CAAC;IAEM,MAAM,CAAC,UAAU,CAAC,OAAgC;QACvD,OAAO;YACL,MAAM,EAAE,iBAAe;YACvB,OAAO,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC;YACrC,SAAS,EAAE,CAAC,GAAG,OAAO,CAAC,SAAS,CAAC;YACjC,OAAO,EAAE,CAAC,GAAG,OAAO,CAAC,SAAS,CAAC;SAChC,CAAC;IACJ,CAAC;CACF,CAAA;AApBY,0CAAe;0BAAf,eAAe;IAD3B,IAAA,eAAM,EAAC,EAAE,CAAC;GACE,eAAe,CAoB3B"}
1
+ {"version":3,"file":"mcp-server.module.js","sourceRoot":"","sources":["../../../lib/mcp-server/mcp-server.module.ts"],"names":[],"mappings":";;;;;;;;;;AAAA,2CAAuD;AACvD,0DAA4D;AAE5D,mEAA8D;AAC9D,2FAAoF;AACpF,mFAA6E;AAC7E,6DAAwD;AAGjD,IAAM,eAAe,uBAArB,MAAM,eAAe;IACnB,MAAM,CAAC,OAAO;QACnB,OAAO;YACL,MAAM,EAAE,IAAI;YACZ,MAAM,EAAE,iBAAe;YACvB,OAAO,EAAE,CAAC,wCAAqB,CAAC;YAChC,WAAW,EAAE,CAAC,2CAAmB,CAAC;YAClC,SAAS,EAAE;gBACT,0DAA0B;gBAC1B,iEAA6B;gBAC7B,qCAAgB;aACjB;YACD,OAAO,EAAE,EAAE;SACZ,CAAC;IACJ,CAAC;IAEM,MAAM,CAAC,UAAU,CAAC,OAAgC;QACvD,OAAO;YACL,MAAM,EAAE,iBAAe;YACvB,OAAO,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC;YACrC,SAAS,EAAE,CAAC,GAAG,OAAO,CAAC,SAAS,CAAC;YACjC,OAAO,EAAE,CAAC,GAAG,OAAO,CAAC,SAAS,CAAC;SAChC,CAAC;IACJ,CAAC;CACF,CAAA;AAxBY,0CAAe;0BAAf,eAAe;IAD3B,IAAA,eAAM,EAAC,EAAE,CAAC;GACE,eAAe,CAwB3B"}
@@ -40,7 +40,7 @@ let McpServerService = class McpServerService {
40
40
  id,
41
41
  error: {
42
42
  code: -32603,
43
- message: error.message,
43
+ message: error instanceof Error ? error.message : 'Unknown error',
44
44
  },
45
45
  },
46
46
  };
@@ -1 +1 @@
1
- {"version":3,"file":"mcp-server.service.js","sourceRoot":"","sources":["../../../lib/mcp-server/mcp-server.service.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"mcp-server.service.js","sourceRoot":"","sources":["../../../lib/mcp-server/mcp-server.service.ts"],"names":[],"mappings":"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"}
@@ -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 JsonRpcCallRequest<T = unknown> = JsonRpcRequest<{
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
  }
@@ -0,0 +1,5 @@
1
+ export declare const JISSP_PROPERTY_DECORATOR: unique symbol;
2
+ type PropertyDecoratorArgs = Parameters<PropertyDecorator>;
3
+ export declare function createPropertyDecorator<T = undefined>(metadataKey: string): (options: T) => (...args: PropertyDecoratorArgs) => void;
4
+ export declare function getPropertiesMetadata(target: PropertyDecoratorArgs[0]): string[];
5
+ export {};
@@ -0,0 +1,35 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.JISSP_PROPERTY_DECORATOR = void 0;
4
+ exports.createPropertyDecorator = createPropertyDecorator;
5
+ exports.getPropertiesMetadata = getPropertiesMetadata;
6
+ exports.JISSP_PROPERTY_DECORATOR = Symbol.for('JISSP_PROPERTY_DECORATOR');
7
+ function createPropertyDecorator(metadataKey) {
8
+ return (options) => {
9
+ return (...args) => {
10
+ const [target, propertyKey] = args;
11
+ if (!propertyKey) {
12
+ return;
13
+ }
14
+ const key = String(propertyKey);
15
+ updatePropertiesMetadata(target, key);
16
+ Reflect.defineMetadata(metadataKey, options, target, propertyKey);
17
+ };
18
+ };
19
+ }
20
+ function getPropertiesMetadata(target) {
21
+ const metadata = Reflect.getMetadata(exports.JISSP_PROPERTY_DECORATOR, target);
22
+ if (metadata) {
23
+ return metadata;
24
+ }
25
+ return [];
26
+ }
27
+ function setMcpSchemaPropertiesMetadata(properties, target, key) {
28
+ properties.push(key);
29
+ Reflect.defineMetadata(exports.JISSP_PROPERTY_DECORATOR, properties, target);
30
+ }
31
+ function updatePropertiesMetadata(target, key) {
32
+ const properties = getPropertiesMetadata(target);
33
+ setMcpSchemaPropertiesMetadata(properties, target, key);
34
+ }
35
+ //# sourceMappingURL=create-property.decorator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create-property.decorator.js","sourceRoot":"","sources":["../../../../lib/metadata-scanner/decorators/create-property.decorator.ts"],"names":[],"mappings":";;;AAIA,0DAiBC;AAED,sDAYC;AAnCY,QAAA,wBAAwB,GAAG,MAAM,CAAC,GAAG,CAAC,0BAA0B,CAAC,CAAC;AAI/E,SAAgB,uBAAuB,CAAgB,WAAmB;IACxE,OAAO,CAAC,OAAU,EAAE,EAAE;QACpB,OAAO,CAAC,GAAG,IAA2B,EAAE,EAAE;YACxC,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,GAAG,IAAI,CAAC;YACnC,IAAI,CAAC,WAAW,EAAE,CAAC;gBACjB,OAAO;YACT,CAAC;YAED,MAAM,GAAG,GAAG,MAAM,CAAC,WAAW,CAAC,CAAC;YAGhC,wBAAwB,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;YAGtC,OAAO,CAAC,cAAc,CAAC,WAAW,EAAE,OAAO,EAAE,MAAM,EAAE,WAAW,CAAC,CAAC;QACpE,CAAC,CAAC;IACJ,CAAC,CAAC;AACJ,CAAC;AAED,SAAgB,qBAAqB,CACnC,MAAgC;IAEhC,MAAM,QAAQ,GAAG,OAAO,CAAC,WAAW,CAClC,gCAAwB,EACxB,MAAM,CACK,CAAC;IACd,IAAI,QAAQ,EAAE,CAAC;QACb,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED,OAAO,EAAE,CAAC;AACZ,CAAC;AAED,SAAS,8BAA8B,CACrC,UAAoB,EACpB,MAAgC,EAChC,GAAW;IAEX,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAErB,OAAO,CAAC,cAAc,CAAC,gCAAwB,EAAE,UAAU,EAAE,MAAM,CAAC,CAAC;AACvE,CAAC;AAED,SAAS,wBAAwB,CAC/B,MAAgC,EAChC,GAAW;IAEX,MAAM,UAAU,GAAG,qBAAqB,CAAC,MAAM,CAAC,CAAC;IACjD,8BAA8B,CAAC,UAAU,EAAE,MAAM,EAAE,GAAG,CAAC,CAAC;AAC1D,CAAC"}
@@ -0,0 +1 @@
1
+ export * from './create-property.decorator';
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./create-property.decorator"), exports);
18
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../lib/metadata-scanner/decorators/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,8DAA4C"}
@@ -1,3 +1,5 @@
1
+ export * from './decorators';
2
+ export * from './utils';
1
3
  export * from './metadata-scanner.types';
2
4
  export * from './metadata-scanner.service';
3
5
  export * from './metadata-scanner.module';
@@ -14,6 +14,8 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
14
  for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
15
  };
16
16
  Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./decorators"), exports);
18
+ __exportStar(require("./utils"), exports);
17
19
  __exportStar(require("./metadata-scanner.types"), exports);
18
20
  __exportStar(require("./metadata-scanner.service"), exports);
19
21
  __exportStar(require("./metadata-scanner.module"), exports);
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../lib/metadata-scanner/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,2DAAyC;AACzC,6DAA2C;AAC3C,4DAA0C"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../lib/metadata-scanner/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,+CAA6B;AAC7B,0CAAwB;AACxB,2DAAyC;AACzC,6DAA2C;AAC3C,4DAA0C"}
@@ -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,yEAAoE;AACpE,uCAA+C;AAOxC,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"}
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"}
@@ -1,9 +1,11 @@
1
1
  import { DiscoveryService, Reflector } from '@nestjs/core';
2
- import { MetadataScannerConfig, ScannedMetadata } from './metadata-scanner.types';
2
+ import { MetadataScannerConfig, ScannedMetadata, ScannedPropertyMetadata } from './metadata-scanner.types';
3
3
  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>(config: MetadataScannerConfig<Metadata>): ScannedMetadata<object, Metadata>[];
8
+ scanProperties<Metadata>(metadataKey: string | symbol, target: any): ScannedPropertyMetadata<Metadata>[];
8
9
  private getMethodNames;
10
+ private isObject;
9
11
  }
@@ -12,6 +12,8 @@ Object.defineProperty(exports, "__esModule", { value: true });
12
12
  exports.MetadataScannerService = void 0;
13
13
  const common_1 = require("@nestjs/common");
14
14
  const core_1 = require("@nestjs/core");
15
+ const utils_1 = require("./utils");
16
+ const decorators_1 = require("./decorators");
15
17
  let MetadataScannerService = class MetadataScannerService {
16
18
  reflector;
17
19
  discovery;
@@ -24,38 +26,56 @@ let MetadataScannerService = class MetadataScannerService {
24
26
  const controllers = this.discovery.getControllers();
25
27
  const providers = this.discovery.getProviders();
26
28
  const wrappers = [...controllers, ...providers];
27
- wrappers.forEach(({ instance }) => {
28
- if (!instance || typeof instance !== 'object') {
29
- return;
29
+ for (const { instance } of wrappers) {
30
+ if (!this.isObject(instance)) {
31
+ continue;
30
32
  }
31
33
  const prototype = Object.getPrototypeOf(instance);
32
34
  if (!prototype) {
33
- return;
35
+ continue;
34
36
  }
35
37
  const methodNames = this.getMethodNames(prototype);
36
- methodNames.forEach((methodName) => {
37
- const metadata = this.reflector.get(config.metadataKey, instance[methodName]);
38
+ for (const methodName of methodNames) {
39
+ const targetMethod = instance[methodName];
40
+ if (typeof targetMethod !== 'function') {
41
+ continue;
42
+ }
43
+ const metadata = this.reflector.get(config.decorator, targetMethod);
38
44
  if (!metadata) {
39
- return;
45
+ continue;
40
46
  }
41
- const result = {
47
+ results.push({
42
48
  instance,
43
49
  methodName,
44
50
  metadata,
45
- };
46
- results.push(result);
47
- });
48
- });
51
+ isClassMetadata: methodName === 'constructor',
52
+ });
53
+ }
54
+ }
49
55
  return results;
50
56
  }
57
+ scanProperties(metadataKey, target) {
58
+ const _target = (0, utils_1.isConstructorType)(target)
59
+ ? target.prototype
60
+ : Object.getPrototypeOf(target);
61
+ const properties = Reflect.getMetadata(decorators_1.JISSP_PROPERTY_DECORATOR, _target);
62
+ return properties.map((property) => ({
63
+ key: property,
64
+ metadata: Reflect.getMetadata(metadataKey, _target, property),
65
+ }));
66
+ }
51
67
  getMethodNames(prototype) {
52
68
  return Object.getOwnPropertyNames(prototype).filter((methodName) => {
53
69
  const descriptor = Object.getOwnPropertyDescriptor(prototype, methodName);
54
- return (descriptor &&
55
- typeof descriptor.value === 'function' &&
56
- methodName !== 'constructor');
70
+ return descriptor && typeof descriptor.value === 'function';
57
71
  });
58
72
  }
73
+ isObject(val) {
74
+ if (!val) {
75
+ return false;
76
+ }
77
+ return typeof val === 'object';
78
+ }
59
79
  };
60
80
  exports.MetadataScannerService = MetadataScannerService;
61
81
  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,CAAC,MAA6B;QAChC,MAAM,OAAO,GAAsB,EAAE,CAAC;QACtC,MAAM,WAAW,GAAG,IAAI,CAAC,SAAS,CAAC,cAAc,EAAE,CAAC;QACpD,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,YAAY,EAAE,CAAC;QAEhD,MAAM,QAAQ,GAAG,CAAC,GAAG,WAAW,EAAE,GAAG,SAAS,CAAC,CAAC;QAChD,QAAQ,CAAC,OAAO,CAAC,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE;YAChC,IAAI,CAAC,QAAQ,IAAI,OAAO,QAAQ,KAAK,QAAQ,EAAE,CAAC;gBAC9C,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,GAAoB;oBAC9B,QAAQ;oBACR,UAAU;oBACV,QAAQ;iBACT,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,CACL,UAAU;gBACV,OAAO,UAAU,CAAC,KAAK,KAAK,UAAU;gBACtC,UAAU,KAAK,aAAa,CAC7B,CAAC;QACJ,CAAC,CAAC,CAAC;IACL,CAAC;CACF,CAAA;AA9DY,wDAAsB;iCAAtB,sBAAsB;IADlC,IAAA,mBAAU,GAAE;qCAGmB,gBAAS;QACT,uBAAgB;GAHnC,sBAAsB,CA8DlC"}
1
+ {"version":3,"file":"metadata-scanner.service.js","sourceRoot":"","sources":["../../../lib/metadata-scanner/metadata-scanner.service.ts"],"names":[],"mappings":"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"}
@@ -1,8 +1,16 @@
1
- export interface ScannedMetadata {
2
- instance: any;
1
+ import { Reflector } from '@nestjs/core';
2
+ export interface ScannedMetadata<Instance = unknown, Metadata = any> {
3
+ instance: Instance;
4
+ metadata: Metadata;
3
5
  methodName: string;
4
- metadata: any;
6
+ isClassMetadata: boolean;
5
7
  }
6
- export interface MetadataScannerConfig {
7
- metadataKey: string | symbol;
8
+ export interface ScannedPropertyMetadata<T = undefined> {
9
+ key: string;
10
+ metadata: T;
8
11
  }
12
+ export interface MetadataScannerConfig<T> {
13
+ decorator: DecoratorReturnType<T>;
14
+ }
15
+ export type DecoratorReturnType<T> = ReturnType<typeof Reflector.createDecorator<T>>;
16
+ export type ConstructorType = new (...args: any[]) => any;
@@ -0,0 +1 @@
1
+ export * from './is-constructor-type';
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./is-constructor-type"), exports);
18
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../lib/metadata-scanner/utils/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,wDAAsC"}
@@ -0,0 +1,2 @@
1
+ import { ConstructorType } from '../metadata-scanner.types';
2
+ export declare function isConstructorType(object: unknown): object is ConstructorType;
@@ -0,0 +1,7 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.isConstructorType = isConstructorType;
4
+ function isConstructorType(object) {
5
+ return typeof object === 'function';
6
+ }
7
+ //# sourceMappingURL=is-constructor-type.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"is-constructor-type.js","sourceRoot":"","sources":["../../../../lib/metadata-scanner/utils/is-constructor-type.ts"],"names":[],"mappings":";;AAEA,8CAEC;AAFD,SAAgB,iBAAiB,CAAC,MAAe;IAC/C,OAAO,OAAO,MAAM,KAAK,UAAU,CAAC;AACtC,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@jissp/nestjs-mcp-server",
3
- "version": "0.0.2",
3
+ "version": "0.0.4",
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.build.json --outDir dist/lib --rootDir lib",
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",