@cyanheads/mcp-ts-core 0.1.0-beta.12
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/CLAUDE.md +583 -0
- package/LICENSE +201 -0
- package/README.md +287 -0
- package/biome.json +103 -0
- package/dist/app.d.ts +82 -0
- package/dist/app.d.ts.map +1 -0
- package/dist/app.js +222 -0
- package/dist/app.js.map +1 -0
- package/dist/cli/init.d.ts +8 -0
- package/dist/cli/init.d.ts.map +1 -0
- package/dist/cli/init.js +161 -0
- package/dist/cli/init.js.map +1 -0
- package/dist/config/index.d.ts +349 -0
- package/dist/config/index.d.ts.map +1 -0
- package/dist/config/index.js +464 -0
- package/dist/config/index.js.map +1 -0
- package/dist/context.d.ts +119 -0
- package/dist/context.d.ts.map +1 -0
- package/dist/context.js +144 -0
- package/dist/context.js.map +1 -0
- package/dist/index.d.ts +8 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +9 -0
- package/dist/index.js.map +1 -0
- package/dist/mcp-server/prompts/prompt-registration.d.ts +33 -0
- package/dist/mcp-server/prompts/prompt-registration.d.ts.map +1 -0
- package/dist/mcp-server/prompts/prompt-registration.js +91 -0
- package/dist/mcp-server/prompts/prompt-registration.js.map +1 -0
- package/dist/mcp-server/prompts/utils/newPromptDefinition.d.ts +49 -0
- package/dist/mcp-server/prompts/utils/newPromptDefinition.d.ts.map +1 -0
- package/dist/mcp-server/prompts/utils/newPromptDefinition.js +39 -0
- package/dist/mcp-server/prompts/utils/newPromptDefinition.js.map +1 -0
- package/dist/mcp-server/prompts/utils/promptDefinition.d.ts +37 -0
- package/dist/mcp-server/prompts/utils/promptDefinition.d.ts.map +1 -0
- package/dist/mcp-server/prompts/utils/promptDefinition.js +2 -0
- package/dist/mcp-server/prompts/utils/promptDefinition.js.map +1 -0
- package/dist/mcp-server/resources/resource-registration.d.ts +27 -0
- package/dist/mcp-server/resources/resource-registration.d.ts.map +1 -0
- package/dist/mcp-server/resources/resource-registration.js +85 -0
- package/dist/mcp-server/resources/resource-registration.js.map +1 -0
- package/dist/mcp-server/resources/utils/newResourceDefinition.d.ts +84 -0
- package/dist/mcp-server/resources/utils/newResourceDefinition.d.ts.map +1 -0
- package/dist/mcp-server/resources/utils/newResourceDefinition.js +40 -0
- package/dist/mcp-server/resources/utils/newResourceDefinition.js.map +1 -0
- package/dist/mcp-server/resources/utils/newResourceHandlerFactory.d.ts +32 -0
- package/dist/mcp-server/resources/utils/newResourceHandlerFactory.d.ts.map +1 -0
- package/dist/mcp-server/resources/utils/newResourceHandlerFactory.js +103 -0
- package/dist/mcp-server/resources/utils/newResourceHandlerFactory.js.map +1 -0
- package/dist/mcp-server/resources/utils/resourceDefinition.d.ts +94 -0
- package/dist/mcp-server/resources/utils/resourceDefinition.d.ts.map +1 -0
- package/dist/mcp-server/resources/utils/resourceDefinition.js +2 -0
- package/dist/mcp-server/resources/utils/resourceDefinition.js.map +1 -0
- package/dist/mcp-server/resources/utils/resourceHandlerFactory.d.ts +14 -0
- package/dist/mcp-server/resources/utils/resourceHandlerFactory.d.ts.map +1 -0
- package/dist/mcp-server/resources/utils/resourceHandlerFactory.js +111 -0
- package/dist/mcp-server/resources/utils/resourceHandlerFactory.js.map +1 -0
- package/dist/mcp-server/roots/roots-registration.d.ts +22 -0
- package/dist/mcp-server/roots/roots-registration.d.ts.map +1 -0
- package/dist/mcp-server/roots/roots-registration.js +25 -0
- package/dist/mcp-server/roots/roots-registration.js.map +1 -0
- package/dist/mcp-server/server.d.ts +34 -0
- package/dist/mcp-server/server.d.ts.map +1 -0
- package/dist/mcp-server/server.js +62 -0
- package/dist/mcp-server/server.js.map +1 -0
- package/dist/mcp-server/tasks/core/sessionAwareTaskStore.d.ts +42 -0
- package/dist/mcp-server/tasks/core/sessionAwareTaskStore.d.ts.map +1 -0
- package/dist/mcp-server/tasks/core/sessionAwareTaskStore.js +70 -0
- package/dist/mcp-server/tasks/core/sessionAwareTaskStore.js.map +1 -0
- package/dist/mcp-server/tasks/core/storageBackedTaskStore.d.ts +109 -0
- package/dist/mcp-server/tasks/core/storageBackedTaskStore.d.ts.map +1 -0
- package/dist/mcp-server/tasks/core/storageBackedTaskStore.js +209 -0
- package/dist/mcp-server/tasks/core/storageBackedTaskStore.js.map +1 -0
- package/dist/mcp-server/tasks/core/taskManager.d.ts +103 -0
- package/dist/mcp-server/tasks/core/taskManager.d.ts.map +1 -0
- package/dist/mcp-server/tasks/core/taskManager.js +144 -0
- package/dist/mcp-server/tasks/core/taskManager.js.map +1 -0
- package/dist/mcp-server/tasks/core/taskTypes.d.ts +11 -0
- package/dist/mcp-server/tasks/core/taskTypes.d.ts.map +1 -0
- package/dist/mcp-server/tasks/core/taskTypes.js +13 -0
- package/dist/mcp-server/tasks/core/taskTypes.js.map +1 -0
- package/dist/mcp-server/tasks/utils/taskToolDefinition.d.ts +108 -0
- package/dist/mcp-server/tasks/utils/taskToolDefinition.d.ts.map +1 -0
- package/dist/mcp-server/tasks/utils/taskToolDefinition.js +14 -0
- package/dist/mcp-server/tasks/utils/taskToolDefinition.js.map +1 -0
- package/dist/mcp-server/tools/tool-registration.d.ts +49 -0
- package/dist/mcp-server/tools/tool-registration.d.ts.map +1 -0
- package/dist/mcp-server/tools/tool-registration.js +269 -0
- package/dist/mcp-server/tools/tool-registration.js.map +1 -0
- package/dist/mcp-server/tools/utils/newToolDefinition.d.ts +73 -0
- package/dist/mcp-server/tools/utils/newToolDefinition.d.ts.map +1 -0
- package/dist/mcp-server/tools/utils/newToolDefinition.js +45 -0
- package/dist/mcp-server/tools/utils/newToolDefinition.js.map +1 -0
- package/dist/mcp-server/tools/utils/newToolHandlerFactory.d.ts +33 -0
- package/dist/mcp-server/tools/utils/newToolHandlerFactory.d.ts.map +1 -0
- package/dist/mcp-server/tools/utils/newToolHandlerFactory.js +107 -0
- package/dist/mcp-server/tools/utils/newToolHandlerFactory.js.map +1 -0
- package/dist/mcp-server/tools/utils/toolDefinition.d.ts +118 -0
- package/dist/mcp-server/tools/utils/toolDefinition.d.ts.map +1 -0
- package/dist/mcp-server/tools/utils/toolDefinition.js +2 -0
- package/dist/mcp-server/tools/utils/toolDefinition.js.map +1 -0
- package/dist/mcp-server/tools/utils/toolHandlerFactory.d.ts +34 -0
- package/dist/mcp-server/tools/utils/toolHandlerFactory.d.ts.map +1 -0
- package/dist/mcp-server/tools/utils/toolHandlerFactory.js +68 -0
- package/dist/mcp-server/tools/utils/toolHandlerFactory.js.map +1 -0
- package/dist/mcp-server/transports/ITransport.d.ts +15 -0
- package/dist/mcp-server/transports/ITransport.d.ts.map +1 -0
- package/dist/mcp-server/transports/ITransport.js +2 -0
- package/dist/mcp-server/transports/ITransport.js.map +1 -0
- package/dist/mcp-server/transports/auth/authFactory.d.ts +11 -0
- package/dist/mcp-server/transports/auth/authFactory.d.ts.map +1 -0
- package/dist/mcp-server/transports/auth/authFactory.js +43 -0
- package/dist/mcp-server/transports/auth/authFactory.js.map +1 -0
- package/dist/mcp-server/transports/auth/authMiddleware.d.ts +24 -0
- package/dist/mcp-server/transports/auth/authMiddleware.d.ts.map +1 -0
- package/dist/mcp-server/transports/auth/authMiddleware.js +69 -0
- package/dist/mcp-server/transports/auth/authMiddleware.js.map +1 -0
- package/dist/mcp-server/transports/auth/lib/authContext.d.ts +34 -0
- package/dist/mcp-server/transports/auth/lib/authContext.d.ts.map +1 -0
- package/dist/mcp-server/transports/auth/lib/authContext.js +25 -0
- package/dist/mcp-server/transports/auth/lib/authContext.js.map +1 -0
- package/dist/mcp-server/transports/auth/lib/authTypes.d.ts +19 -0
- package/dist/mcp-server/transports/auth/lib/authTypes.d.ts.map +1 -0
- package/dist/mcp-server/transports/auth/lib/authTypes.js +2 -0
- package/dist/mcp-server/transports/auth/lib/authTypes.js.map +1 -0
- package/dist/mcp-server/transports/auth/lib/authUtils.d.ts +18 -0
- package/dist/mcp-server/transports/auth/lib/authUtils.d.ts.map +1 -0
- package/dist/mcp-server/transports/auth/lib/authUtils.js +64 -0
- package/dist/mcp-server/transports/auth/lib/authUtils.js.map +1 -0
- package/dist/mcp-server/transports/auth/lib/checkScopes.d.ts +25 -0
- package/dist/mcp-server/transports/auth/lib/checkScopes.d.ts.map +1 -0
- package/dist/mcp-server/transports/auth/lib/checkScopes.js +34 -0
- package/dist/mcp-server/transports/auth/lib/checkScopes.js.map +1 -0
- package/dist/mcp-server/transports/auth/lib/claimParser.d.ts +34 -0
- package/dist/mcp-server/transports/auth/lib/claimParser.d.ts.map +1 -0
- package/dist/mcp-server/transports/auth/lib/claimParser.js +58 -0
- package/dist/mcp-server/transports/auth/lib/claimParser.js.map +1 -0
- package/dist/mcp-server/transports/auth/lib/withAuth.d.ts +25 -0
- package/dist/mcp-server/transports/auth/lib/withAuth.d.ts.map +1 -0
- package/dist/mcp-server/transports/auth/lib/withAuth.js +30 -0
- package/dist/mcp-server/transports/auth/lib/withAuth.js.map +1 -0
- package/dist/mcp-server/transports/auth/strategies/authStrategy.d.ts +18 -0
- package/dist/mcp-server/transports/auth/strategies/authStrategy.d.ts.map +1 -0
- package/dist/mcp-server/transports/auth/strategies/authStrategy.js +2 -0
- package/dist/mcp-server/transports/auth/strategies/authStrategy.js.map +1 -0
- package/dist/mcp-server/transports/auth/strategies/jwtStrategy.d.ts +14 -0
- package/dist/mcp-server/transports/auth/strategies/jwtStrategy.d.ts.map +1 -0
- package/dist/mcp-server/transports/auth/strategies/jwtStrategy.js +86 -0
- package/dist/mcp-server/transports/auth/strategies/jwtStrategy.js.map +1 -0
- package/dist/mcp-server/transports/auth/strategies/oauthStrategy.d.ts +14 -0
- package/dist/mcp-server/transports/auth/strategies/oauthStrategy.d.ts.map +1 -0
- package/dist/mcp-server/transports/auth/strategies/oauthStrategy.js +113 -0
- package/dist/mcp-server/transports/auth/strategies/oauthStrategy.js.map +1 -0
- package/dist/mcp-server/transports/http/httpErrorHandler.d.ts +25 -0
- package/dist/mcp-server/transports/http/httpErrorHandler.d.ts.map +1 -0
- package/dist/mcp-server/transports/http/httpErrorHandler.js +112 -0
- package/dist/mcp-server/transports/http/httpErrorHandler.js.map +1 -0
- package/dist/mcp-server/transports/http/httpTransport.d.ts +47 -0
- package/dist/mcp-server/transports/http/httpTransport.d.ts.map +1 -0
- package/dist/mcp-server/transports/http/httpTransport.js +396 -0
- package/dist/mcp-server/transports/http/httpTransport.js.map +1 -0
- package/dist/mcp-server/transports/http/httpTypes.d.ts +17 -0
- package/dist/mcp-server/transports/http/httpTypes.d.ts.map +1 -0
- package/dist/mcp-server/transports/http/httpTypes.js +2 -0
- package/dist/mcp-server/transports/http/httpTypes.js.map +1 -0
- package/dist/mcp-server/transports/http/protectedResourceMetadata.d.ts +21 -0
- package/dist/mcp-server/transports/http/protectedResourceMetadata.d.ts.map +1 -0
- package/dist/mcp-server/transports/http/protectedResourceMetadata.js +44 -0
- package/dist/mcp-server/transports/http/protectedResourceMetadata.js.map +1 -0
- package/dist/mcp-server/transports/http/sessionIdUtils.d.ts +33 -0
- package/dist/mcp-server/transports/http/sessionIdUtils.d.ts.map +1 -0
- package/dist/mcp-server/transports/http/sessionIdUtils.js +54 -0
- package/dist/mcp-server/transports/http/sessionIdUtils.js.map +1 -0
- package/dist/mcp-server/transports/http/sessionStore.d.ts +87 -0
- package/dist/mcp-server/transports/http/sessionStore.d.ts.map +1 -0
- package/dist/mcp-server/transports/http/sessionStore.js +209 -0
- package/dist/mcp-server/transports/http/sessionStore.js.map +1 -0
- package/dist/mcp-server/transports/manager.d.ts +22 -0
- package/dist/mcp-server/transports/manager.d.ts.map +1 -0
- package/dist/mcp-server/transports/manager.js +62 -0
- package/dist/mcp-server/transports/manager.js.map +1 -0
- package/dist/mcp-server/transports/stdio/stdioTransport.d.ts +44 -0
- package/dist/mcp-server/transports/stdio/stdioTransport.d.ts.map +1 -0
- package/dist/mcp-server/transports/stdio/stdioTransport.js +63 -0
- package/dist/mcp-server/transports/stdio/stdioTransport.js.map +1 -0
- package/dist/services/graph/core/GraphService.d.ts +205 -0
- package/dist/services/graph/core/GraphService.d.ts.map +1 -0
- package/dist/services/graph/core/GraphService.js +231 -0
- package/dist/services/graph/core/GraphService.js.map +1 -0
- package/dist/services/graph/core/IGraphProvider.d.ts +295 -0
- package/dist/services/graph/core/IGraphProvider.d.ts.map +1 -0
- package/dist/services/graph/core/IGraphProvider.js +8 -0
- package/dist/services/graph/core/IGraphProvider.js.map +1 -0
- package/dist/services/graph/types.d.ts +107 -0
- package/dist/services/graph/types.d.ts.map +1 -0
- package/dist/services/graph/types.js +8 -0
- package/dist/services/graph/types.js.map +1 -0
- package/dist/services/llm/core/ILlmProvider.d.ts +86 -0
- package/dist/services/llm/core/ILlmProvider.d.ts.map +1 -0
- package/dist/services/llm/core/ILlmProvider.js +2 -0
- package/dist/services/llm/core/ILlmProvider.js.map +1 -0
- package/dist/services/llm/providers/openrouter.provider.d.ts +187 -0
- package/dist/services/llm/providers/openrouter.provider.d.ts.map +1 -0
- package/dist/services/llm/providers/openrouter.provider.js +302 -0
- package/dist/services/llm/providers/openrouter.provider.js.map +1 -0
- package/dist/services/llm/types.d.ts +16 -0
- package/dist/services/llm/types.d.ts.map +1 -0
- package/dist/services/llm/types.js +9 -0
- package/dist/services/llm/types.js.map +1 -0
- package/dist/services/speech/core/ISpeechProvider.d.ts +92 -0
- package/dist/services/speech/core/ISpeechProvider.d.ts.map +1 -0
- package/dist/services/speech/core/ISpeechProvider.js +34 -0
- package/dist/services/speech/core/ISpeechProvider.js.map +1 -0
- package/dist/services/speech/core/SpeechService.d.ts +87 -0
- package/dist/services/speech/core/SpeechService.d.ts.map +1 -0
- package/dist/services/speech/core/SpeechService.js +135 -0
- package/dist/services/speech/core/SpeechService.js.map +1 -0
- package/dist/services/speech/providers/elevenlabs.provider.d.ts +77 -0
- package/dist/services/speech/providers/elevenlabs.provider.d.ts.map +1 -0
- package/dist/services/speech/providers/elevenlabs.provider.js +199 -0
- package/dist/services/speech/providers/elevenlabs.provider.js.map +1 -0
- package/dist/services/speech/providers/whisper.provider.d.ts +94 -0
- package/dist/services/speech/providers/whisper.provider.d.ts.map +1 -0
- package/dist/services/speech/providers/whisper.provider.js +240 -0
- package/dist/services/speech/providers/whisper.provider.js.map +1 -0
- package/dist/services/speech/types.d.ts +173 -0
- package/dist/services/speech/types.d.ts.map +1 -0
- package/dist/services/speech/types.js +8 -0
- package/dist/services/speech/types.js.map +1 -0
- package/dist/storage/core/IStorageProvider.d.ts +159 -0
- package/dist/storage/core/IStorageProvider.d.ts.map +1 -0
- package/dist/storage/core/IStorageProvider.js +2 -0
- package/dist/storage/core/IStorageProvider.js.map +1 -0
- package/dist/storage/core/StorageService.d.ts +22 -0
- package/dist/storage/core/StorageService.d.ts.map +1 -0
- package/dist/storage/core/StorageService.js +151 -0
- package/dist/storage/core/StorageService.js.map +1 -0
- package/dist/storage/core/storageFactory.d.ts +66 -0
- package/dist/storage/core/storageFactory.d.ts.map +1 -0
- package/dist/storage/core/storageFactory.js +122 -0
- package/dist/storage/core/storageFactory.js.map +1 -0
- package/dist/storage/core/storageValidation.d.ts +77 -0
- package/dist/storage/core/storageValidation.d.ts.map +1 -0
- package/dist/storage/core/storageValidation.js +303 -0
- package/dist/storage/core/storageValidation.js.map +1 -0
- package/dist/storage/providers/cloudflare/d1Provider.d.ts +94 -0
- package/dist/storage/providers/cloudflare/d1Provider.d.ts.map +1 -0
- package/dist/storage/providers/cloudflare/d1Provider.js +347 -0
- package/dist/storage/providers/cloudflare/d1Provider.js.map +1 -0
- package/dist/storage/providers/cloudflare/kvProvider.d.ts +21 -0
- package/dist/storage/providers/cloudflare/kvProvider.d.ts.map +1 -0
- package/dist/storage/providers/cloudflare/kvProvider.js +183 -0
- package/dist/storage/providers/cloudflare/kvProvider.js.map +1 -0
- package/dist/storage/providers/cloudflare/r2Provider.d.ts +28 -0
- package/dist/storage/providers/cloudflare/r2Provider.d.ts.map +1 -0
- package/dist/storage/providers/cloudflare/r2Provider.js +222 -0
- package/dist/storage/providers/cloudflare/r2Provider.js.map +1 -0
- package/dist/storage/providers/fileSystem/fileSystemProvider.d.ts +20 -0
- package/dist/storage/providers/fileSystem/fileSystemProvider.d.ts.map +1 -0
- package/dist/storage/providers/fileSystem/fileSystemProvider.js +282 -0
- package/dist/storage/providers/fileSystem/fileSystemProvider.js.map +1 -0
- package/dist/storage/providers/inMemory/inMemoryProvider.d.ts +21 -0
- package/dist/storage/providers/inMemory/inMemoryProvider.d.ts.map +1 -0
- package/dist/storage/providers/inMemory/inMemoryProvider.js +139 -0
- package/dist/storage/providers/inMemory/inMemoryProvider.js.map +1 -0
- package/dist/storage/providers/supabase/supabase.types.d.ts +49 -0
- package/dist/storage/providers/supabase/supabase.types.d.ts.map +1 -0
- package/dist/storage/providers/supabase/supabase.types.js +8 -0
- package/dist/storage/providers/supabase/supabase.types.js.map +1 -0
- package/dist/storage/providers/supabase/supabaseProvider.d.ts +24 -0
- package/dist/storage/providers/supabase/supabaseProvider.d.ts.map +1 -0
- package/dist/storage/providers/supabase/supabaseProvider.js +209 -0
- package/dist/storage/providers/supabase/supabaseProvider.js.map +1 -0
- package/dist/testing/index.d.ts +53 -0
- package/dist/testing/index.d.ts.map +1 -0
- package/dist/testing/index.js +132 -0
- package/dist/testing/index.js.map +1 -0
- package/dist/types-global/errors.d.ts +83 -0
- package/dist/types-global/errors.d.ts.map +1 -0
- package/dist/types-global/errors.js +113 -0
- package/dist/types-global/errors.js.map +1 -0
- package/dist/utils/formatting/diffFormatter.d.ts +227 -0
- package/dist/utils/formatting/diffFormatter.d.ts.map +1 -0
- package/dist/utils/formatting/diffFormatter.js +369 -0
- package/dist/utils/formatting/diffFormatter.js.map +1 -0
- package/dist/utils/formatting/index.d.ts +9 -0
- package/dist/utils/formatting/index.d.ts.map +1 -0
- package/dist/utils/formatting/index.js +9 -0
- package/dist/utils/formatting/index.js.map +1 -0
- package/dist/utils/formatting/markdownBuilder.d.ts +543 -0
- package/dist/utils/formatting/markdownBuilder.d.ts.map +1 -0
- package/dist/utils/formatting/markdownBuilder.js +674 -0
- package/dist/utils/formatting/markdownBuilder.js.map +1 -0
- package/dist/utils/formatting/tableFormatter.d.ts +261 -0
- package/dist/utils/formatting/tableFormatter.d.ts.map +1 -0
- package/dist/utils/formatting/tableFormatter.js +456 -0
- package/dist/utils/formatting/tableFormatter.js.map +1 -0
- package/dist/utils/formatting/treeFormatter.d.ts +344 -0
- package/dist/utils/formatting/treeFormatter.d.ts.map +1 -0
- package/dist/utils/formatting/treeFormatter.js +400 -0
- package/dist/utils/formatting/treeFormatter.js.map +1 -0
- package/dist/utils/internal/encoding.d.ts +42 -0
- package/dist/utils/internal/encoding.d.ts.map +1 -0
- package/dist/utils/internal/encoding.js +87 -0
- package/dist/utils/internal/encoding.js.map +1 -0
- package/dist/utils/internal/error-handler/errorHandler.d.ts +140 -0
- package/dist/utils/internal/error-handler/errorHandler.d.ts.map +1 -0
- package/dist/utils/internal/error-handler/errorHandler.js +318 -0
- package/dist/utils/internal/error-handler/errorHandler.js.map +1 -0
- package/dist/utils/internal/error-handler/helpers.d.ts +98 -0
- package/dist/utils/internal/error-handler/helpers.d.ts.map +1 -0
- package/dist/utils/internal/error-handler/helpers.js +214 -0
- package/dist/utils/internal/error-handler/helpers.js.map +1 -0
- package/dist/utils/internal/error-handler/mappings.d.ts +85 -0
- package/dist/utils/internal/error-handler/mappings.d.ts.map +1 -0
- package/dist/utils/internal/error-handler/mappings.js +234 -0
- package/dist/utils/internal/error-handler/mappings.js.map +1 -0
- package/dist/utils/internal/error-handler/types.d.ts +160 -0
- package/dist/utils/internal/error-handler/types.d.ts.map +1 -0
- package/dist/utils/internal/error-handler/types.js +6 -0
- package/dist/utils/internal/error-handler/types.js.map +1 -0
- package/dist/utils/internal/health.d.ts +60 -0
- package/dist/utils/internal/health.d.ts.map +1 -0
- package/dist/utils/internal/health.js +46 -0
- package/dist/utils/internal/health.js.map +1 -0
- package/dist/utils/internal/logger.d.ts +300 -0
- package/dist/utils/internal/logger.d.ts.map +1 -0
- package/dist/utils/internal/logger.js +573 -0
- package/dist/utils/internal/logger.js.map +1 -0
- package/dist/utils/internal/performance.d.ts +78 -0
- package/dist/utils/internal/performance.d.ts.map +1 -0
- package/dist/utils/internal/performance.js +227 -0
- package/dist/utils/internal/performance.js.map +1 -0
- package/dist/utils/internal/requestContext.d.ts +200 -0
- package/dist/utils/internal/requestContext.d.ts.map +1 -0
- package/dist/utils/internal/requestContext.js +163 -0
- package/dist/utils/internal/requestContext.js.map +1 -0
- package/dist/utils/internal/runtime.d.ts +49 -0
- package/dist/utils/internal/runtime.d.ts.map +1 -0
- package/dist/utils/internal/runtime.js +90 -0
- package/dist/utils/internal/runtime.js.map +1 -0
- package/dist/utils/internal/startupBanner.d.ts +23 -0
- package/dist/utils/internal/startupBanner.d.ts.map +1 -0
- package/dist/utils/internal/startupBanner.js +34 -0
- package/dist/utils/internal/startupBanner.js.map +1 -0
- package/dist/utils/metrics/tokenCounter.d.ts +97 -0
- package/dist/utils/metrics/tokenCounter.d.ts.map +1 -0
- package/dist/utils/metrics/tokenCounter.js +162 -0
- package/dist/utils/metrics/tokenCounter.js.map +1 -0
- package/dist/utils/network/fetchWithTimeout.d.ts +91 -0
- package/dist/utils/network/fetchWithTimeout.d.ts.map +1 -0
- package/dist/utils/network/fetchWithTimeout.js +305 -0
- package/dist/utils/network/fetchWithTimeout.js.map +1 -0
- package/dist/utils/pagination/pagination.d.ts +157 -0
- package/dist/utils/pagination/pagination.d.ts.map +1 -0
- package/dist/utils/pagination/pagination.js +191 -0
- package/dist/utils/pagination/pagination.js.map +1 -0
- package/dist/utils/parsing/csvParser.d.ts +84 -0
- package/dist/utils/parsing/csvParser.d.ts.map +1 -0
- package/dist/utils/parsing/csvParser.js +132 -0
- package/dist/utils/parsing/csvParser.js.map +1 -0
- package/dist/utils/parsing/dateParser.d.ts +103 -0
- package/dist/utils/parsing/dateParser.d.ts.map +1 -0
- package/dist/utils/parsing/dateParser.js +142 -0
- package/dist/utils/parsing/dateParser.js.map +1 -0
- package/dist/utils/parsing/frontmatterParser.d.ts +91 -0
- package/dist/utils/parsing/frontmatterParser.d.ts.map +1 -0
- package/dist/utils/parsing/frontmatterParser.js +163 -0
- package/dist/utils/parsing/frontmatterParser.js.map +1 -0
- package/dist/utils/parsing/index.d.ts +15 -0
- package/dist/utils/parsing/index.d.ts.map +1 -0
- package/dist/utils/parsing/index.js +15 -0
- package/dist/utils/parsing/index.js.map +1 -0
- package/dist/utils/parsing/jsonParser.d.ts +115 -0
- package/dist/utils/parsing/jsonParser.d.ts.map +1 -0
- package/dist/utils/parsing/jsonParser.js +177 -0
- package/dist/utils/parsing/jsonParser.js.map +1 -0
- package/dist/utils/parsing/pdfParser.d.ts +563 -0
- package/dist/utils/parsing/pdfParser.d.ts.map +1 -0
- package/dist/utils/parsing/pdfParser.js +775 -0
- package/dist/utils/parsing/pdfParser.js.map +1 -0
- package/dist/utils/parsing/thinkBlock.d.ts +31 -0
- package/dist/utils/parsing/thinkBlock.d.ts.map +1 -0
- package/dist/utils/parsing/thinkBlock.js +31 -0
- package/dist/utils/parsing/thinkBlock.js.map +1 -0
- package/dist/utils/parsing/xmlParser.d.ts +69 -0
- package/dist/utils/parsing/xmlParser.d.ts.map +1 -0
- package/dist/utils/parsing/xmlParser.js +140 -0
- package/dist/utils/parsing/xmlParser.js.map +1 -0
- package/dist/utils/parsing/yamlParser.d.ts +64 -0
- package/dist/utils/parsing/yamlParser.d.ts.map +1 -0
- package/dist/utils/parsing/yamlParser.js +129 -0
- package/dist/utils/parsing/yamlParser.js.map +1 -0
- package/dist/utils/scheduling/scheduler.d.ts +174 -0
- package/dist/utils/scheduling/scheduler.d.ts.map +1 -0
- package/dist/utils/scheduling/scheduler.js +248 -0
- package/dist/utils/scheduling/scheduler.js.map +1 -0
- package/dist/utils/security/idGenerator.d.ts +189 -0
- package/dist/utils/security/idGenerator.d.ts.map +1 -0
- package/dist/utils/security/idGenerator.js +301 -0
- package/dist/utils/security/idGenerator.js.map +1 -0
- package/dist/utils/security/index.d.ts +8 -0
- package/dist/utils/security/index.d.ts.map +1 -0
- package/dist/utils/security/index.js +8 -0
- package/dist/utils/security/index.js.map +1 -0
- package/dist/utils/security/rateLimiter.d.ts +171 -0
- package/dist/utils/security/rateLimiter.d.ts.map +1 -0
- package/dist/utils/security/rateLimiter.js +294 -0
- package/dist/utils/security/rateLimiter.js.map +1 -0
- package/dist/utils/security/sanitization.d.ts +430 -0
- package/dist/utils/security/sanitization.d.ts.map +1 -0
- package/dist/utils/security/sanitization.js +759 -0
- package/dist/utils/security/sanitization.js.map +1 -0
- package/dist/utils/telemetry/index.d.ts +12 -0
- package/dist/utils/telemetry/index.d.ts.map +1 -0
- package/dist/utils/telemetry/index.js +12 -0
- package/dist/utils/telemetry/index.js.map +1 -0
- package/dist/utils/telemetry/instrumentation.d.ts +62 -0
- package/dist/utils/telemetry/instrumentation.d.ts.map +1 -0
- package/dist/utils/telemetry/instrumentation.js +223 -0
- package/dist/utils/telemetry/instrumentation.js.map +1 -0
- package/dist/utils/telemetry/metrics.d.ts +170 -0
- package/dist/utils/telemetry/metrics.d.ts.map +1 -0
- package/dist/utils/telemetry/metrics.js +205 -0
- package/dist/utils/telemetry/metrics.js.map +1 -0
- package/dist/utils/telemetry/semconv.d.ts +147 -0
- package/dist/utils/telemetry/semconv.d.ts.map +1 -0
- package/dist/utils/telemetry/semconv.js +159 -0
- package/dist/utils/telemetry/semconv.js.map +1 -0
- package/dist/utils/telemetry/trace.d.ts +141 -0
- package/dist/utils/telemetry/trace.d.ts.map +1 -0
- package/dist/utils/telemetry/trace.js +193 -0
- package/dist/utils/telemetry/trace.js.map +1 -0
- package/dist/utils/types/guards.d.ts +209 -0
- package/dist/utils/types/guards.d.ts.map +1 -0
- package/dist/utils/types/guards.js +229 -0
- package/dist/utils/types/guards.js.map +1 -0
- package/dist/utils/types/index.d.ts +6 -0
- package/dist/utils/types/index.d.ts.map +1 -0
- package/dist/utils/types/index.js +6 -0
- package/dist/utils/types/index.js.map +1 -0
- package/dist/worker.d.ts +59 -0
- package/dist/worker.d.ts.map +1 -0
- package/dist/worker.js +216 -0
- package/dist/worker.js.map +1 -0
- package/package.json +377 -0
- package/skills/README.md +38 -0
- package/skills/add-export/SKILL.md +49 -0
- package/skills/add-prompt/SKILL.md +97 -0
- package/skills/add-provider/SKILL.md +53 -0
- package/skills/add-resource/SKILL.md +107 -0
- package/skills/add-service/SKILL.md +113 -0
- package/skills/add-tool/SKILL.md +110 -0
- package/skills/api-auth/SKILL.md +173 -0
- package/skills/api-config/SKILL.md +68 -0
- package/skills/api-context/SKILL.md +321 -0
- package/skills/api-errors/SKILL.md +146 -0
- package/skills/api-services/SKILL.md +24 -0
- package/skills/api-services/references/graph.md +124 -0
- package/skills/api-services/references/llm.md +46 -0
- package/skills/api-services/references/speech.md +72 -0
- package/skills/api-testing/SKILL.md +263 -0
- package/skills/api-utils/SKILL.md +106 -0
- package/skills/api-utils/references/formatting.md +237 -0
- package/skills/api-utils/references/parsing.md +263 -0
- package/skills/api-utils/references/security.md +226 -0
- package/skills/api-workers/SKILL.md +165 -0
- package/skills/devcheck/SKILL.md +31 -0
- package/skills/maintenance/SKILL.md +52 -0
- package/skills/migrate-mcp-ts-template/SKILL.md +131 -0
- package/skills/release/SKILL.md +67 -0
- package/skills/setup/SKILL.md +89 -0
- package/skills/walkthrough-init/SKILL.md +50 -0
- package/templates/.env.example +17 -0
- package/templates/AGENTS.md +113 -0
- package/templates/CLAUDE.md +113 -0
- package/templates/_tsconfig.json +33 -0
- package/templates/biome.template.json +43 -0
- package/templates/package.json +26 -0
- package/templates/src/index.ts +16 -0
- package/templates/src/mcp-server/prompts/definitions/echo.prompt.ts +19 -0
- package/templates/src/mcp-server/resources/definitions/echo.resource.ts +30 -0
- package/templates/src/mcp-server/tools/definitions/echo.tool.ts +24 -0
- package/templates/vitest.config.ts +12 -0
- package/tsconfig.base.json +44 -0
- package/vitest.config.base.ts +38 -0
package/dist/context.js
ADDED
|
@@ -0,0 +1,144 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Unified Context interface for tool and resource handlers.
|
|
3
|
+
* Replaces the split `appContext` (RequestContext) + `sdkContext` (RequestHandlerExtra)
|
|
4
|
+
* pattern with a single object that provides logging, storage, protocol capabilities,
|
|
5
|
+
* and cancellation.
|
|
6
|
+
* @module src/context
|
|
7
|
+
*/
|
|
8
|
+
import { JsonRpcErrorCode, McpError } from './types-global/errors.js';
|
|
9
|
+
/**
|
|
10
|
+
* Constructs a Context from internal dependencies.
|
|
11
|
+
* Called by handler factories — not exposed to consumers.
|
|
12
|
+
* @internal
|
|
13
|
+
*/
|
|
14
|
+
export function createContext(deps) {
|
|
15
|
+
const { appContext, logger: pinoLogger, storage, signal } = deps;
|
|
16
|
+
// Default tenantId to 'default' when not set (stdio mode, no auth).
|
|
17
|
+
// This allows ctx.state to work without requiring JWT auth.
|
|
18
|
+
const effectiveContext = appContext.tenantId
|
|
19
|
+
? appContext
|
|
20
|
+
: { ...appContext, tenantId: 'default' };
|
|
21
|
+
const log = createContextLogger(pinoLogger, effectiveContext);
|
|
22
|
+
const state = createContextState(storage, effectiveContext);
|
|
23
|
+
const progress = deps.taskCtx
|
|
24
|
+
? createContextProgress(deps.taskCtx.store, deps.taskCtx.taskId)
|
|
25
|
+
: undefined;
|
|
26
|
+
return {
|
|
27
|
+
requestId: effectiveContext.requestId,
|
|
28
|
+
timestamp: effectiveContext.timestamp,
|
|
29
|
+
log,
|
|
30
|
+
state,
|
|
31
|
+
signal,
|
|
32
|
+
tenantId: effectiveContext.tenantId,
|
|
33
|
+
traceId: appContext.traceId,
|
|
34
|
+
spanId: appContext.spanId,
|
|
35
|
+
auth: appContext.auth,
|
|
36
|
+
elicit: deps.elicit,
|
|
37
|
+
sample: deps.sample,
|
|
38
|
+
progress,
|
|
39
|
+
uri: deps.uri,
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
// ---------------------------------------------------------------------------
|
|
43
|
+
// ContextLogger implementation
|
|
44
|
+
// ---------------------------------------------------------------------------
|
|
45
|
+
function createContextLogger(appLogger, appContext) {
|
|
46
|
+
// Build a RequestContext enriched with extra data for each log call.
|
|
47
|
+
// Our Logger accepts (msg, RequestContext?) — the extra data fields are
|
|
48
|
+
// spread into the context's index signature.
|
|
49
|
+
const enriched = (data) => data ? { ...appContext, ...data } : appContext;
|
|
50
|
+
return {
|
|
51
|
+
debug(msg, data) {
|
|
52
|
+
appLogger.debug(msg, enriched(data));
|
|
53
|
+
},
|
|
54
|
+
info(msg, data) {
|
|
55
|
+
appLogger.info(msg, enriched(data));
|
|
56
|
+
},
|
|
57
|
+
notice(msg, data) {
|
|
58
|
+
appLogger.notice(msg, enriched(data));
|
|
59
|
+
},
|
|
60
|
+
warning(msg, data) {
|
|
61
|
+
appLogger.warning(msg, enriched(data));
|
|
62
|
+
},
|
|
63
|
+
error(msg, error, data) {
|
|
64
|
+
if (error) {
|
|
65
|
+
appLogger.error(msg, error, enriched(data));
|
|
66
|
+
}
|
|
67
|
+
else {
|
|
68
|
+
appLogger.error(msg, enriched(data));
|
|
69
|
+
}
|
|
70
|
+
},
|
|
71
|
+
};
|
|
72
|
+
}
|
|
73
|
+
// ---------------------------------------------------------------------------
|
|
74
|
+
// ContextState implementation
|
|
75
|
+
// ---------------------------------------------------------------------------
|
|
76
|
+
function createContextState(storage, appContext) {
|
|
77
|
+
const requireContext = () => {
|
|
78
|
+
if (!appContext.tenantId) {
|
|
79
|
+
throw new McpError(JsonRpcErrorCode.InvalidRequest, 'tenantId required for state operations. HTTP requests must include a JWT with a "tid" claim. Stdio mode should default tenantId to "default" via createApp().');
|
|
80
|
+
}
|
|
81
|
+
return appContext;
|
|
82
|
+
};
|
|
83
|
+
return {
|
|
84
|
+
async get(key) {
|
|
85
|
+
const result = await storage.get(key, requireContext());
|
|
86
|
+
return result ?? null;
|
|
87
|
+
},
|
|
88
|
+
async set(key, value, opts) {
|
|
89
|
+
await storage.set(key, value, requireContext(), opts?.ttl ? { ttl: opts.ttl } : undefined);
|
|
90
|
+
},
|
|
91
|
+
async delete(key) {
|
|
92
|
+
await storage.delete(key, requireContext());
|
|
93
|
+
},
|
|
94
|
+
async list(prefix, opts) {
|
|
95
|
+
const ctx = requireContext();
|
|
96
|
+
const result = await storage.list(prefix ?? '', ctx, {
|
|
97
|
+
...(opts?.cursor ? { cursor: opts.cursor } : {}),
|
|
98
|
+
...(opts?.limit !== undefined ? { limit: opts.limit } : {}),
|
|
99
|
+
});
|
|
100
|
+
// StorageService.list() returns keys only. Fetch values via getMany.
|
|
101
|
+
const keys = result.keys;
|
|
102
|
+
const items = [];
|
|
103
|
+
if (keys.length > 0) {
|
|
104
|
+
const values = await storage.getMany(keys, ctx);
|
|
105
|
+
for (const key of keys) {
|
|
106
|
+
const value = values.get(key);
|
|
107
|
+
if (value !== undefined) {
|
|
108
|
+
items.push({
|
|
109
|
+
key,
|
|
110
|
+
value: typeof value === 'string' ? value : JSON.stringify(value),
|
|
111
|
+
});
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
return {
|
|
116
|
+
items,
|
|
117
|
+
...(result.nextCursor ? { cursor: result.nextCursor } : {}),
|
|
118
|
+
};
|
|
119
|
+
},
|
|
120
|
+
};
|
|
121
|
+
}
|
|
122
|
+
// ---------------------------------------------------------------------------
|
|
123
|
+
// ContextProgress implementation
|
|
124
|
+
// ---------------------------------------------------------------------------
|
|
125
|
+
function createContextProgress(store, taskId) {
|
|
126
|
+
let total = 0;
|
|
127
|
+
let completed = 0;
|
|
128
|
+
return {
|
|
129
|
+
setTotal(n) {
|
|
130
|
+
total = n;
|
|
131
|
+
completed = 0;
|
|
132
|
+
return Promise.resolve();
|
|
133
|
+
},
|
|
134
|
+
async increment(amount = 1) {
|
|
135
|
+
completed = Math.min(completed + amount, total || completed + amount);
|
|
136
|
+
const percentage = total > 0 ? Math.round((completed / total) * 100) : undefined;
|
|
137
|
+
await store.updateTaskStatus(taskId, 'working', percentage !== undefined ? `${percentage}% complete` : undefined);
|
|
138
|
+
},
|
|
139
|
+
async update(message) {
|
|
140
|
+
await store.updateTaskStatus(taskId, 'working', message);
|
|
141
|
+
},
|
|
142
|
+
};
|
|
143
|
+
}
|
|
144
|
+
//# sourceMappingURL=context.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"context.js","sourceRoot":"","sources":["../src/context.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA;;;;GAIG"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* @fileoverview Core library entry point. Starts an empty server for development
|
|
4
|
+
* and build verification. Consumer servers provide their own definitions.
|
|
5
|
+
* @module src/index
|
|
6
|
+
*/
|
|
7
|
+
import { createApp } from './app.js';
|
|
8
|
+
await createApp();
|
|
9
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA;;;;GAIG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAErC,MAAM,SAAS,EAAE,CAAC"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Service for registering MCP prompts on a server instance.
|
|
3
|
+
* Supports legacy PromptDefinition and new-style NewPromptDefinition.
|
|
4
|
+
*
|
|
5
|
+
* MCP Prompts Specification:
|
|
6
|
+
* @see {@link https://modelcontextprotocol.io/specification/2025-06-18/basic/prompts | MCP Prompts}
|
|
7
|
+
* @module src/mcp-server/prompts/prompt-registration
|
|
8
|
+
*/
|
|
9
|
+
import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
|
|
10
|
+
import type { ZodObject, ZodRawShape } from 'zod';
|
|
11
|
+
import { type NewPromptDefinition } from '../../mcp-server/prompts/utils/newPromptDefinition.js';
|
|
12
|
+
import type { PromptDefinition } from '../../mcp-server/prompts/utils/promptDefinition.js';
|
|
13
|
+
import type { logger as defaultLogger } from '../../utils/internal/logger.js';
|
|
14
|
+
/** Union of all accepted prompt definition shapes. */
|
|
15
|
+
export type AnyPromptDef = PromptDefinition<ZodObject<ZodRawShape> | undefined> | NewPromptDefinition<ZodObject<ZodRawShape> | undefined>;
|
|
16
|
+
export declare class PromptRegistry {
|
|
17
|
+
private promptDefs;
|
|
18
|
+
private logger;
|
|
19
|
+
constructor(promptDefs: AnyPromptDef[], logger: typeof defaultLogger);
|
|
20
|
+
/**
|
|
21
|
+
* Registers all prompts on the given MCP server.
|
|
22
|
+
*/
|
|
23
|
+
registerAll(server: McpServer): Promise<void>;
|
|
24
|
+
/**
|
|
25
|
+
* Registers a new-style prompt definition (with `args` instead of `argumentsSchema`).
|
|
26
|
+
*/
|
|
27
|
+
private registerNewPrompt;
|
|
28
|
+
/**
|
|
29
|
+
* Registers a legacy prompt definition (with `argumentsSchema`).
|
|
30
|
+
*/
|
|
31
|
+
private registerLegacyPrompt;
|
|
32
|
+
}
|
|
33
|
+
//# sourceMappingURL=prompt-registration.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prompt-registration.d.ts","sourceRoot":"","sources":["../../../src/mcp-server/prompts/prompt-registration.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACzE,OAAO,KAAK,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,KAAK,CAAC;AAElD,OAAO,EAEL,KAAK,mBAAmB,EACzB,MAAM,mDAAmD,CAAC;AAC3D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,gDAAgD,CAAC;AAGvF,OAAO,KAAK,EAAE,MAAM,IAAI,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAG1E,sDAAsD;AACtD,MAAM,MAAM,YAAY,GACpB,gBAAgB,CAAC,SAAS,CAAC,WAAW,CAAC,GAAG,SAAS,CAAC,GACpD,mBAAmB,CAAC,SAAS,CAAC,WAAW,CAAC,GAAG,SAAS,CAAC,CAAC;AAE5D,qBAAa,cAAc;IAEvB,OAAO,CAAC,UAAU;IAClB,OAAO,CAAC,MAAM;gBADN,UAAU,EAAE,YAAY,EAAE,EAC1B,MAAM,EAAE,OAAO,aAAa;IAGtC;;OAEG;IACG,WAAW,CAAC,MAAM,EAAE,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC;IAqCnD;;OAEG;YACW,iBAAiB;IAqC/B;;OAEG;YACW,oBAAoB;CAsCnC"}
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
import { isNewPromptDefinition, } from '../../mcp-server/prompts/utils/newPromptDefinition.js';
|
|
2
|
+
import { JsonRpcErrorCode } from '../../types-global/errors.js';
|
|
3
|
+
import { ErrorHandler } from '../../utils/internal/error-handler/errorHandler.js';
|
|
4
|
+
import { requestContextService } from '../../utils/internal/requestContext.js';
|
|
5
|
+
export class PromptRegistry {
|
|
6
|
+
promptDefs;
|
|
7
|
+
logger;
|
|
8
|
+
constructor(promptDefs, logger) {
|
|
9
|
+
this.promptDefs = promptDefs;
|
|
10
|
+
this.logger = logger;
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Registers all prompts on the given MCP server.
|
|
14
|
+
*/
|
|
15
|
+
async registerAll(server) {
|
|
16
|
+
const context = requestContextService.createRequestContext({
|
|
17
|
+
operation: 'PromptRegistry.registerAll',
|
|
18
|
+
});
|
|
19
|
+
const newPrompts = [];
|
|
20
|
+
const legacyPrompts = [];
|
|
21
|
+
for (const def of this.promptDefs) {
|
|
22
|
+
if (isNewPromptDefinition(def)) {
|
|
23
|
+
newPrompts.push(def);
|
|
24
|
+
}
|
|
25
|
+
else {
|
|
26
|
+
legacyPrompts.push(def);
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
this.logger.debug(`Registering ${newPrompts.length + legacyPrompts.length} prompt(s) (${newPrompts.length} new-style, ${legacyPrompts.length} legacy)...`, context);
|
|
30
|
+
// Register new-style prompts
|
|
31
|
+
for (const promptDef of newPrompts) {
|
|
32
|
+
await this.registerNewPrompt(server, promptDef, context);
|
|
33
|
+
}
|
|
34
|
+
// Register legacy prompts
|
|
35
|
+
for (const promptDef of legacyPrompts) {
|
|
36
|
+
await this.registerLegacyPrompt(server, promptDef, context);
|
|
37
|
+
}
|
|
38
|
+
this.logger.info(`Successfully registered ${newPrompts.length + legacyPrompts.length} prompts`, context);
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Registers a new-style prompt definition (with `args` instead of `argumentsSchema`).
|
|
42
|
+
*/
|
|
43
|
+
async registerNewPrompt(server, promptDef, context) {
|
|
44
|
+
this.logger.debug(`Registering prompt (new-style): ${promptDef.name}`, context);
|
|
45
|
+
await ErrorHandler.tryCatch(() => {
|
|
46
|
+
server.registerPrompt(promptDef.name, {
|
|
47
|
+
description: promptDef.description,
|
|
48
|
+
...(promptDef.args && {
|
|
49
|
+
argsSchema: promptDef.args.shape,
|
|
50
|
+
}),
|
|
51
|
+
}, async (args) => {
|
|
52
|
+
const validatedArgs = promptDef.args ? promptDef.args.parse(args) : args;
|
|
53
|
+
const messages = await promptDef.generate(validatedArgs);
|
|
54
|
+
return { messages };
|
|
55
|
+
});
|
|
56
|
+
this.logger.info(`Registered prompt: ${promptDef.name}`, context);
|
|
57
|
+
}, {
|
|
58
|
+
operation: `RegisteringPrompt_${promptDef.name}`,
|
|
59
|
+
context,
|
|
60
|
+
errorCode: JsonRpcErrorCode.InitializationFailed,
|
|
61
|
+
critical: true,
|
|
62
|
+
});
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Registers a legacy prompt definition (with `argumentsSchema`).
|
|
66
|
+
*/
|
|
67
|
+
async registerLegacyPrompt(server, promptDef, context) {
|
|
68
|
+
this.logger.debug(`Registering prompt: ${promptDef.name}`, context);
|
|
69
|
+
await ErrorHandler.tryCatch(() => {
|
|
70
|
+
server.registerPrompt(promptDef.name, {
|
|
71
|
+
description: promptDef.description,
|
|
72
|
+
...(promptDef.argumentsSchema && {
|
|
73
|
+
argsSchema: promptDef.argumentsSchema.shape,
|
|
74
|
+
}),
|
|
75
|
+
}, async (args) => {
|
|
76
|
+
const validatedArgs = promptDef.argumentsSchema
|
|
77
|
+
? promptDef.argumentsSchema.parse(args)
|
|
78
|
+
: args;
|
|
79
|
+
const messages = await promptDef.generate(validatedArgs);
|
|
80
|
+
return { messages };
|
|
81
|
+
});
|
|
82
|
+
this.logger.info(`Registered prompt: ${promptDef.name}`, context);
|
|
83
|
+
}, {
|
|
84
|
+
operation: `RegisteringPrompt_${promptDef.name}`,
|
|
85
|
+
context,
|
|
86
|
+
errorCode: JsonRpcErrorCode.InitializationFailed,
|
|
87
|
+
critical: true,
|
|
88
|
+
});
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
//# sourceMappingURL=prompt-registration.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prompt-registration.js","sourceRoot":"","sources":["../../../src/mcp-server/prompts/prompt-registration.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview New-style prompt definition type and `prompt()` builder function.
|
|
3
|
+
* Uses `args` instead of `argumentsSchema`.
|
|
4
|
+
* @module src/mcp-server/prompts/utils/newPromptDefinition
|
|
5
|
+
*/
|
|
6
|
+
import type { PromptMessage } from '@modelcontextprotocol/sdk/types.js';
|
|
7
|
+
import type { ZodObject, ZodRawShape, z } from 'zod';
|
|
8
|
+
/**
|
|
9
|
+
* New-style prompt definition with simplified field names.
|
|
10
|
+
* Prompts are pure message templates — no Context, no auth, no side effects.
|
|
11
|
+
*/
|
|
12
|
+
export interface NewPromptDefinition<TArgs extends ZodObject<ZodRawShape> | undefined = undefined> {
|
|
13
|
+
/**
|
|
14
|
+
* Optional Zod schema for prompt arguments. All fields need `.describe()`.
|
|
15
|
+
* If undefined, the prompt accepts no arguments.
|
|
16
|
+
*/
|
|
17
|
+
args?: TArgs;
|
|
18
|
+
/** LLM-facing description. */
|
|
19
|
+
description: string;
|
|
20
|
+
/**
|
|
21
|
+
* Generates the prompt messages from validated arguments.
|
|
22
|
+
*/
|
|
23
|
+
generate: (args: TArgs extends ZodObject<ZodRawShape> ? z.infer<TArgs> : Record<string, never>) => PromptMessage[] | Promise<PromptMessage[]>;
|
|
24
|
+
/** Programmatic unique name (snake_case). */
|
|
25
|
+
name: string;
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Type guard: is this a new-style prompt definition?
|
|
29
|
+
*/
|
|
30
|
+
export declare function isNewPromptDefinition(def: unknown): def is NewPromptDefinition;
|
|
31
|
+
/**
|
|
32
|
+
* Creates a new-style prompt definition.
|
|
33
|
+
*
|
|
34
|
+
* @example
|
|
35
|
+
* ```ts
|
|
36
|
+
* const codeReview = prompt('code_review', {
|
|
37
|
+
* description: 'Review code for security and best practices.',
|
|
38
|
+
* args: z.object({
|
|
39
|
+
* code: z.string().describe('Code to review'),
|
|
40
|
+
* language: z.string().optional().describe('Programming language'),
|
|
41
|
+
* }),
|
|
42
|
+
* generate: (args) => [
|
|
43
|
+
* { role: 'user', content: { type: 'text', text: `Review: ${args.code}` } },
|
|
44
|
+
* ],
|
|
45
|
+
* });
|
|
46
|
+
* ```
|
|
47
|
+
*/
|
|
48
|
+
export declare function prompt<TArgs extends ZodObject<ZodRawShape> | undefined = undefined>(name: string, options: Omit<NewPromptDefinition<TArgs>, 'name'>): NewPromptDefinition<TArgs>;
|
|
49
|
+
//# sourceMappingURL=newPromptDefinition.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"newPromptDefinition.d.ts","sourceRoot":"","sources":["../../../../src/mcp-server/prompts/utils/newPromptDefinition.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oCAAoC,CAAC;AACxE,OAAO,KAAK,EAAE,SAAS,EAAE,WAAW,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAErD;;;GAGG;AACH,MAAM,WAAW,mBAAmB,CAAC,KAAK,SAAS,SAAS,CAAC,WAAW,CAAC,GAAG,SAAS,GAAG,SAAS;IAC/F;;;OAGG;IACH,IAAI,CAAC,EAAE,KAAK,CAAC;IACb,8BAA8B;IAC9B,WAAW,EAAE,MAAM,CAAC;IACpB;;OAEG;IACH,QAAQ,EAAE,CACR,IAAI,EAAE,KAAK,SAAS,SAAS,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,KAChF,aAAa,EAAE,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC,CAAC;IAChD,6CAA6C;IAC7C,IAAI,EAAE,MAAM,CAAC;CACd;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,OAAO,GAAG,GAAG,IAAI,mBAAmB,CAQ9E;AAMD;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,MAAM,CAAC,KAAK,SAAS,SAAS,CAAC,WAAW,CAAC,GAAG,SAAS,GAAG,SAAS,EACjF,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC,GAChD,mBAAmB,CAAC,KAAK,CAAC,CAE5B"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview New-style prompt definition type and `prompt()` builder function.
|
|
3
|
+
* Uses `args` instead of `argumentsSchema`.
|
|
4
|
+
* @module src/mcp-server/prompts/utils/newPromptDefinition
|
|
5
|
+
*/
|
|
6
|
+
/**
|
|
7
|
+
* Type guard: is this a new-style prompt definition?
|
|
8
|
+
*/
|
|
9
|
+
export function isNewPromptDefinition(def) {
|
|
10
|
+
return (def !== null &&
|
|
11
|
+
typeof def === 'object' &&
|
|
12
|
+
'generate' in def &&
|
|
13
|
+
typeof def.generate === 'function' &&
|
|
14
|
+
!('argumentsSchema' in def));
|
|
15
|
+
}
|
|
16
|
+
// ---------------------------------------------------------------------------
|
|
17
|
+
// Builder
|
|
18
|
+
// ---------------------------------------------------------------------------
|
|
19
|
+
/**
|
|
20
|
+
* Creates a new-style prompt definition.
|
|
21
|
+
*
|
|
22
|
+
* @example
|
|
23
|
+
* ```ts
|
|
24
|
+
* const codeReview = prompt('code_review', {
|
|
25
|
+
* description: 'Review code for security and best practices.',
|
|
26
|
+
* args: z.object({
|
|
27
|
+
* code: z.string().describe('Code to review'),
|
|
28
|
+
* language: z.string().optional().describe('Programming language'),
|
|
29
|
+
* }),
|
|
30
|
+
* generate: (args) => [
|
|
31
|
+
* { role: 'user', content: { type: 'text', text: `Review: ${args.code}` } },
|
|
32
|
+
* ],
|
|
33
|
+
* });
|
|
34
|
+
* ```
|
|
35
|
+
*/
|
|
36
|
+
export function prompt(name, options) {
|
|
37
|
+
return { name, ...options };
|
|
38
|
+
}
|
|
39
|
+
//# sourceMappingURL=newPromptDefinition.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"newPromptDefinition.js","sourceRoot":"","sources":["../../../../src/mcp-server/prompts/utils/newPromptDefinition.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AA2BH;;GAEG;AACH,MAAM,UAAU,qBAAqB,CAAC,GAAY;IAChD,OAAO,CACL,GAAG,KAAK,IAAI;QACZ,OAAO,GAAG,KAAK,QAAQ;QACvB,UAAU,IAAI,GAAG;QACjB,OAAQ,GAA+B,CAAC,QAAQ,KAAK,UAAU;QAC/D,CAAC,CAAC,iBAAiB,IAAI,GAAG,CAAC,CAC5B,CAAC;AACJ,CAAC;AAED,8EAA8E;AAC9E,UAAU;AACV,8EAA8E;AAE9E;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,UAAU,MAAM,CACpB,IAAY,EACZ,OAAiD;IAEjD,OAAO,EAAE,IAAI,EAAE,GAAG,OAAO,EAAE,CAAC;AAC9B,CAAC"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Defines the standard structure for a declarative prompt definition.
|
|
3
|
+
* Prompts are structured message templates that users can discover and invoke.
|
|
4
|
+
* Unlike tools (which execute code), prompts generate messages for the LLM.
|
|
5
|
+
*
|
|
6
|
+
* MCP Prompts Specification:
|
|
7
|
+
* @see {@link https://modelcontextprotocol.io/specification/2025-06-18/basic/prompts | MCP Prompts}
|
|
8
|
+
* @module src/mcp-server/prompts/utils/promptDefinition
|
|
9
|
+
*/
|
|
10
|
+
import type { PromptMessage } from '@modelcontextprotocol/sdk/types.js';
|
|
11
|
+
import type { ZodObject, ZodRawShape, z } from 'zod';
|
|
12
|
+
/**
|
|
13
|
+
* Represents the complete, self-contained definition of an MCP prompt.
|
|
14
|
+
*/
|
|
15
|
+
export interface PromptDefinition<TArgumentsSchema extends ZodObject<ZodRawShape> | undefined = undefined> {
|
|
16
|
+
/**
|
|
17
|
+
* Optional Zod schema for validating the prompt's arguments.
|
|
18
|
+
* If undefined, the prompt accepts no arguments.
|
|
19
|
+
*/
|
|
20
|
+
argumentsSchema?: TArgumentsSchema;
|
|
21
|
+
/**
|
|
22
|
+
* A clear, concise description of what the prompt does.
|
|
23
|
+
* This helps users understand when to use this prompt.
|
|
24
|
+
*/
|
|
25
|
+
description: string;
|
|
26
|
+
/**
|
|
27
|
+
* The function that generates the prompt messages.
|
|
28
|
+
* @param args The validated arguments (if argumentsSchema is defined).
|
|
29
|
+
* @returns An array of PromptMessage objects to be sent to the LLM.
|
|
30
|
+
*/
|
|
31
|
+
generate: (args: TArgumentsSchema extends ZodObject<ZodRawShape> ? z.infer<TArgumentsSchema> : Record<string, never>) => PromptMessage[] | Promise<PromptMessage[]>;
|
|
32
|
+
/**
|
|
33
|
+
* The programmatic, unique name for the prompt (e.g., 'code_review').
|
|
34
|
+
*/
|
|
35
|
+
name: string;
|
|
36
|
+
}
|
|
37
|
+
//# sourceMappingURL=promptDefinition.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"promptDefinition.d.ts","sourceRoot":"","sources":["../../../../src/mcp-server/prompts/utils/promptDefinition.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oCAAoC,CAAC;AACxE,OAAO,KAAK,EAAE,SAAS,EAAE,WAAW,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAErD;;GAEG;AACH,MAAM,WAAW,gBAAgB,CAC/B,gBAAgB,SAAS,SAAS,CAAC,WAAW,CAAC,GAAG,SAAS,GAAG,SAAS;IAEvE;;;OAGG;IACH,eAAe,CAAC,EAAE,gBAAgB,CAAC;IAEnC;;;OAGG;IACH,WAAW,EAAE,MAAM,CAAC;IAEpB;;;;OAIG;IACH,QAAQ,EAAE,CACR,IAAI,EAAE,gBAAgB,SAAS,SAAS,CAAC,WAAW,CAAC,GACjD,CAAC,CAAC,KAAK,CAAC,gBAAgB,CAAC,GACzB,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,KACtB,aAAa,EAAE,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC,CAAC;IAChD;;OAEG;IACH,IAAI,EAAE,MAAM,CAAC;CACd"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"promptDefinition.js","sourceRoot":"","sources":["../../../../src/mcp-server/prompts/utils/promptDefinition.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Encapsulates the registration of all resource definitions with an McpServer.
|
|
3
|
+
* Supports legacy ResourceDefinition and new-style NewResourceDefinition.
|
|
4
|
+
* @module src/mcp-server/resources/resource-registration
|
|
5
|
+
*/
|
|
6
|
+
import { type McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
|
|
7
|
+
import type { ZodObject, ZodRawShape } from 'zod';
|
|
8
|
+
import { type AnyNewResourceDefinition } from '../../mcp-server/resources/utils/newResourceDefinition.js';
|
|
9
|
+
import { type ResourceHandlerFactoryServices } from '../../mcp-server/resources/utils/newResourceHandlerFactory.js';
|
|
10
|
+
import type { ResourceDefinition } from '../../mcp-server/resources/utils/resourceDefinition.js';
|
|
11
|
+
/** Union of all accepted resource definition shapes. */
|
|
12
|
+
export type AnyResourceDef = ResourceDefinition<ZodObject<ZodRawShape>, ZodObject<ZodRawShape> | undefined> | AnyNewResourceDefinition;
|
|
13
|
+
export declare class ResourceRegistry {
|
|
14
|
+
private resourceDefs;
|
|
15
|
+
private services?;
|
|
16
|
+
constructor(resourceDefs: AnyResourceDef[], services?: ResourceHandlerFactoryServices | undefined);
|
|
17
|
+
/**
|
|
18
|
+
* Registers all resolved resource definitions with the provided McpServer instance.
|
|
19
|
+
*/
|
|
20
|
+
registerAll(server: McpServer): Promise<void>;
|
|
21
|
+
/**
|
|
22
|
+
* Registers a new-style resource definition (with `handler`, `params`, `auth`, etc.).
|
|
23
|
+
* Requires `services` to have been passed to the constructor for Context creation.
|
|
24
|
+
*/
|
|
25
|
+
private registerNewResource;
|
|
26
|
+
}
|
|
27
|
+
//# sourceMappingURL=resource-registration.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resource-registration.d.ts","sourceRoot":"","sources":["../../../src/mcp-server/resources/resource-registration.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,EAAE,KAAK,SAAS,EAAoB,MAAM,yCAAyC,CAAC;AAC3F,OAAO,KAAK,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,KAAK,CAAC;AAElD,OAAO,EACL,KAAK,wBAAwB,EAE9B,MAAM,uDAAuD,CAAC;AAC/D,OAAO,EAEL,KAAK,8BAA8B,EACpC,MAAM,2DAA2D,CAAC;AACnE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,oDAAoD,CAAC;AAO7F,wDAAwD;AACxD,MAAM,MAAM,cAAc,GACtB,kBAAkB,CAAC,SAAS,CAAC,WAAW,CAAC,EAAE,SAAS,CAAC,WAAW,CAAC,GAAG,SAAS,CAAC,GAC9E,wBAAwB,CAAC;AAE7B,qBAAa,gBAAgB;IAEzB,OAAO,CAAC,YAAY;IACpB,OAAO,CAAC,QAAQ,CAAC;gBADT,YAAY,EAAE,cAAc,EAAE,EAC9B,QAAQ,CAAC,EAAE,8BAA8B,YAAA;IAGnD;;OAEG;IACU,WAAW,CAAC,MAAM,EAAE,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC;IAqC1D;;;OAGG;YACW,mBAAmB;CAmDlC"}
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Encapsulates the registration of all resource definitions with an McpServer.
|
|
3
|
+
* Supports legacy ResourceDefinition and new-style NewResourceDefinition.
|
|
4
|
+
* @module src/mcp-server/resources/resource-registration
|
|
5
|
+
*/
|
|
6
|
+
import { ResourceTemplate } from '@modelcontextprotocol/sdk/server/mcp.js';
|
|
7
|
+
import { isNewResourceDefinition, } from '../../mcp-server/resources/utils/newResourceDefinition.js';
|
|
8
|
+
import { createNewResourceHandler, } from '../../mcp-server/resources/utils/newResourceHandlerFactory.js';
|
|
9
|
+
import { registerResource } from '../../mcp-server/resources/utils/resourceHandlerFactory.js';
|
|
10
|
+
import { JsonRpcErrorCode } from '../../types-global/errors.js';
|
|
11
|
+
import { ErrorHandler } from '../../utils/internal/error-handler/errorHandler.js';
|
|
12
|
+
import { logger } from '../../utils/internal/logger.js';
|
|
13
|
+
import { requestContextService } from '../../utils/internal/requestContext.js';
|
|
14
|
+
export class ResourceRegistry {
|
|
15
|
+
resourceDefs;
|
|
16
|
+
services;
|
|
17
|
+
constructor(resourceDefs, services) {
|
|
18
|
+
this.resourceDefs = resourceDefs;
|
|
19
|
+
this.services = services;
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Registers all resolved resource definitions with the provided McpServer instance.
|
|
23
|
+
*/
|
|
24
|
+
async registerAll(server) {
|
|
25
|
+
const context = requestContextService.createRequestContext({
|
|
26
|
+
operation: 'ResourceRegistry.registerAll',
|
|
27
|
+
});
|
|
28
|
+
const newResources = [];
|
|
29
|
+
const legacyResources = [];
|
|
30
|
+
for (const def of this.resourceDefs) {
|
|
31
|
+
if (isNewResourceDefinition(def)) {
|
|
32
|
+
newResources.push(def);
|
|
33
|
+
}
|
|
34
|
+
else {
|
|
35
|
+
legacyResources.push(def);
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
logger.info(`Registering ${newResources.length + legacyResources.length} resource(s) (${newResources.length} new-style, ${legacyResources.length} legacy)...`, context);
|
|
39
|
+
// Register new-style resources
|
|
40
|
+
for (const resourceDef of newResources) {
|
|
41
|
+
await this.registerNewResource(server, resourceDef);
|
|
42
|
+
}
|
|
43
|
+
// Register legacy resources
|
|
44
|
+
for (const resourceDef of legacyResources) {
|
|
45
|
+
await registerResource(server, resourceDef);
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Registers a new-style resource definition (with `handler`, `params`, `auth`, etc.).
|
|
50
|
+
* Requires `services` to have been passed to the constructor for Context creation.
|
|
51
|
+
*/
|
|
52
|
+
async registerNewResource(server, def) {
|
|
53
|
+
const resourceName = def.name ?? def.uriTemplate;
|
|
54
|
+
const registrationContext = requestContextService.createRequestContext({
|
|
55
|
+
operation: 'ResourceRegistry.registerNewResource',
|
|
56
|
+
additionalContext: { resourceName },
|
|
57
|
+
});
|
|
58
|
+
logger.debug(`Registering resource (new-style): '${resourceName}'`, registrationContext);
|
|
59
|
+
await ErrorHandler.tryCatch(() => {
|
|
60
|
+
if (!this.services) {
|
|
61
|
+
throw new Error(`Cannot register new-style resource '${resourceName}': ResourceHandlerFactoryServices not provided to ResourceRegistry`);
|
|
62
|
+
}
|
|
63
|
+
const template = new ResourceTemplate(def.uriTemplate, {
|
|
64
|
+
list: def.list,
|
|
65
|
+
});
|
|
66
|
+
const handler = createNewResourceHandler(def, this.services);
|
|
67
|
+
const title = def.title ?? resourceName;
|
|
68
|
+
const mimeType = def.mimeType ?? 'application/json';
|
|
69
|
+
server.resource(resourceName, template, {
|
|
70
|
+
title,
|
|
71
|
+
description: def.description,
|
|
72
|
+
mimeType,
|
|
73
|
+
...(def.examples && { examples: def.examples }),
|
|
74
|
+
...(def.annotations && { annotations: def.annotations }),
|
|
75
|
+
}, handler);
|
|
76
|
+
logger.notice(`Resource '${resourceName}' registered successfully.`, registrationContext);
|
|
77
|
+
}, {
|
|
78
|
+
operation: `RegisteringResource_${resourceName}`,
|
|
79
|
+
context: registrationContext,
|
|
80
|
+
errorCode: JsonRpcErrorCode.InitializationFailed,
|
|
81
|
+
critical: true,
|
|
82
|
+
});
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
//# sourceMappingURL=resource-registration.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resource-registration.js","sourceRoot":"","sources":["../../../src/mcp-server/resources/resource-registration.ts"],"names":[],"mappings":"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"}
|