@mcp-weave/nestjs 0.1.1 → 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +41 -0
- package/dist/index.d.mts +168 -7
- package/dist/index.d.ts +168 -7
- package/dist/index.js +596 -4
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +585 -5
- package/dist/index.mjs.map +1 -1
- package/package.json +1 -1
package/dist/index.mjs.map
CHANGED
|
@@ -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/auth/index.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","/**\n * @mcp-weave/nestjs - Authentication Module\n * Provides API key authentication and request tracking\n */\n\nimport type { IncomingMessage, ServerResponse } from 'http';\n\n/**\n * API Key configuration\n */\nexport interface ApiKeyConfig {\n /** The API key value */\n key: string;\n /** Human-readable name for the key (for logging) */\n name?: string;\n /** Optional metadata associated with this key */\n metadata?: Record<string, unknown>;\n /** Scopes/permissions for this key */\n scopes?: string[];\n}\n\n/**\n * Authentication options for MCP servers\n */\nexport interface McpAuthOptions {\n /**\n * Enable authentication (default: false)\n */\n enabled?: boolean;\n\n /**\n * API keys allowed to access the server\n * Can be a single key string, array of keys, or array of ApiKeyConfig objects\n */\n apiKeys?: string | string[] | ApiKeyConfig[];\n\n /**\n * Header name for the API key (default: 'x-api-key')\n */\n headerName?: string;\n\n /**\n * Query parameter name for the API key (default: 'api_key')\n */\n queryParamName?: string;\n\n /**\n * Custom authentication function\n * Return true to allow, false to deny, or an AuthResult object\n */\n authenticate?: (\n token: string | undefined,\n request: IncomingMessage\n ) => boolean | AuthResult | Promise<boolean | AuthResult>;\n\n /**\n * Called when authentication fails\n */\n onAuthFailure?: (request: IncomingMessage, reason: string) => void;\n\n /**\n * Called when authentication succeeds\n */\n onAuthSuccess?: (request: IncomingMessage, result: AuthResult) => void;\n}\n\n/**\n * Result of authentication\n */\nexport interface AuthResult {\n /** Whether authentication succeeded */\n success: boolean;\n /** Client identifier (for tracking) */\n clientId?: string;\n /** Client name (for logging) */\n clientName?: string;\n /** Scopes/permissions granted */\n scopes?: string[];\n /** Additional metadata */\n metadata?: Record<string, unknown>;\n /** Error message if authentication failed */\n error?: string;\n}\n\n/**\n * Request context with authentication info\n */\nexport interface AuthenticatedRequest {\n /** The original request */\n request: IncomingMessage;\n /** Authentication result */\n auth: AuthResult;\n /** Request ID for tracking */\n requestId: string;\n /** Timestamp of the request */\n timestamp: Date;\n}\n\n/**\n * Normalize API keys configuration to ApiKeyConfig array\n */\nexport function normalizeApiKeys(\n keys: string | string[] | ApiKeyConfig[] | undefined\n): ApiKeyConfig[] {\n if (!keys) return [];\n\n if (typeof keys === 'string') {\n return [{ key: keys, name: 'default' }];\n }\n\n return keys.map((k, index) => {\n if (typeof k === 'string') {\n return { key: k, name: `key-${index + 1}` };\n }\n return k;\n });\n}\n\n/**\n * Extract API key from request\n */\nexport function extractApiKey(\n req: IncomingMessage,\n headerName: string = 'x-api-key',\n queryParamName: string = 'api_key'\n): string | undefined {\n // Check header first\n const headerKey = req.headers[headerName.toLowerCase()];\n if (headerKey) {\n return Array.isArray(headerKey) ? headerKey[0] : headerKey;\n }\n\n // Check Authorization header (Bearer token)\n const authHeader = req.headers['authorization'];\n if (authHeader && authHeader.startsWith('Bearer ')) {\n return authHeader.slice(7);\n }\n\n // Check query parameter\n const url = req.url ?? '';\n const queryIndex = url.indexOf('?');\n if (queryIndex !== -1) {\n const searchParams = new URLSearchParams(url.slice(queryIndex + 1));\n const queryKey = searchParams.get(queryParamName);\n if (queryKey) return queryKey;\n }\n\n return undefined;\n}\n\n/**\n * Validate API key against configured keys\n */\nexport function validateApiKey(token: string | undefined, apiKeys: ApiKeyConfig[]): AuthResult {\n if (!token) {\n return {\n success: false,\n error: 'No API key provided',\n };\n }\n\n const matchedKey = apiKeys.find(k => k.key === token);\n\n if (!matchedKey) {\n return {\n success: false,\n error: 'Invalid API key',\n };\n }\n\n return {\n success: true,\n clientId: hashToken(token),\n clientName: matchedKey.name,\n scopes: matchedKey.scopes,\n metadata: matchedKey.metadata,\n };\n}\n\n/**\n * Hash a token for safe logging (shows first 4 and last 4 chars)\n */\nexport function hashToken(token: string): string {\n if (token.length <= 8) {\n return '****';\n }\n return `${token.slice(0, 4)}...${token.slice(-4)}`;\n}\n\n/**\n * Generate a unique request ID\n */\nexport function generateRequestId(): string {\n return `req_${Date.now()}_${Math.random().toString(36).substr(2, 9)}`;\n}\n\n/**\n * Create an authentication middleware for HTTP requests\n */\nexport function createAuthMiddleware(options: McpAuthOptions = {}) {\n const {\n enabled = false,\n apiKeys,\n headerName = 'x-api-key',\n queryParamName = 'api_key',\n authenticate,\n onAuthFailure,\n onAuthSuccess,\n } = options;\n\n const normalizedKeys = normalizeApiKeys(apiKeys);\n\n return async (\n req: IncomingMessage,\n res: ServerResponse\n ): Promise<AuthenticatedRequest | null> => {\n const requestId = generateRequestId();\n const timestamp = new Date();\n\n // If auth is disabled, return a default context\n if (!enabled) {\n return {\n request: req,\n auth: { success: true, clientId: 'anonymous' },\n requestId,\n timestamp,\n };\n }\n\n const token = extractApiKey(req, headerName, queryParamName);\n let result: AuthResult;\n\n // Use custom authenticate function if provided\n if (authenticate) {\n const authResult = await authenticate(token, req);\n if (typeof authResult === 'boolean') {\n result = {\n success: authResult,\n clientId: authResult ? hashToken(token ?? 'unknown') : undefined,\n error: authResult ? undefined : 'Authentication failed',\n };\n } else {\n result = authResult;\n }\n } else {\n // Use built-in API key validation\n result = validateApiKey(token, normalizedKeys);\n }\n\n if (!result.success) {\n onAuthFailure?.(req, result.error ?? 'Unknown error');\n\n res.writeHead(401, { 'Content-Type': 'application/json' });\n res.end(\n JSON.stringify({\n error: 'Unauthorized',\n message: result.error ?? 'Authentication required',\n requestId,\n })\n );\n return null;\n }\n\n const authRequest: AuthenticatedRequest = {\n request: req,\n auth: result,\n requestId,\n timestamp,\n };\n\n onAuthSuccess?.(req, result);\n\n return authRequest;\n };\n}\n\n/**\n * Send unauthorized response\n */\nexport function sendUnauthorized(\n res: ServerResponse,\n message: string = 'Unauthorized',\n requestId?: string\n): void {\n res.writeHead(401, { 'Content-Type': 'application/json' });\n res.end(\n JSON.stringify({\n error: 'Unauthorized',\n message,\n requestId,\n })\n );\n}\n\n/**\n * Generate a random API key\n */\nexport function generateApiKey(prefix: string = 'mcp'): string {\n const chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';\n let key = '';\n for (let i = 0; i < 32; i++) {\n key += chars.charAt(Math.floor(Math.random() * chars.length));\n }\n return `${prefix}_${key}`;\n}\n","import crypto from 'crypto';\nimport {\n createServer,\n type Server as HttpServer,\n type IncomingMessage,\n type ServerResponse,\n} from 'http';\n\nimport { Server, StdioServerTransport, SSEServerTransport, AnyObjectSchema } from './sdk-compat.js';\nimport {\n type McpAuthOptions,\n createAuthMiddleware,\n extractApiKey,\n validateApiKey,\n normalizeApiKeys,\n} from '../auth/index.js';\nimport { extractMetadata } from '../metadata/storage.js';\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 * Authentication options\n */\n auth?: McpAuthOptions;\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 private authOptions: McpAuthOptions;\n private authMiddleware: ReturnType<typeof createAuthMiddleware>;\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 // Setup auth\n this.authOptions = options.auth ?? {};\n this.authMiddleware = createAuthMiddleware(this.authOptions);\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, Authorization, X-Api-Key');\n\n if (req.method === 'OPTIONS') {\n res.writeHead(200);\n res.end();\n return;\n }\n\n // Authenticate request\n const authResult = await this.authMiddleware(req, res);\n if (!authResult) return; // Auth failed, response already sent\n\n const url = new URL(req.url ?? '/', `http://localhost:${port}`);\n\n // Log authenticated request\n if (this.authOptions.enabled) {\n console.error(\n `[${authResult.requestId}] ${authResult.auth.clientName ?? authResult.auth.clientId} - ${req.method} ${url.pathname}`\n );\n }\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(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(\n 'Access-Control-Allow-Headers',\n 'Content-Type, Upgrade, Connection, Authorization, X-Api-Key'\n );\n\n if (req.method === 'OPTIONS') {\n res.writeHead(200);\n res.end();\n return;\n }\n\n // Health check (no auth required)\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 authEnabled: this.authOptions.enabled ?? false,\n })\n );\n return;\n }\n\n // Authenticate for other endpoints\n const authResult = await this.authMiddleware(req, res);\n if (!authResult) return;\n\n // Info endpoint\n if (req.url === '/' || req.url?.startsWith('/?')) {\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 client: authResult.auth.clientName,\n requestId: authResult.requestId,\n })\n );\n return;\n }\n res.writeHead(426, { 'Content-Type': 'application/json' });\n res.end(\n JSON.stringify({\n error: 'Upgrade Required',\n message: `Connect via WebSocket at ${endpoint}`,\n })\n );\n });\n\n // Handle WebSocket upgrade manually\n httpServer.on('upgrade', async (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 // Authenticate WebSocket connection\n if (this.authOptions.enabled) {\n const apiKeys = normalizeApiKeys(this.authOptions.apiKeys);\n const token = extractApiKey(\n req,\n this.authOptions.headerName,\n this.authOptions.queryParamName\n );\n const authResult = validateApiKey(token, apiKeys);\n\n if (!authResult.success) {\n socket.write('HTTP/1.1 401 Unauthorized\\r\\n\\r\\n');\n socket.destroy();\n this.authOptions.onAuthFailure?.(req, authResult.error ?? 'Auth failed');\n return;\n }\n\n console.error(\n `[WebSocket] Client connected: ${authResult.clientName ?? authResult.clientId}`\n );\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 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(\n JSON.stringify({\n jsonrpc: '2.0',\n method: 'connection/established',\n params: { sessionId, server: this.metadata.server?.name },\n })\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(\n JSON.stringify({\n jsonrpc: '2.0',\n error: { code: -32700, message: 'Parse error' },\n id: null,\n })\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 {\n jsonrpc: '2.0',\n error: { code: -32600, message: 'Invalid Request' },\n id: req.id ?? null,\n };\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 {\n jsonrpc: '2.0',\n error: { code: -32602, message: `Unknown tool: ${toolParams.name}` },\n id: req.id,\n };\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 {\n type: 'text',\n text: typeof toolResult === 'string' ? toolResult : JSON.stringify(toolResult),\n },\n ],\n };\n break;\n }\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 {\n jsonrpc: '2.0',\n error: { code: -32602, message: `Resource not found: ${resParams.uri}` },\n id: req.id,\n };\n }\n break;\n }\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 {\n jsonrpc: '2.0',\n error: { code: -32602, message: `Unknown prompt: ${promptParams.name}` },\n id: req.id,\n };\n }\n const promptMethod = Reflect.get(this.instance as object, prompt.propertyKey);\n const promptArgs = this.resolvePromptArgs(\n prompt.propertyKey,\n promptParams.arguments ?? {}\n );\n result = await promptMethod.apply(this.instance, promptArgs);\n break;\n }\n\n default:\n return {\n jsonrpc: '2.0',\n error: { code: -32601, message: `Method not found: ${req.method}` },\n id: req.id,\n };\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// Authentication\nexport * from './auth/index.js';\n\n// Version\nexport const VERSION = '0.1.0';\n"]}
|