@mcp-weave/nestjs 0.1.1 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/decorators/mcp-server.ts","../src/decorators/mcp-tool.ts","../src/decorators/mcp-resource.ts","../src/decorators/mcp-prompt.ts","../src/decorators/params.ts","../src/metadata/storage.ts","../src/runtime/server.ts","../src/index.ts"],"names":["METADATA_KEYS"],"mappings":"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","file":"index.mjs","sourcesContent":["import 'reflect-metadata';\nimport { METADATA_KEYS } from '@mcp-weave/core';\nimport type { McpServerMetadata } from '@mcp-weave/core';\n\n/**\n * Options for @McpServer decorator\n */\nexport interface McpServerOptions {\n /**\n * Server name\n */\n name: string;\n\n /**\n * Server version (default: '1.0.0')\n */\n version?: string;\n\n /**\n * Server description\n */\n description?: string;\n}\n\n/**\n * Marks a class as an MCP server\n *\n * @example\n * ```typescript\n * @McpServer({ name: 'my-service', version: '1.0.0' })\n * export class MyController {\n * // ...\n * }\n * ```\n */\nexport function McpServer(options: McpServerOptions): ClassDecorator {\n return (target: Function) => {\n const metadata: McpServerMetadata = {\n name: options.name,\n version: options.version ?? '1.0.0',\n description: options.description,\n target,\n };\n\n Reflect.defineMetadata(METADATA_KEYS.SERVER, metadata, target);\n };\n}\n","import 'reflect-metadata';\nimport { METADATA_KEYS } from '@mcp-weave/core';\nimport type { McpToolMetadata, ToolInputSchema } from '@mcp-weave/core';\n\n/**\n * Options for @McpTool decorator\n */\nexport interface McpToolOptions {\n /**\n * Tool name\n */\n name: string;\n\n /**\n * Tool description\n */\n description: string;\n\n /**\n * Input schema (JSON Schema)\n */\n inputSchema?: ToolInputSchema;\n}\n\n/**\n * Marks a method as an MCP tool\n *\n * @example\n * ```typescript\n * @McpTool({\n * name: 'create_user',\n * description: 'Creates a new user'\n * })\n * async createUser(@McpInput() input: CreateUserDto) {\n * return { success: true };\n * }\n * ```\n */\nexport function McpTool(options: McpToolOptions): MethodDecorator {\n return (target: object, propertyKey: string | symbol, _descriptor: PropertyDescriptor) => {\n const constructor = target.constructor;\n\n const existingTools: McpToolMetadata[] =\n Reflect.getMetadata(METADATA_KEYS.TOOLS, constructor) ?? [];\n\n const metadata: McpToolMetadata = {\n name: options.name,\n description: options.description,\n inputSchema: options.inputSchema,\n propertyKey,\n target: constructor,\n };\n\n Reflect.defineMetadata(METADATA_KEYS.TOOLS, [...existingTools, metadata], constructor);\n };\n}\n","import 'reflect-metadata';\nimport { METADATA_KEYS } from '@mcp-weave/core';\nimport type { McpResourceMetadata } from '@mcp-weave/core';\n\n/**\n * Options for @McpResource decorator\n */\nexport interface McpResourceOptions {\n /**\n * Resource URI template (e.g., 'user://{userId}')\n */\n uri: string;\n\n /**\n * Resource name\n */\n name: string;\n\n /**\n * Resource description\n */\n description?: string;\n\n /**\n * MIME type (default: 'application/json')\n */\n mimeType?: string;\n}\n\n/**\n * Marks a method as an MCP resource\n *\n * @example\n * ```typescript\n * @McpResource({\n * uri: 'user://{userId}',\n * name: 'User Profile',\n * mimeType: 'application/json'\n * })\n * async getUserProfile(@McpParam('userId') userId: string) {\n * return { contents: [...] };\n * }\n * ```\n */\nexport function McpResource(options: McpResourceOptions): MethodDecorator {\n return (target: object, propertyKey: string | symbol, _descriptor: PropertyDescriptor) => {\n const constructor = target.constructor;\n\n const existingResources: McpResourceMetadata[] =\n Reflect.getMetadata(METADATA_KEYS.RESOURCES, constructor) ?? [];\n\n const metadata: McpResourceMetadata = {\n uri: options.uri,\n name: options.name,\n description: options.description,\n mimeType: options.mimeType ?? 'application/json',\n propertyKey,\n target: constructor,\n };\n\n Reflect.defineMetadata(METADATA_KEYS.RESOURCES, [...existingResources, metadata], constructor);\n };\n}\n","import 'reflect-metadata';\nimport { METADATA_KEYS } from '@mcp-weave/core';\nimport type { McpPromptMetadata, PromptArgument } from '@mcp-weave/core';\n\n/**\n * Options for @McpPrompt decorator\n */\nexport interface McpPromptOptions {\n /**\n * Prompt name\n */\n name: string;\n\n /**\n * Prompt description\n */\n description: string;\n\n /**\n * Prompt arguments\n */\n arguments?: PromptArgument[];\n}\n\n/**\n * Marks a method as an MCP prompt\n *\n * @example\n * ```typescript\n * @McpPrompt({\n * name: 'welcome_email',\n * description: 'Generate welcome email for new user'\n * })\n * async generateWelcomeEmail(\n * @McpPromptArg('userName') userName: string\n * ) {\n * return { messages: [...] };\n * }\n * ```\n */\nexport function McpPrompt(options: McpPromptOptions): MethodDecorator {\n return (target: object, propertyKey: string | symbol, _descriptor: PropertyDescriptor) => {\n const constructor = target.constructor;\n\n const existingPrompts: McpPromptMetadata[] =\n Reflect.getMetadata(METADATA_KEYS.PROMPTS, constructor) ?? [];\n\n const metadata: McpPromptMetadata = {\n name: options.name,\n description: options.description,\n arguments: options.arguments,\n propertyKey,\n target: constructor,\n };\n\n Reflect.defineMetadata(METADATA_KEYS.PROMPTS, [...existingPrompts, metadata], constructor);\n };\n}\n","import 'reflect-metadata';\nimport { METADATA_KEYS } from '@mcp-weave/core';\nimport type { McpParamMetadata } from '@mcp-weave/core';\n\n/**\n * Injects the tool input\n *\n * @example\n * ```typescript\n * @McpTool({ name: 'create_user', description: 'Creates a user' })\n * async createUser(@McpInput() input: CreateUserDto) {\n * // input contains the tool arguments\n * }\n * ```\n */\nexport function McpInput(): ParameterDecorator {\n return (target: object, propertyKey: string | symbol | undefined, parameterIndex: number) => {\n if (!propertyKey) return;\n\n const constructor = target.constructor;\n const existingParams: McpParamMetadata[] =\n Reflect.getMetadata(METADATA_KEYS.PARAMS, constructor) ?? [];\n\n const metadata: McpParamMetadata = {\n type: 'input',\n parameterIndex,\n propertyKey,\n target: constructor,\n };\n\n Reflect.defineMetadata(METADATA_KEYS.PARAMS, [...existingParams, metadata], constructor);\n };\n}\n\n/**\n * Injects a URI parameter from a resource\n *\n * @example\n * ```typescript\n * @McpResource({ uri: 'user://{userId}', name: 'User' })\n * async getUser(@McpParam('userId') userId: string) {\n * // userId is extracted from the URI\n * }\n * ```\n */\nexport function McpParam(name: string): ParameterDecorator {\n return (target: object, propertyKey: string | symbol | undefined, parameterIndex: number) => {\n if (!propertyKey) return;\n\n const constructor = target.constructor;\n const existingParams: McpParamMetadata[] =\n Reflect.getMetadata(METADATA_KEYS.PARAMS, constructor) ?? [];\n\n const metadata: McpParamMetadata = {\n type: 'param',\n name,\n parameterIndex,\n propertyKey,\n target: constructor,\n };\n\n Reflect.defineMetadata(METADATA_KEYS.PARAMS, [...existingParams, metadata], constructor);\n };\n}\n\n/**\n * Injects a prompt argument\n *\n * @example\n * ```typescript\n * @McpPrompt({ name: 'welcome', description: 'Welcome prompt' })\n * async generateWelcome(@McpPromptArg('userName') userName: string) {\n * // userName is the prompt argument\n * }\n * ```\n */\nexport function McpPromptArg(name: string): ParameterDecorator {\n return (target: object, propertyKey: string | symbol | undefined, parameterIndex: number) => {\n if (!propertyKey) return;\n\n const constructor = target.constructor;\n const existingParams: McpParamMetadata[] =\n Reflect.getMetadata(METADATA_KEYS.PARAMS, constructor) ?? [];\n\n const metadata: McpParamMetadata = {\n type: 'promptArg',\n name,\n parameterIndex,\n propertyKey,\n target: constructor,\n };\n\n Reflect.defineMetadata(METADATA_KEYS.PARAMS, [...existingParams, metadata], constructor);\n };\n}\n","import 'reflect-metadata';\nimport {\n METADATA_KEYS,\n extractMetadata,\n type ScannedMetadata,\n McpServerMetadata,\n McpToolMetadata,\n McpResourceMetadata,\n McpPromptMetadata,\n McpParamMetadata,\n} from '@mcp-weave/core';\n\n// Re-export for convenience\nexport { METADATA_KEYS, extractMetadata };\nexport type {\n ScannedMetadata,\n McpServerMetadata,\n McpToolMetadata,\n McpResourceMetadata,\n McpPromptMetadata,\n McpParamMetadata,\n};\n\n/**\n * Check if a class has @McpServer decorator\n */\nexport function isMcpServer(target: Function): boolean {\n return Reflect.hasMetadata(METADATA_KEYS.SERVER, target);\n}\n\n/**\n * Get all MCP servers from an array of classes\n */\nexport function getMcpServers(targets: Function[]): Function[] {\n return targets.filter(isMcpServer);\n}\n\n/**\n * Get server metadata from a class\n */\nexport function getServerMetadata(target: Function): McpServerMetadata | undefined {\n return Reflect.getMetadata(METADATA_KEYS.SERVER, target);\n}\n\n/**\n * Get tools metadata from a class\n */\nexport function getToolsMetadata(target: Function): McpToolMetadata[] {\n return Reflect.getMetadata(METADATA_KEYS.TOOLS, target) ?? [];\n}\n\n/**\n * Get resources metadata from a class\n */\nexport function getResourcesMetadata(target: Function): McpResourceMetadata[] {\n return Reflect.getMetadata(METADATA_KEYS.RESOURCES, target) ?? [];\n}\n\n/**\n * Get prompts metadata from a class\n */\nexport function getPromptsMetadata(target: Function): McpPromptMetadata[] {\n return Reflect.getMetadata(METADATA_KEYS.PROMPTS, target) ?? [];\n}\n\n/**\n * Get params metadata from a class\n */\nexport function getParamsMetadata(target: Function): McpParamMetadata[] {\n return Reflect.getMetadata(METADATA_KEYS.PARAMS, target) ?? [];\n}\n","import { Server, StdioServerTransport, AnyObjectSchema } from './sdk-compat.js';\nimport { extractMetadata } from '../metadata/storage.js';\n\n/**\n * Options for MCP runtime server\n */\nexport interface McpRuntimeOptions {\n /**\n * Transport type\n */\n transport?: 'stdio' | 'sse';\n}\n\n/**\n * Runtime MCP server that wraps a decorated class\n */\nexport class McpRuntimeServer {\n private server: Server;\n private instance: unknown;\n private metadata;\n\n constructor(target: Function, _options: McpRuntimeOptions = {}) {\n this.metadata = extractMetadata(target);\n\n if (!this.metadata.server) {\n throw new Error(`Class ${target.name} is not decorated with @McpServer`);\n }\n\n this.server = new Server(\n {\n name: this.metadata.server.name,\n version: this.metadata.server.version ?? '1.0.0',\n },\n {\n capabilities: {\n tools: this.metadata.tools.length > 0 ? {} : undefined,\n resources: this.metadata.resources.length > 0 ? {} : undefined,\n prompts: this.metadata.prompts.length > 0 ? {} : undefined,\n },\n }\n );\n\n // Create instance of the target class\n this.instance = new (target as unknown as { new (): unknown })();\n\n this.setupHandlers();\n }\n\n private setupHandlers() {\n this.setupToolHandlers();\n this.setupResourceHandlers();\n this.setupPromptHandlers();\n }\n\n private setupToolHandlers() {\n const tools = this.metadata.tools;\n if (tools.length === 0) return;\n\n // List tools\n this.server.setRequestHandler(\n { method: 'tools/list' } as unknown as AnyObjectSchema,\n async () => ({\n tools: tools.map(tool => ({\n name: tool.name,\n description: tool.description,\n inputSchema: tool.inputSchema ?? { type: 'object' as const, properties: {} },\n })),\n })\n );\n\n // Call tool\n this.server.setRequestHandler(\n { method: 'tools/call' } as unknown as AnyObjectSchema,\n async (request: Record<string, unknown>) => {\n if (!request || typeof request !== 'object') throw new Error('Invalid request');\n const params = (request as { params?: Record<string, unknown> }).params;\n if (!params || typeof params !== 'object') throw new Error('Invalid params');\n const toolName = params.name as string;\n const tool = tools.find(t => t.name === toolName);\n if (!tool) {\n throw new Error(`Unknown tool: ${toolName}`);\n }\n const method = Reflect.get(this.instance as object, tool.propertyKey);\n if (typeof method !== 'function') {\n throw new Error(`Method ${String(tool.propertyKey)} not found`);\n }\n const args = this.resolveToolArgs(\n tool.propertyKey,\n (params.arguments ?? {}) as Record<string, unknown>\n );\n const result = await method.apply(this.instance as object, args);\n return {\n content: [\n {\n type: 'text',\n text: typeof result === 'string' ? result : JSON.stringify(result),\n },\n ],\n };\n }\n );\n }\n\n private setupResourceHandlers() {\n const resources = this.metadata.resources;\n if (resources.length === 0) return;\n\n // List resources\n this.server.setRequestHandler(\n { method: 'resources/list' } as unknown as AnyObjectSchema,\n async () => ({\n resources: resources.map(resource => ({\n uri: resource.uri,\n name: resource.name,\n description: resource.description,\n mimeType: resource.mimeType,\n })),\n })\n );\n\n // Read resource\n this.server.setRequestHandler(\n { method: 'resources/read' } as unknown as AnyObjectSchema,\n async (request: Record<string, unknown>) => {\n if (!request || typeof request !== 'object') throw new Error('Invalid request');\n const params = (request as { params?: Record<string, unknown> }).params;\n if (!params || typeof params !== 'object') throw new Error('Invalid params');\n const uri = params.uri as string;\n // Find matching resource\n for (const resource of resources) {\n const uriParams = this.extractUriParams(resource.uri, uri);\n if (uriParams) {\n const method = Reflect.get(this.instance as object, resource.propertyKey);\n if (typeof method !== 'function') {\n throw new Error(`Method ${String(resource.propertyKey)} not found`);\n }\n const args = this.resolveResourceArgs(resource.propertyKey, uriParams);\n return await method.apply(this.instance as object, args);\n }\n }\n throw new Error(`Resource not found: ${uri}`);\n }\n );\n }\n\n private setupPromptHandlers() {\n const prompts = this.metadata.prompts;\n if (prompts.length === 0) return;\n\n // List prompts\n this.server.setRequestHandler(\n { method: 'prompts/list' } as unknown as AnyObjectSchema,\n async () => ({\n prompts: prompts.map(prompt => ({\n name: prompt.name,\n description: prompt.description,\n arguments: prompt.arguments ?? [],\n })),\n })\n );\n\n // Get prompt\n this.server.setRequestHandler(\n { method: 'prompts/get' } as unknown as AnyObjectSchema,\n async (request: Record<string, unknown>) => {\n if (!request || typeof request !== 'object') throw new Error('Invalid request');\n const params = (request as { params?: Record<string, unknown> }).params;\n if (!params || typeof params !== 'object') throw new Error('Invalid params');\n const promptName = params.name as string;\n const prompt = prompts.find(p => p.name === promptName);\n if (!prompt) {\n throw new Error(`Unknown prompt: ${promptName}`);\n }\n const method = Reflect.get(this.instance as object, prompt.propertyKey);\n if (typeof method !== 'function') {\n throw new Error(`Method ${String(prompt.propertyKey)} not found`);\n }\n const args = this.resolvePromptArgs(\n prompt.propertyKey,\n (params.arguments ?? {}) as Record<string, unknown>\n );\n return await method.apply(this.instance as object, args);\n }\n );\n }\n\n private resolveToolArgs(propertyKey: string | symbol, input: Record<string, unknown>): unknown[] {\n const params = this.metadata.params.filter(\n p => p.propertyKey === propertyKey && p.type === 'input'\n );\n\n if (params.length === 0) {\n return [input];\n }\n\n const args: unknown[] = [];\n for (const param of params) {\n args[param.parameterIndex] = input;\n }\n return args;\n }\n\n private resolveResourceArgs(\n propertyKey: string | symbol,\n uriParams: Record<string, string>\n ): unknown[] {\n const params = this.metadata.params.filter(\n p => p.propertyKey === propertyKey && p.type === 'param'\n );\n\n const args: unknown[] = [];\n for (const param of params) {\n if (param.name) {\n args[param.parameterIndex] = uriParams[param.name];\n }\n }\n return args;\n }\n\n private resolvePromptArgs(\n propertyKey: string | symbol,\n promptArgs: Record<string, unknown>\n ): unknown[] {\n const params = this.metadata.params.filter(\n p => p.propertyKey === propertyKey && p.type === 'promptArg'\n );\n\n const args: unknown[] = [];\n for (const param of params) {\n if (param.name) {\n args[param.parameterIndex] = promptArgs[param.name];\n }\n }\n return args;\n }\n\n private extractUriParams(template: string, uri: string): Record<string, string> | null {\n // Convert template to regex: user://{userId} -> user://([^/]+)\n const paramNames: string[] = [];\n const regexStr = template.replace(/\\{(\\w+)\\}/g, (_, name) => {\n paramNames.push(name);\n return '([^/]+)';\n });\n\n const regex = new RegExp(`^${regexStr}$`);\n const match = uri.match(regex);\n\n if (!match) return null;\n\n const params: Record<string, string> = {};\n paramNames.forEach((name, index) => {\n params[name] = match[index + 1] ?? '';\n });\n\n return params;\n }\n\n /**\n * Start the MCP server\n */\n async start(): Promise<void> {\n const transport = new StdioServerTransport();\n await this.server.connect(transport);\n console.error(`MCP server '${this.metadata.server?.name}' started on stdio`);\n }\n\n /**\n * Get the underlying MCP server instance\n */\n getServer(): Server {\n return this.server;\n }\n}\n\n/**\n * Create and start an MCP server from a decorated class\n */\nexport async function createMcpServer(\n target: Function,\n options?: McpRuntimeOptions\n): Promise<McpRuntimeServer> {\n const server = new McpRuntimeServer(target, options);\n await server.start();\n return server;\n}\n","// @mcp-weave/nestjs\n// NestJS integration for MCP-Weave\n\nimport 'reflect-metadata';\n\n// Decorators\nexport * from './decorators/mcp-server.js';\nexport * from './decorators/mcp-tool.js';\nexport * from './decorators/mcp-resource.js';\nexport * from './decorators/mcp-prompt.js';\nexport * from './decorators/params.js';\n\n// Metadata\nexport * from './metadata/storage.js';\n\n// Runtime\nexport * from './runtime/server.js';\n\n// Version\nexport const VERSION = '0.1.0';\n"]}
1
+ {"version":3,"sources":["../src/decorators/mcp-server.ts","../src/decorators/mcp-tool.ts","../src/decorators/mcp-resource.ts","../src/decorators/mcp-prompt.ts","../src/decorators/params.ts","../src/metadata/storage.ts","../src/runtime/server.ts","../src/index.ts"],"names":["METADATA_KEYS"],"mappings":"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","file":"index.mjs","sourcesContent":["import 'reflect-metadata';\nimport { METADATA_KEYS } from '@mcp-weave/core';\nimport type { McpServerMetadata } from '@mcp-weave/core';\n\n/**\n * Options for @McpServer decorator\n */\nexport interface McpServerOptions {\n /**\n * Server name\n */\n name: string;\n\n /**\n * Server version (default: '1.0.0')\n */\n version?: string;\n\n /**\n * Server description\n */\n description?: string;\n}\n\n/**\n * Marks a class as an MCP server\n *\n * @example\n * ```typescript\n * @McpServer({ name: 'my-service', version: '1.0.0' })\n * export class MyController {\n * // ...\n * }\n * ```\n */\nexport function McpServer(options: McpServerOptions): ClassDecorator {\n return (target: Function) => {\n const metadata: McpServerMetadata = {\n name: options.name,\n version: options.version ?? '1.0.0',\n description: options.description,\n target,\n };\n\n Reflect.defineMetadata(METADATA_KEYS.SERVER, metadata, target);\n };\n}\n","import 'reflect-metadata';\nimport { METADATA_KEYS } from '@mcp-weave/core';\nimport type { McpToolMetadata, ToolInputSchema } from '@mcp-weave/core';\n\n/**\n * Options for @McpTool decorator\n */\nexport interface McpToolOptions {\n /**\n * Tool name\n */\n name: string;\n\n /**\n * Tool description\n */\n description: string;\n\n /**\n * Input schema (JSON Schema)\n */\n inputSchema?: ToolInputSchema;\n}\n\n/**\n * Marks a method as an MCP tool\n *\n * @example\n * ```typescript\n * @McpTool({\n * name: 'create_user',\n * description: 'Creates a new user'\n * })\n * async createUser(@McpInput() input: CreateUserDto) {\n * return { success: true };\n * }\n * ```\n */\nexport function McpTool(options: McpToolOptions): MethodDecorator {\n return (target: object, propertyKey: string | symbol, _descriptor: PropertyDescriptor) => {\n const constructor = target.constructor;\n\n const existingTools: McpToolMetadata[] =\n Reflect.getMetadata(METADATA_KEYS.TOOLS, constructor) ?? [];\n\n const metadata: McpToolMetadata = {\n name: options.name,\n description: options.description,\n inputSchema: options.inputSchema,\n propertyKey,\n target: constructor,\n };\n\n Reflect.defineMetadata(METADATA_KEYS.TOOLS, [...existingTools, metadata], constructor);\n };\n}\n","import 'reflect-metadata';\nimport { METADATA_KEYS } from '@mcp-weave/core';\nimport type { McpResourceMetadata } from '@mcp-weave/core';\n\n/**\n * Options for @McpResource decorator\n */\nexport interface McpResourceOptions {\n /**\n * Resource URI template (e.g., 'user://{userId}')\n */\n uri: string;\n\n /**\n * Resource name\n */\n name: string;\n\n /**\n * Resource description\n */\n description?: string;\n\n /**\n * MIME type (default: 'application/json')\n */\n mimeType?: string;\n}\n\n/**\n * Marks a method as an MCP resource\n *\n * @example\n * ```typescript\n * @McpResource({\n * uri: 'user://{userId}',\n * name: 'User Profile',\n * mimeType: 'application/json'\n * })\n * async getUserProfile(@McpParam('userId') userId: string) {\n * return { contents: [...] };\n * }\n * ```\n */\nexport function McpResource(options: McpResourceOptions): MethodDecorator {\n return (target: object, propertyKey: string | symbol, _descriptor: PropertyDescriptor) => {\n const constructor = target.constructor;\n\n const existingResources: McpResourceMetadata[] =\n Reflect.getMetadata(METADATA_KEYS.RESOURCES, constructor) ?? [];\n\n const metadata: McpResourceMetadata = {\n uri: options.uri,\n name: options.name,\n description: options.description,\n mimeType: options.mimeType ?? 'application/json',\n propertyKey,\n target: constructor,\n };\n\n Reflect.defineMetadata(METADATA_KEYS.RESOURCES, [...existingResources, metadata], constructor);\n };\n}\n","import 'reflect-metadata';\nimport { METADATA_KEYS } from '@mcp-weave/core';\nimport type { McpPromptMetadata, PromptArgument } from '@mcp-weave/core';\n\n/**\n * Options for @McpPrompt decorator\n */\nexport interface McpPromptOptions {\n /**\n * Prompt name\n */\n name: string;\n\n /**\n * Prompt description\n */\n description: string;\n\n /**\n * Prompt arguments\n */\n arguments?: PromptArgument[];\n}\n\n/**\n * Marks a method as an MCP prompt\n *\n * @example\n * ```typescript\n * @McpPrompt({\n * name: 'welcome_email',\n * description: 'Generate welcome email for new user'\n * })\n * async generateWelcomeEmail(\n * @McpPromptArg('userName') userName: string\n * ) {\n * return { messages: [...] };\n * }\n * ```\n */\nexport function McpPrompt(options: McpPromptOptions): MethodDecorator {\n return (target: object, propertyKey: string | symbol, _descriptor: PropertyDescriptor) => {\n const constructor = target.constructor;\n\n const existingPrompts: McpPromptMetadata[] =\n Reflect.getMetadata(METADATA_KEYS.PROMPTS, constructor) ?? [];\n\n const metadata: McpPromptMetadata = {\n name: options.name,\n description: options.description,\n arguments: options.arguments,\n propertyKey,\n target: constructor,\n };\n\n Reflect.defineMetadata(METADATA_KEYS.PROMPTS, [...existingPrompts, metadata], constructor);\n };\n}\n","import 'reflect-metadata';\nimport { METADATA_KEYS } from '@mcp-weave/core';\nimport type { McpParamMetadata } from '@mcp-weave/core';\n\n/**\n * Injects the tool input\n *\n * @example\n * ```typescript\n * @McpTool({ name: 'create_user', description: 'Creates a user' })\n * async createUser(@McpInput() input: CreateUserDto) {\n * // input contains the tool arguments\n * }\n * ```\n */\nexport function McpInput(): ParameterDecorator {\n return (target: object, propertyKey: string | symbol | undefined, parameterIndex: number) => {\n if (!propertyKey) return;\n\n const constructor = target.constructor;\n const existingParams: McpParamMetadata[] =\n Reflect.getMetadata(METADATA_KEYS.PARAMS, constructor) ?? [];\n\n const metadata: McpParamMetadata = {\n type: 'input',\n parameterIndex,\n propertyKey,\n target: constructor,\n };\n\n Reflect.defineMetadata(METADATA_KEYS.PARAMS, [...existingParams, metadata], constructor);\n };\n}\n\n/**\n * Injects a URI parameter from a resource\n *\n * @example\n * ```typescript\n * @McpResource({ uri: 'user://{userId}', name: 'User' })\n * async getUser(@McpParam('userId') userId: string) {\n * // userId is extracted from the URI\n * }\n * ```\n */\nexport function McpParam(name: string): ParameterDecorator {\n return (target: object, propertyKey: string | symbol | undefined, parameterIndex: number) => {\n if (!propertyKey) return;\n\n const constructor = target.constructor;\n const existingParams: McpParamMetadata[] =\n Reflect.getMetadata(METADATA_KEYS.PARAMS, constructor) ?? [];\n\n const metadata: McpParamMetadata = {\n type: 'param',\n name,\n parameterIndex,\n propertyKey,\n target: constructor,\n };\n\n Reflect.defineMetadata(METADATA_KEYS.PARAMS, [...existingParams, metadata], constructor);\n };\n}\n\n/**\n * Injects a prompt argument\n *\n * @example\n * ```typescript\n * @McpPrompt({ name: 'welcome', description: 'Welcome prompt' })\n * async generateWelcome(@McpPromptArg('userName') userName: string) {\n * // userName is the prompt argument\n * }\n * ```\n */\nexport function McpPromptArg(name: string): ParameterDecorator {\n return (target: object, propertyKey: string | symbol | undefined, parameterIndex: number) => {\n if (!propertyKey) return;\n\n const constructor = target.constructor;\n const existingParams: McpParamMetadata[] =\n Reflect.getMetadata(METADATA_KEYS.PARAMS, constructor) ?? [];\n\n const metadata: McpParamMetadata = {\n type: 'promptArg',\n name,\n parameterIndex,\n propertyKey,\n target: constructor,\n };\n\n Reflect.defineMetadata(METADATA_KEYS.PARAMS, [...existingParams, metadata], constructor);\n };\n}\n","import 'reflect-metadata';\nimport {\n METADATA_KEYS,\n extractMetadata,\n type ScannedMetadata,\n McpServerMetadata,\n McpToolMetadata,\n McpResourceMetadata,\n McpPromptMetadata,\n McpParamMetadata,\n} from '@mcp-weave/core';\n\n// Re-export for convenience\nexport { METADATA_KEYS, extractMetadata };\nexport type {\n ScannedMetadata,\n McpServerMetadata,\n McpToolMetadata,\n McpResourceMetadata,\n McpPromptMetadata,\n McpParamMetadata,\n};\n\n/**\n * Check if a class has @McpServer decorator\n */\nexport function isMcpServer(target: Function): boolean {\n return Reflect.hasMetadata(METADATA_KEYS.SERVER, target);\n}\n\n/**\n * Get all MCP servers from an array of classes\n */\nexport function getMcpServers(targets: Function[]): Function[] {\n return targets.filter(isMcpServer);\n}\n\n/**\n * Get server metadata from a class\n */\nexport function getServerMetadata(target: Function): McpServerMetadata | undefined {\n return Reflect.getMetadata(METADATA_KEYS.SERVER, target);\n}\n\n/**\n * Get tools metadata from a class\n */\nexport function getToolsMetadata(target: Function): McpToolMetadata[] {\n return Reflect.getMetadata(METADATA_KEYS.TOOLS, target) ?? [];\n}\n\n/**\n * Get resources metadata from a class\n */\nexport function getResourcesMetadata(target: Function): McpResourceMetadata[] {\n return Reflect.getMetadata(METADATA_KEYS.RESOURCES, target) ?? [];\n}\n\n/**\n * Get prompts metadata from a class\n */\nexport function getPromptsMetadata(target: Function): McpPromptMetadata[] {\n return Reflect.getMetadata(METADATA_KEYS.PROMPTS, target) ?? [];\n}\n\n/**\n * Get params metadata from a class\n */\nexport function getParamsMetadata(target: Function): McpParamMetadata[] {\n return Reflect.getMetadata(METADATA_KEYS.PARAMS, target) ?? [];\n}\n","import { Server, StdioServerTransport, SSEServerTransport, AnyObjectSchema } from './sdk-compat.js';\nimport { extractMetadata } from '../metadata/storage.js';\nimport {\n createServer,\n type Server as HttpServer,\n type IncomingMessage,\n type ServerResponse,\n} from 'http';\n\n/**\n * Options for MCP runtime server\n */\nexport interface McpRuntimeOptions {\n /**\n * Transport type: 'stdio' (default), 'sse', or 'websocket'\n */\n transport?: 'stdio' | 'sse' | 'websocket';\n\n /**\n * Port for SSE/WebSocket transport (default: 3000)\n */\n port?: number;\n\n /**\n * Endpoint path for SSE/WebSocket (default: '/sse' or '/ws')\n */\n endpoint?: string;\n}\n\n/**\n * Runtime MCP server that wraps a decorated class\n */\nexport class McpRuntimeServer {\n private server: Server;\n private instance: unknown;\n private metadata;\n\n constructor(target: Function, _options: McpRuntimeOptions = {}) {\n this.metadata = extractMetadata(target);\n\n if (!this.metadata.server) {\n throw new Error(`Class ${target.name} is not decorated with @McpServer`);\n }\n\n this.server = new Server(\n {\n name: this.metadata.server.name,\n version: this.metadata.server.version ?? '1.0.0',\n },\n {\n capabilities: {\n tools: this.metadata.tools.length > 0 ? {} : undefined,\n resources: this.metadata.resources.length > 0 ? {} : undefined,\n prompts: this.metadata.prompts.length > 0 ? {} : undefined,\n },\n }\n );\n\n // Create instance of the target class\n this.instance = new (target as unknown as { new (): unknown })();\n\n this.setupHandlers();\n }\n\n private setupHandlers() {\n this.setupToolHandlers();\n this.setupResourceHandlers();\n this.setupPromptHandlers();\n }\n\n private setupToolHandlers() {\n const tools = this.metadata.tools;\n if (tools.length === 0) return;\n\n // List tools\n this.server.setRequestHandler(\n { method: 'tools/list' } as unknown as AnyObjectSchema,\n async () => ({\n tools: tools.map(tool => ({\n name: tool.name,\n description: tool.description,\n inputSchema: tool.inputSchema ?? { type: 'object' as const, properties: {} },\n })),\n })\n );\n\n // Call tool\n this.server.setRequestHandler(\n { method: 'tools/call' } as unknown as AnyObjectSchema,\n async (request: Record<string, unknown>) => {\n if (!request || typeof request !== 'object') throw new Error('Invalid request');\n const params = (request as { params?: Record<string, unknown> }).params;\n if (!params || typeof params !== 'object') throw new Error('Invalid params');\n const toolName = params.name as string;\n const tool = tools.find(t => t.name === toolName);\n if (!tool) {\n throw new Error(`Unknown tool: ${toolName}`);\n }\n const method = Reflect.get(this.instance as object, tool.propertyKey);\n if (typeof method !== 'function') {\n throw new Error(`Method ${String(tool.propertyKey)} not found`);\n }\n const args = this.resolveToolArgs(\n tool.propertyKey,\n (params.arguments ?? {}) as Record<string, unknown>\n );\n const result = await method.apply(this.instance as object, args);\n return {\n content: [\n {\n type: 'text',\n text: typeof result === 'string' ? result : JSON.stringify(result),\n },\n ],\n };\n }\n );\n }\n\n private setupResourceHandlers() {\n const resources = this.metadata.resources;\n if (resources.length === 0) return;\n\n // List resources\n this.server.setRequestHandler(\n { method: 'resources/list' } as unknown as AnyObjectSchema,\n async () => ({\n resources: resources.map(resource => ({\n uri: resource.uri,\n name: resource.name,\n description: resource.description,\n mimeType: resource.mimeType,\n })),\n })\n );\n\n // Read resource\n this.server.setRequestHandler(\n { method: 'resources/read' } as unknown as AnyObjectSchema,\n async (request: Record<string, unknown>) => {\n if (!request || typeof request !== 'object') throw new Error('Invalid request');\n const params = (request as { params?: Record<string, unknown> }).params;\n if (!params || typeof params !== 'object') throw new Error('Invalid params');\n const uri = params.uri as string;\n // Find matching resource\n for (const resource of resources) {\n const uriParams = this.extractUriParams(resource.uri, uri);\n if (uriParams) {\n const method = Reflect.get(this.instance as object, resource.propertyKey);\n if (typeof method !== 'function') {\n throw new Error(`Method ${String(resource.propertyKey)} not found`);\n }\n const args = this.resolveResourceArgs(resource.propertyKey, uriParams);\n return await method.apply(this.instance as object, args);\n }\n }\n throw new Error(`Resource not found: ${uri}`);\n }\n );\n }\n\n private setupPromptHandlers() {\n const prompts = this.metadata.prompts;\n if (prompts.length === 0) return;\n\n // List prompts\n this.server.setRequestHandler(\n { method: 'prompts/list' } as unknown as AnyObjectSchema,\n async () => ({\n prompts: prompts.map(prompt => ({\n name: prompt.name,\n description: prompt.description,\n arguments: prompt.arguments ?? [],\n })),\n })\n );\n\n // Get prompt\n this.server.setRequestHandler(\n { method: 'prompts/get' } as unknown as AnyObjectSchema,\n async (request: Record<string, unknown>) => {\n if (!request || typeof request !== 'object') throw new Error('Invalid request');\n const params = (request as { params?: Record<string, unknown> }).params;\n if (!params || typeof params !== 'object') throw new Error('Invalid params');\n const promptName = params.name as string;\n const prompt = prompts.find(p => p.name === promptName);\n if (!prompt) {\n throw new Error(`Unknown prompt: ${promptName}`);\n }\n const method = Reflect.get(this.instance as object, prompt.propertyKey);\n if (typeof method !== 'function') {\n throw new Error(`Method ${String(prompt.propertyKey)} not found`);\n }\n const args = this.resolvePromptArgs(\n prompt.propertyKey,\n (params.arguments ?? {}) as Record<string, unknown>\n );\n return await method.apply(this.instance as object, args);\n }\n );\n }\n\n private resolveToolArgs(propertyKey: string | symbol, input: Record<string, unknown>): unknown[] {\n const params = this.metadata.params.filter(\n p => p.propertyKey === propertyKey && p.type === 'input'\n );\n\n if (params.length === 0) {\n return [input];\n }\n\n const args: unknown[] = [];\n for (const param of params) {\n args[param.parameterIndex] = input;\n }\n return args;\n }\n\n private resolveResourceArgs(\n propertyKey: string | symbol,\n uriParams: Record<string, string>\n ): unknown[] {\n const params = this.metadata.params.filter(\n p => p.propertyKey === propertyKey && p.type === 'param'\n );\n\n const args: unknown[] = [];\n for (const param of params) {\n if (param.name) {\n args[param.parameterIndex] = uriParams[param.name];\n }\n }\n return args;\n }\n\n private resolvePromptArgs(\n propertyKey: string | symbol,\n promptArgs: Record<string, unknown>\n ): unknown[] {\n const params = this.metadata.params.filter(\n p => p.propertyKey === propertyKey && p.type === 'promptArg'\n );\n\n const args: unknown[] = [];\n for (const param of params) {\n if (param.name) {\n args[param.parameterIndex] = promptArgs[param.name];\n }\n }\n return args;\n }\n\n private extractUriParams(template: string, uri: string): Record<string, string> | null {\n // Convert template to regex: user://{userId} -> user://([^/]+)\n const paramNames: string[] = [];\n const regexStr = template.replace(/\\{(\\w+)\\}/g, (_, name) => {\n paramNames.push(name);\n return '([^/]+)';\n });\n\n const regex = new RegExp(`^${regexStr}$`);\n const match = uri.match(regex);\n\n if (!match) return null;\n\n const params: Record<string, string> = {};\n paramNames.forEach((name, index) => {\n params[name] = match[index + 1] ?? '';\n });\n\n return params;\n }\n\n /**\n * Start the MCP server with stdio transport\n */\n async start(): Promise<void> {\n const transport = new StdioServerTransport();\n await this.server.connect(transport);\n console.error(`MCP server '${this.metadata.server?.name}' started on stdio`);\n }\n\n /**\n * Start the MCP server with SSE transport\n */\n async startSSE(options: { port?: number; endpoint?: string } = {}): Promise<HttpServer> {\n const port = options.port ?? 3000;\n const endpoint = options.endpoint ?? '/sse';\n\n const httpServer = createServer(async (req: IncomingMessage, res: ServerResponse) => {\n // Handle CORS\n res.setHeader('Access-Control-Allow-Origin', '*');\n res.setHeader('Access-Control-Allow-Methods', 'GET, POST, OPTIONS');\n res.setHeader('Access-Control-Allow-Headers', 'Content-Type');\n\n if (req.method === 'OPTIONS') {\n res.writeHead(200);\n res.end();\n return;\n }\n\n const url = new URL(req.url ?? '/', `http://localhost:${port}`);\n\n // SSE endpoint\n if (url.pathname === endpoint && req.method === 'GET') {\n const transport = new SSEServerTransport(endpoint, res);\n await this.server.connect(transport);\n return;\n }\n\n // Message endpoint (POST to /sse/message or similar)\n if (url.pathname === `${endpoint}/message` && req.method === 'POST') {\n // Handle message posting for SSE\n let body = '';\n req.on('data', chunk => {\n body += chunk.toString();\n });\n req.on('end', () => {\n res.writeHead(200, { 'Content-Type': 'application/json' });\n res.end(JSON.stringify({ received: true }));\n });\n return;\n }\n\n // Health check\n if (url.pathname === '/health') {\n res.writeHead(200, { 'Content-Type': 'application/json' });\n res.end(\n JSON.stringify({\n status: 'ok',\n server: this.metadata.server?.name,\n version: this.metadata.server?.version,\n })\n );\n return;\n }\n\n // 404 for other routes\n res.writeHead(404, { 'Content-Type': 'application/json' });\n res.end(JSON.stringify({ error: 'Not found' }));\n });\n\n return new Promise((resolve, reject) => {\n httpServer.on('error', reject);\n httpServer.listen(port, () => {\n console.error(\n `MCP server '${this.metadata.server?.name}' started on http://localhost:${port}${endpoint}`\n );\n resolve(httpServer);\n });\n });\n }\n\n /**\n * Get the underlying MCP server instance\n */\n getServer(): Server {\n return this.server;\n }\n\n /**\n * Start the MCP server with WebSocket transport\n */\n async startWebSocket(options: { port?: number; endpoint?: string } = {}): Promise<HttpServer> {\n const port = options.port ?? 8080;\n const endpoint = options.endpoint ?? '/ws';\n\n // Create HTTP server for WebSocket upgrade\n const httpServer = createServer((req: IncomingMessage, res: ServerResponse) => {\n // Handle CORS\n res.setHeader('Access-Control-Allow-Origin', '*');\n res.setHeader('Access-Control-Allow-Methods', 'GET, POST, OPTIONS');\n res.setHeader('Access-Control-Allow-Headers', 'Content-Type, Upgrade, Connection');\n\n if (req.method === 'OPTIONS') {\n res.writeHead(200);\n res.end();\n return;\n }\n\n // Health check\n if (req.url === '/health') {\n res.writeHead(200, { 'Content-Type': 'application/json' });\n res.end(\n JSON.stringify({\n status: 'ok',\n server: this.metadata.server?.name,\n version: this.metadata.server?.version,\n transport: 'websocket',\n })\n );\n return;\n }\n\n // Info endpoint\n if (req.url === '/') {\n res.writeHead(200, { 'Content-Type': 'application/json' });\n res.end(\n JSON.stringify({\n name: this.metadata.server?.name,\n version: this.metadata.server?.version,\n websocket: `ws://localhost:${port}${endpoint}`,\n tools: this.metadata.tools.length,\n resources: this.metadata.resources.length,\n prompts: this.metadata.prompts.length,\n })\n );\n return;\n }\n\n res.writeHead(426, { 'Content-Type': 'application/json' });\n res.end(JSON.stringify({ error: 'Upgrade Required', message: `Connect via WebSocket at ${endpoint}` }));\n });\n\n // Handle WebSocket upgrade manually\n httpServer.on('upgrade', (req: IncomingMessage, socket, _head) => {\n const url = new URL(req.url ?? '/', `http://localhost:${port}`);\n\n if (url.pathname !== endpoint) {\n socket.write('HTTP/1.1 404 Not Found\\r\\n\\r\\n');\n socket.destroy();\n return;\n }\n\n // Accept WebSocket connection\n const key = req.headers['sec-websocket-key'];\n if (!key) {\n socket.write('HTTP/1.1 400 Bad Request\\r\\n\\r\\n');\n socket.destroy();\n return;\n }\n\n // Generate accept key\n const crypto = require('crypto');\n const acceptKey = crypto\n .createHash('sha1')\n .update(key + '258EAFA5-E914-47DA-95CA-C5AB0DC85B11')\n .digest('base64');\n\n // Send handshake response\n socket.write(\n 'HTTP/1.1 101 Switching Protocols\\r\\n' +\n 'Upgrade: websocket\\r\\n' +\n 'Connection: Upgrade\\r\\n' +\n `Sec-WebSocket-Accept: ${acceptKey}\\r\\n` +\n '\\r\\n'\n );\n\n // Create a simple WebSocket message handler\n const sessions = new Map<string, { send: (data: string) => void }>();\n const sessionId = crypto.randomUUID();\n\n // WebSocket frame encoding\n const encodeFrame = (data: string): Buffer => {\n const payload = Buffer.from(data, 'utf8');\n const length = payload.length;\n let frame: Buffer;\n\n if (length < 126) {\n frame = Buffer.alloc(2 + length);\n frame[0] = 0x81; // Text frame, FIN bit set\n frame[1] = length;\n payload.copy(frame, 2);\n } else if (length < 65536) {\n frame = Buffer.alloc(4 + length);\n frame[0] = 0x81;\n frame[1] = 126;\n frame.writeUInt16BE(length, 2);\n payload.copy(frame, 4);\n } else {\n frame = Buffer.alloc(10 + length);\n frame[0] = 0x81;\n frame[1] = 127;\n frame.writeBigUInt64BE(BigInt(length), 2);\n payload.copy(frame, 10);\n }\n return frame;\n };\n\n // WebSocket frame decoding\n const decodeFrame = (buffer: Buffer): { opcode: number; payload: string } | null => {\n if (buffer.length < 2) return null;\n\n const byte0 = buffer[0]!;\n const byte1 = buffer[1]!;\n const opcode = byte0 & 0x0f;\n const masked = (byte1 & 0x80) !== 0;\n let payloadLength = byte1 & 0x7f;\n let offset = 2;\n\n if (payloadLength === 126) {\n if (buffer.length < 4) return null;\n payloadLength = buffer.readUInt16BE(2);\n offset = 4;\n } else if (payloadLength === 127) {\n if (buffer.length < 10) return null;\n payloadLength = Number(buffer.readBigUInt64BE(2));\n offset = 10;\n }\n\n if (masked) {\n if (buffer.length < offset + 4 + payloadLength) return null;\n const mask = buffer.slice(offset, offset + 4);\n offset += 4;\n const payload = buffer.slice(offset, offset + payloadLength);\n for (let i = 0; i < payload.length; i++) {\n const maskByte = mask[i % 4] ?? 0;\n payload[i] = (payload[i] ?? 0) ^ maskByte;\n }\n return { opcode, payload: payload.toString('utf8') };\n } else {\n if (buffer.length < offset + payloadLength) return null;\n return { opcode, payload: buffer.slice(offset, offset + payloadLength).toString('utf8') };\n }\n };\n\n // Send function\n const send = (data: string) => {\n try {\n socket.write(encodeFrame(data));\n } catch {\n // Connection closed\n }\n };\n\n sessions.set(sessionId, { send });\n\n // Send welcome message\n send(JSON.stringify({\n jsonrpc: '2.0',\n method: 'connection/established',\n params: { sessionId, server: this.metadata.server?.name },\n }));\n\n // Handle incoming messages\n let messageBuffer = Buffer.alloc(0);\n\n socket.on('data', async (chunk: Buffer) => {\n messageBuffer = Buffer.concat([messageBuffer, chunk]);\n\n while (messageBuffer.length > 0) {\n const frame = decodeFrame(messageBuffer);\n if (!frame) break;\n\n // Calculate frame size to remove from buffer\n let frameSize = 2;\n const byte1 = messageBuffer[1] ?? 0;\n const payloadLength = byte1 & 0x7f;\n if (payloadLength === 126) frameSize = 4;\n else if (payloadLength === 127) frameSize = 10;\n if ((byte1 & 0x80) !== 0) frameSize += 4;\n frameSize += frame.payload.length;\n messageBuffer = messageBuffer.slice(frameSize);\n\n if (frame.opcode === 0x08) {\n // Close frame\n socket.end();\n return;\n }\n\n if (frame.opcode === 0x09) {\n // Ping - send pong\n socket.write(Buffer.from([0x8a, 0x00]));\n continue;\n }\n\n if (frame.opcode === 0x01) {\n // Text frame - handle JSON-RPC\n try {\n const message = JSON.parse(frame.payload);\n const response = await this.handleWebSocketMessage(message);\n if (response) {\n send(JSON.stringify(response));\n }\n } catch (error) {\n send(JSON.stringify({\n jsonrpc: '2.0',\n error: { code: -32700, message: 'Parse error' },\n id: null,\n }));\n }\n }\n }\n });\n\n socket.on('close', () => {\n sessions.delete(sessionId);\n });\n\n socket.on('error', () => {\n sessions.delete(sessionId);\n });\n });\n\n return new Promise((resolve, reject) => {\n httpServer.on('error', reject);\n httpServer.listen(port, () => {\n console.error(\n `MCP server '${this.metadata.server?.name}' started on ws://localhost:${port}${endpoint}`\n );\n resolve(httpServer);\n });\n });\n }\n\n /**\n * Handle WebSocket JSON-RPC messages\n */\n private async handleWebSocketMessage(message: unknown): Promise<unknown> {\n if (!message || typeof message !== 'object') {\n return { jsonrpc: '2.0', error: { code: -32600, message: 'Invalid Request' }, id: null };\n }\n\n const req = message as { jsonrpc?: string; method?: string; params?: unknown; id?: unknown };\n\n if (req.jsonrpc !== '2.0' || !req.method) {\n return { jsonrpc: '2.0', error: { code: -32600, message: 'Invalid Request' }, id: req.id ?? null };\n }\n\n try {\n let result: unknown;\n\n switch (req.method) {\n case 'initialize':\n result = {\n protocolVersion: '2024-11-05',\n serverInfo: {\n name: this.metadata.server?.name,\n version: this.metadata.server?.version ?? '1.0.0',\n },\n capabilities: {\n tools: this.metadata.tools.length > 0 ? {} : undefined,\n resources: this.metadata.resources.length > 0 ? {} : undefined,\n prompts: this.metadata.prompts.length > 0 ? {} : undefined,\n },\n };\n break;\n\n case 'tools/list':\n result = {\n tools: this.metadata.tools.map(t => ({\n name: t.name,\n description: t.description,\n inputSchema: t.inputSchema ?? { type: 'object', properties: {} },\n })),\n };\n break;\n\n case 'tools/call':\n const toolParams = req.params as { name: string; arguments?: Record<string, unknown> };\n const tool = this.metadata.tools.find(t => t.name === toolParams.name);\n if (!tool) {\n return { jsonrpc: '2.0', error: { code: -32602, message: `Unknown tool: ${toolParams.name}` }, id: req.id };\n }\n const method = Reflect.get(this.instance as object, tool.propertyKey);\n const toolResult = await method.apply(this.instance, [toolParams.arguments ?? {}]);\n result = {\n content: [{\n type: 'text',\n text: typeof toolResult === 'string' ? toolResult : JSON.stringify(toolResult),\n }],\n };\n break;\n\n case 'resources/list':\n result = {\n resources: this.metadata.resources.map(r => ({\n uri: r.uri,\n name: r.name,\n description: r.description,\n mimeType: r.mimeType,\n })),\n };\n break;\n\n case 'resources/read':\n const resParams = req.params as { uri: string };\n for (const resource of this.metadata.resources) {\n const uriParams = this.extractUriParams(resource.uri, resParams.uri);\n if (uriParams) {\n const resMethod = Reflect.get(this.instance as object, resource.propertyKey);\n const args = this.resolveResourceArgs(resource.propertyKey, uriParams);\n result = await resMethod.apply(this.instance, args);\n break;\n }\n }\n if (!result) {\n return { jsonrpc: '2.0', error: { code: -32602, message: `Resource not found: ${resParams.uri}` }, id: req.id };\n }\n break;\n\n case 'prompts/list':\n result = {\n prompts: this.metadata.prompts.map(p => ({\n name: p.name,\n description: p.description,\n arguments: p.arguments ?? [],\n })),\n };\n break;\n\n case 'prompts/get':\n const promptParams = req.params as { name: string; arguments?: Record<string, unknown> };\n const prompt = this.metadata.prompts.find(p => p.name === promptParams.name);\n if (!prompt) {\n return { jsonrpc: '2.0', error: { code: -32602, message: `Unknown prompt: ${promptParams.name}` }, id: req.id };\n }\n const promptMethod = Reflect.get(this.instance as object, prompt.propertyKey);\n const promptArgs = this.resolvePromptArgs(prompt.propertyKey, promptParams.arguments ?? {});\n result = await promptMethod.apply(this.instance, promptArgs);\n break;\n\n default:\n return { jsonrpc: '2.0', error: { code: -32601, message: `Method not found: ${req.method}` }, id: req.id };\n }\n\n return { jsonrpc: '2.0', result, id: req.id };\n } catch (error) {\n return {\n jsonrpc: '2.0',\n error: { code: -32000, message: error instanceof Error ? error.message : 'Internal error' },\n id: req.id,\n };\n }\n }\n}\n\n/**\n * Create and start an MCP server from a decorated class\n *\n * @example\n * // Stdio transport (default)\n * await createMcpServer(MyServer);\n *\n * @example\n * // SSE transport\n * await createMcpServer(MyServer, { transport: 'sse', port: 3000 });\n *\n * @example\n * // WebSocket transport\n * await createMcpServer(MyServer, { transport: 'websocket', port: 8080 });\n */\nexport async function createMcpServer(\n target: Function,\n options: McpRuntimeOptions = {}\n): Promise<McpRuntimeServer> {\n const server = new McpRuntimeServer(target, options);\n\n if (options.transport === 'sse') {\n await server.startSSE({ port: options.port, endpoint: options.endpoint });\n } else if (options.transport === 'websocket') {\n await server.startWebSocket({ port: options.port, endpoint: options.endpoint });\n } else {\n await server.start();\n }\n\n return server;\n}\n","// @mcp-weave/nestjs\n// NestJS integration for MCP-Weave\n\nimport 'reflect-metadata';\n\n// Decorators\nexport * from './decorators/mcp-server.js';\nexport * from './decorators/mcp-tool.js';\nexport * from './decorators/mcp-resource.js';\nexport * from './decorators/mcp-prompt.js';\nexport * from './decorators/params.js';\n\n// Metadata\nexport * from './metadata/storage.js';\n\n// Runtime\nexport * from './runtime/server.js';\n\n// Version\nexport const VERSION = '0.1.0';\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mcp-weave/nestjs",
3
- "version": "0.1.1",
3
+ "version": "0.2.0",
4
4
  "description": "NestJS integration for MCP-Weave - decorators and runtime",
5
5
  "main": "./dist/index.js",
6
6
  "module": "./dist/index.mjs",