toolception 0.3.0 → 0.5.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.
Files changed (31) hide show
  1. package/README.md +182 -29
  2. package/dist/core/DynamicToolManager.d.ts +45 -2
  3. package/dist/core/DynamicToolManager.d.ts.map +1 -1
  4. package/dist/core/ServerOrchestrator.d.ts +24 -2
  5. package/dist/core/ServerOrchestrator.d.ts.map +1 -1
  6. package/dist/http/FastifyTransport.d.ts +17 -0
  7. package/dist/http/FastifyTransport.d.ts.map +1 -1
  8. package/dist/http/customEndpoints.d.ts +247 -0
  9. package/dist/http/customEndpoints.d.ts.map +1 -0
  10. package/dist/http/endpointRegistration.d.ts +35 -0
  11. package/dist/http/endpointRegistration.d.ts.map +1 -0
  12. package/dist/index.d.ts +2 -0
  13. package/dist/index.d.ts.map +1 -1
  14. package/dist/index.js +797 -454
  15. package/dist/index.js.map +1 -1
  16. package/dist/meta/registerMetaTools.d.ts +14 -0
  17. package/dist/meta/registerMetaTools.d.ts.map +1 -1
  18. package/dist/mode/ModeResolver.d.ts +7 -0
  19. package/dist/mode/ModeResolver.d.ts.map +1 -1
  20. package/dist/permissions/PermissionAwareFastifyTransport.d.ts +9 -1
  21. package/dist/permissions/PermissionAwareFastifyTransport.d.ts.map +1 -1
  22. package/dist/permissions/PermissionResolver.d.ts +12 -0
  23. package/dist/permissions/PermissionResolver.d.ts.map +1 -1
  24. package/dist/permissions/createPermissionAwareBundle.d.ts +6 -0
  25. package/dist/permissions/createPermissionAwareBundle.d.ts.map +1 -1
  26. package/dist/server/createMcpServer.d.ts +4 -3
  27. package/dist/server/createMcpServer.d.ts.map +1 -1
  28. package/dist/server/createPermissionBasedMcpServer.d.ts.map +1 -1
  29. package/dist/session/ClientResourceCache.d.ts +34 -3
  30. package/dist/session/ClientResourceCache.d.ts.map +1 -1
  31. package/package.json +2 -2
@@ -1,6 +1,20 @@
1
1
  import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
2
2
  import { Mode } from '../types/index.js';
3
3
  import { DynamicToolManager } from '../core/DynamicToolManager.js';
4
+ /**
5
+ * Registers meta-tools on the MCP server for toolset management.
6
+ *
7
+ * In DYNAMIC mode, all meta-tools are registered:
8
+ * - enable_toolset, disable_toolset: For runtime toolset management
9
+ * - list_toolsets, describe_toolset: For toolset discovery
10
+ * - list_tools: For listing registered tools
11
+ *
12
+ * In STATIC mode, only list_tools is registered since toolsets are fixed at startup.
13
+ *
14
+ * @param server - The MCP server to register tools on
15
+ * @param manager - The DynamicToolManager instance
16
+ * @param options - Configuration options including the mode
17
+ */
4
18
  export declare function registerMetaTools(server: McpServer, manager: DynamicToolManager, options?: {
5
19
  mode?: Exclude<Mode, "ALL">;
6
20
  }): void;
@@ -1 +1 @@
1
- {"version":3,"file":"registerMetaTools.d.ts","sourceRoot":"","sources":["../../src/meta/registerMetaTools.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACzE,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAC;AAE9C,OAAO,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAC;AAEnE,wBAAgB,iBAAiB,CAC/B,MAAM,EAAE,SAAS,EACjB,OAAO,EAAE,kBAAkB,EAC3B,OAAO,CAAC,EAAE;IAAE,IAAI,CAAC,EAAE,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,CAAA;CAAE,GACxC,IAAI,CAgHN"}
1
+ {"version":3,"file":"registerMetaTools.d.ts","sourceRoot":"","sources":["../../src/meta/registerMetaTools.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACzE,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAC;AAE9C,OAAO,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAC;AAEnE;;;;;;;;;;;;;GAaG;AACH,wBAAgB,iBAAiB,CAC/B,MAAM,EAAE,SAAS,EACjB,OAAO,EAAE,kBAAkB,EAC3B,OAAO,CAAC,EAAE;IAAE,IAAI,CAAC,EAAE,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,CAAA;CAAE,GACxC,IAAI,CA+GN"}
@@ -17,6 +17,13 @@ export declare class ToolsetValidator {
17
17
  sanitized?: string;
18
18
  error?: string;
19
19
  };
20
+ /**
21
+ * Validates and retrieves modules for a set of toolsets.
22
+ * Note: A toolset with only direct tools (no modules) is valid and returns an empty modules array.
23
+ * @param toolsetNames - Array of toolset names to validate
24
+ * @param catalog - The toolset catalog to validate against
25
+ * @returns Validation result with modules array if valid
26
+ */
20
27
  validateToolsetModules(toolsetNames: string[], catalog: ToolSetCatalog): {
21
28
  isValid: boolean;
22
29
  modules?: string[];
@@ -1 +1 @@
1
- {"version":3,"file":"ModeResolver.d.ts","sourceRoot":"","sources":["../../src/mode/ModeResolver.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAE9D,UAAU,gBAAgB;IACxB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;CACrB;AAED,UAAU,mBAAmB;IAC3B,IAAI,CAAC,EAAE,gBAAgB,CAAC;CACzB;AAWD,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,QAAQ,CAAC,IAAI,CAA6B;gBAEtC,OAAO,GAAE,mBAAwB;IAOtC,WAAW,CAChB,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,EACxC,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC7B,IAAI,GAAG,IAAI;IAgBP,2BAA2B,CAChC,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,cAAc,GACtB,MAAM,EAAE;IAqBJ,qBAAqB,CAC1B,QAAQ,EAAE,MAAM,EAAE,EAClB,OAAO,EAAE,cAAc,GACtB,MAAM,EAAE;IAUJ,mBAAmB,CACxB,IAAI,EAAE,OAAO,EACb,OAAO,EAAE,cAAc,GACtB;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE;IA6BpD,sBAAsB,CAC3B,YAAY,EAAE,MAAM,EAAE,EACtB,OAAO,EAAE,cAAc,GACtB;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE;IAoB3D,OAAO,CAAC,gBAAgB;IAexB,OAAO,CAAC,iBAAiB;CAW1B"}
1
+ {"version":3,"file":"ModeResolver.d.ts","sourceRoot":"","sources":["../../src/mode/ModeResolver.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAE9D,UAAU,gBAAgB;IACxB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;CACrB;AAED,UAAU,mBAAmB;IAC3B,IAAI,CAAC,EAAE,gBAAgB,CAAC;CACzB;AAWD,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,QAAQ,CAAC,IAAI,CAA6B;gBAEtC,OAAO,GAAE,mBAAwB;IAOtC,WAAW,CAChB,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,EACxC,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC7B,IAAI,GAAG,IAAI;IAgBP,2BAA2B,CAChC,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,cAAc,GACtB,MAAM,EAAE;IAqBJ,qBAAqB,CAC1B,QAAQ,EAAE,MAAM,EAAE,EAClB,OAAO,EAAE,cAAc,GACtB,MAAM,EAAE;IAUJ,mBAAmB,CACxB,IAAI,EAAE,OAAO,EACb,OAAO,EAAE,cAAc,GACtB;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE;IA6B3D;;;;;;OAMG;IACI,sBAAsB,CAC3B,YAAY,EAAE,MAAM,EAAE,EACtB,OAAO,EAAE,cAAc,GACtB;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE;IAyB3D,OAAO,CAAC,gBAAgB;IAexB,OAAO,CAAC,iBAAiB;CAW1B"}
@@ -1,6 +1,7 @@
1
1
  import { FastifyInstance } from 'fastify';
2
2
  import { DynamicToolManager } from '../core/DynamicToolManager.js';
3
3
  import { ClientRequestContext, PermissionAwareBundle } from './createPermissionAwareBundle.js';
4
+ import { CustomEndpointDefinition } from '../http/customEndpoints.js';
4
5
  export interface PermissionAwareFastifyTransportOptions {
5
6
  host?: string;
6
7
  port?: number;
@@ -8,6 +9,12 @@ export interface PermissionAwareFastifyTransportOptions {
8
9
  cors?: boolean;
9
10
  logger?: boolean;
10
11
  app?: FastifyInstance;
12
+ /**
13
+ * Optional custom HTTP endpoints to register alongside MCP protocol endpoints.
14
+ * Allows adding REST-like endpoints with Zod validation and type inference.
15
+ * Handlers receive permission context (allowedToolsets, failedToolsets).
16
+ */
17
+ customEndpoints?: CustomEndpointDefinition[];
11
18
  }
12
19
  /**
13
20
  * Enhanced Fastify transport that supports permission-based toolset access.
@@ -39,7 +46,8 @@ export declare class PermissionAwareFastifyTransport {
39
46
  */
40
47
  start(): Promise<void>;
41
48
  /**
42
- * Stops the Fastify server and cleans up resources.
49
+ * Stops the Fastify server and cleans up all resources.
50
+ * Closes all client sessions and clears the cache.
43
51
  */
44
52
  stop(): Promise<void>;
45
53
  }
@@ -1 +1 @@
1
- {"version":3,"file":"PermissionAwareFastifyTransport.d.ts","sourceRoot":"","sources":["../../src/permissions/PermissionAwareFastifyTransport.ts"],"names":[],"mappings":"AAAA,OAAgB,EACd,KAAK,eAAe,EAGrB,MAAM,SAAS,CAAC;AAGjB,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAC;AAMxE,OAAO,KAAK,EACV,oBAAoB,EACpB,qBAAqB,EACtB,MAAM,kCAAkC,CAAC;AAE1C,MAAM,WAAW,sCAAsC;IACrD,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,GAAG,CAAC,EAAE,eAAe,CAAC;CACvB;AAED;;;;;;;GAOG;AACH,qBAAa,+BAA+B;;IAC1C,OAAO,CAAC,QAAQ,CAAC,OAAO,CAOtB;IACF,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAqB;IACpD,OAAO,CAAC,QAAQ,CAAC,2BAA2B,CAER;IACpC,OAAO,CAAC,GAAG,CAAgC;IAC3C,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAS;IAGvC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAKvB;IAEL;;;;;;OAMG;gBAED,cAAc,EAAE,kBAAkB,EAClC,2BAA2B,EAAE,CAC3B,OAAO,EAAE,oBAAoB,KAC1B,OAAO,CAAC,qBAAqB,CAAC,EACnC,OAAO,GAAE,sCAA2C,EACpD,YAAY,CAAC,EAAE,MAAM;IAevB;;;OAGG;IACU,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAuBnC;;OAEG;IACU,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;CAkSnC"}
1
+ {"version":3,"file":"PermissionAwareFastifyTransport.d.ts","sourceRoot":"","sources":["../../src/permissions/PermissionAwareFastifyTransport.ts"],"names":[],"mappings":"AAAA,OAAgB,EACd,KAAK,eAAe,EAGrB,MAAM,SAAS,CAAC;AAGjB,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAC;AAMxE,OAAO,KAAK,EACV,oBAAoB,EACpB,qBAAqB,EACtB,MAAM,kCAAkC,CAAC;AAC1C,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,4BAA4B,CAAC;AAG3E,MAAM,WAAW,sCAAsC;IACrD,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,GAAG,CAAC,EAAE,eAAe,CAAC;IACtB;;;;OAIG;IACH,eAAe,CAAC,EAAE,wBAAwB,EAAE,CAAC;CAC9C;AAED;;;;;;;GAOG;AACH,qBAAa,+BAA+B;;IAC1C,OAAO,CAAC,QAAQ,CAAC,OAAO,CAQtB;IACF,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAqB;IACpD,OAAO,CAAC,QAAQ,CAAC,2BAA2B,CAER;IACpC,OAAO,CAAC,GAAG,CAAgC;IAC3C,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAS;IAGvC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAWzB;IAEH;;;;;;OAMG;gBAED,cAAc,EAAE,kBAAkB,EAClC,2BAA2B,EAAE,CAC3B,OAAO,EAAE,oBAAoB,KAC1B,OAAO,CAAC,qBAAqB,CAAC,EACnC,OAAO,GAAE,sCAA2C,EACpD,YAAY,CAAC,EAAE,MAAM;IAgBvB;;;OAGG;IACU,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAoDnC;;;OAGG;IACU,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;CAwUnC"}
@@ -8,6 +8,7 @@ export declare class PermissionResolver {
8
8
  #private;
9
9
  private config;
10
10
  private cache;
11
+ private readonly normalizedHeaderName;
11
12
  /**
12
13
  * Creates a new PermissionResolver instance.
13
14
  * @param config - The permission configuration defining how permissions are resolved
@@ -17,11 +18,22 @@ export declare class PermissionResolver {
17
18
  * Resolves permissions for a client based on the configured source.
18
19
  * Results are cached to improve performance for subsequent requests from the same client.
19
20
  * Handles all errors gracefully by returning empty permissions on failure.
21
+ *
22
+ * Note on caching: For header-based permissions, permissions are cached by clientId.
23
+ * This means subsequent requests from the same client will use cached permissions,
24
+ * even if headers change. Use invalidateCache(clientId) to force re-resolution.
25
+ *
20
26
  * @param clientId - The unique identifier for the client
21
27
  * @param headers - Optional request headers (required for header-based permissions)
22
28
  * @returns Array of toolset names the client is allowed to access
23
29
  */
24
30
  resolvePermissions(clientId: string, headers?: Record<string, string>): string[];
31
+ /**
32
+ * Invalidates cached permissions for a specific client.
33
+ * Call this when you know a client's permissions have changed.
34
+ * @param clientId - The client ID to invalidate
35
+ */
36
+ invalidateCache(clientId: string): void;
25
37
  /**
26
38
  * Clears the permission cache.
27
39
  * Useful for cleanup during server shutdown or when permissions need to be refreshed.
@@ -1 +1 @@
1
- {"version":3,"file":"PermissionResolver.d.ts","sourceRoot":"","sources":["../../src/permissions/PermissionResolver.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAE1D;;;;GAIG;AACH,qBAAa,kBAAkB;;IAOjB,OAAO,CAAC,MAAM;IAN1B,OAAO,CAAC,KAAK,CAA+B;IAE5C;;;OAGG;gBACiB,MAAM,EAAE,gBAAgB;IAE5C;;;;;;;OAOG;IACH,kBAAkB,CAChB,QAAQ,EAAE,MAAM,EAChB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAC/B,MAAM,EAAE;IAiJX;;;OAGG;IACH,UAAU,IAAI,IAAI;CAGnB"}
1
+ {"version":3,"file":"PermissionResolver.d.ts","sourceRoot":"","sources":["../../src/permissions/PermissionResolver.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAE1D;;;;GAIG;AACH,qBAAa,kBAAkB;;IAQjB,OAAO,CAAC,MAAM;IAP1B,OAAO,CAAC,KAAK,CAA+B;IAC5C,OAAO,CAAC,QAAQ,CAAC,oBAAoB,CAAS;IAE9C;;;OAGG;gBACiB,MAAM,EAAE,gBAAgB;IAO5C;;;;;;;;;;;;OAYG;IACH,kBAAkB,CAChB,QAAQ,EAAE,MAAM,EAChB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAC/B,MAAM,EAAE;IAyCX;;;;OAIG;IACH,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI;IA6IvC;;;OAGG;IACH,UAAU,IAAI,IAAI;CAGnB"}
@@ -31,8 +31,14 @@ export interface PermissionAwareBundle {
31
31
  orchestrator: ServerOrchestrator;
32
32
  /**
33
33
  * The resolved permissions (allowed toolsets) for this client.
34
+ * Contains only the toolsets that were successfully enabled.
34
35
  */
35
36
  allowedToolsets: string[];
37
+ /**
38
+ * Toolsets that failed to enable (e.g., invalid names).
39
+ * Empty if all requested toolsets were enabled successfully.
40
+ */
41
+ failedToolsets: string[];
36
42
  }
37
43
  /**
38
44
  * Creates a permission-aware bundle creation function that wraps the original
@@ -1 +1 @@
1
- {"version":3,"file":"createPermissionAwareBundle.d.ts","sourceRoot":"","sources":["../../src/permissions/createPermissionAwareBundle.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACzE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAC;AACxE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAElE;;;GAGG;AACH,MAAM,WAAW,oBAAoB;IACnC;;;OAGG;IACH,QAAQ,EAAE,MAAM,CAAC;IAEjB;;;OAGG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAClC;AAED;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC;;OAEG;IACH,MAAM,EAAE,SAAS,CAAC;IAElB;;OAEG;IACH,YAAY,EAAE,kBAAkB,CAAC;IAEjC;;OAEG;IACH,eAAe,EAAE,MAAM,EAAE,CAAC;CAC3B;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,2BAA2B,CACzC,oBAAoB,EAAE,CAAC,eAAe,EAAE,MAAM,EAAE,KAAK;IACnD,MAAM,EAAE,SAAS,CAAC;IAClB,YAAY,EAAE,kBAAkB,CAAC;CAClC,EACD,kBAAkB,EAAE,kBAAkB,IAYxB,SAAS,oBAAoB,KAAG,OAAO,CAAC,qBAAqB,CAAC,CAwB7E"}
1
+ {"version":3,"file":"createPermissionAwareBundle.d.ts","sourceRoot":"","sources":["../../src/permissions/createPermissionAwareBundle.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACzE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAC;AACxE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAElE;;;GAGG;AACH,MAAM,WAAW,oBAAoB;IACnC;;;OAGG;IACH,QAAQ,EAAE,MAAM,CAAC;IAEjB;;;OAGG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAClC;AAED;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC;;OAEG;IACH,MAAM,EAAE,SAAS,CAAC;IAElB;;OAEG;IACH,YAAY,EAAE,kBAAkB,CAAC;IAEjC;;;OAGG;IACH,eAAe,EAAE,MAAM,EAAE,CAAC;IAE1B;;;OAGG;IACH,cAAc,EAAE,MAAM,EAAE,CAAC;CAC1B;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,2BAA2B,CACzC,oBAAoB,EAAE,CAAC,eAAe,EAAE,MAAM,EAAE,KAAK;IACnD,MAAM,EAAE,SAAS,CAAC;IAClB,YAAY,EAAE,kBAAkB,CAAC;CAClC,EACD,kBAAkB,EAAE,kBAAkB,IAcpC,SAAS,oBAAoB,KAC5B,OAAO,CAAC,qBAAqB,CAAC,CAkDlC"}
@@ -1,9 +1,9 @@
1
1
  import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
2
- import { ExposurePolicy, Mode, ToolSetCatalog } from '../types/index.js';
2
+ import { ExposurePolicy, Mode, ModuleLoader, ToolSetCatalog } from '../types/index.js';
3
3
  import { FastifyTransportOptions } from '../http/FastifyTransport.js';
4
4
  export interface CreateMcpServerOptions {
5
5
  catalog: ToolSetCatalog;
6
- moduleLoaders?: Record<string, any>;
6
+ moduleLoaders?: Record<string, ModuleLoader>;
7
7
  exposurePolicy?: ExposurePolicy;
8
8
  context?: unknown;
9
9
  startup?: {
@@ -12,7 +12,8 @@ export interface CreateMcpServerOptions {
12
12
  };
13
13
  registerMetaTools?: boolean;
14
14
  http?: FastifyTransportOptions;
15
- /** Factory to create an MCP server instance. Required.
15
+ /**
16
+ * Factory to create an MCP server instance. Required.
16
17
  * In DYNAMIC mode, a new instance is created per client bundle.
17
18
  * In STATIC mode, a single instance is created and reused across bundles.
18
19
  */
@@ -1 +1 @@
1
- {"version":3,"file":"createMcpServer.d.ts","sourceRoot":"","sources":["../../src/server/createMcpServer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACzE,OAAO,KAAK,EAAE,cAAc,EAAE,IAAI,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAE9E,OAAO,EAEL,KAAK,uBAAuB,EAC7B,MAAM,6BAA6B,CAAC;AAErC,MAAM,WAAW,sBAAsB;IACrC,OAAO,EAAE,cAAc,CAAC;IACxB,aAAa,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IACpC,cAAc,CAAC,EAAE,cAAc,CAAC;IAChC,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,OAAO,CAAC,EAAE;QAAE,IAAI,CAAC,EAAE,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,EAAE,GAAG,KAAK,CAAA;KAAE,CAAC;IACvE,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,IAAI,CAAC,EAAE,uBAAuB,CAAC;IAC/B;;;OAGG;IACH,YAAY,EAAE,MAAM,SAAS,CAAC;IAC9B,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,wBAAsB,eAAe,CAAC,OAAO,EAAE,sBAAsB;;;;GAkFpE"}
1
+ {"version":3,"file":"createMcpServer.d.ts","sourceRoot":"","sources":["../../src/server/createMcpServer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACzE,OAAO,KAAK,EACV,cAAc,EACd,IAAI,EACJ,YAAY,EACZ,cAAc,EACf,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EAEL,KAAK,uBAAuB,EAC7B,MAAM,6BAA6B,CAAC;AAErC,MAAM,WAAW,sBAAsB;IACrC,OAAO,EAAE,cAAc,CAAC;IACxB,aAAa,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;IAC7C,cAAc,CAAC,EAAE,cAAc,CAAC;IAChC,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,OAAO,CAAC,EAAE;QAAE,IAAI,CAAC,EAAE,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,EAAE,GAAG,KAAK,CAAA;KAAE,CAAC;IACvE,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,IAAI,CAAC,EAAE,uBAAuB,CAAC;IAC/B;;;;OAIG;IACH,YAAY,EAAE,MAAM,SAAS,CAAC;IAC9B,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,wBAAsB,eAAe,CAAC,OAAO,EAAE,sBAAsB;;;;GAiGpE"}
@@ -1 +1 @@
1
- {"version":3,"file":"createPermissionBasedMcpServer.d.ts","sourceRoot":"","sources":["../../src/server/createPermissionBasedMcpServer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACzE,OAAO,KAAK,EAAE,qCAAqC,EAAE,MAAM,mBAAmB,CAAC;AAO/E;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAwDG;AACH,wBAAsB,8BAA8B,CAClD,OAAO,EAAE,qCAAqC;;;;GA6F/C"}
1
+ {"version":3,"file":"createPermissionBasedMcpServer.d.ts","sourceRoot":"","sources":["../../src/server/createPermissionBasedMcpServer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACzE,OAAO,KAAK,EACV,qCAAqC,EAEtC,MAAM,mBAAmB,CAAC;AAoD3B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAwDG;AACH,wBAAsB,8BAA8B,CAClD,OAAO,EAAE,qCAAqC;;;;GAkG/C"}
@@ -1,22 +1,53 @@
1
- export interface ClientResourceCacheOptions {
1
+ export interface ClientResourceCacheOptions<T> {
2
2
  maxSize?: number;
3
3
  ttlMs?: number;
4
4
  pruneIntervalMs?: number;
5
+ /**
6
+ * Optional cleanup callback called when a resource is removed from the cache.
7
+ * Use this to close connections, clean up sessions, etc.
8
+ * @param key - The cache key being removed
9
+ * @param resource - The resource being removed
10
+ */
11
+ onEvict?: (key: string, resource: T) => void | Promise<void>;
5
12
  }
6
13
  export declare class ClientResourceCache<T> {
14
+ #private;
7
15
  private storage;
8
16
  private maxSize;
9
17
  private ttlMs;
18
+ private onEvict?;
10
19
  private pruneInterval?;
11
- constructor(options?: ClientResourceCacheOptions);
20
+ constructor(options?: ClientResourceCacheOptions<T>);
12
21
  getEntryCount(): number;
13
22
  getMaxSize(): number;
14
23
  getTtl(): number;
15
24
  get(key: string): T | null;
16
25
  set(key: string, resource: T): void;
26
+ /**
27
+ * Removes an entry from the cache.
28
+ * Calls the onEvict callback if configured.
29
+ * @param key - The key to remove
30
+ */
17
31
  delete(key: string): void;
18
- stop(): void;
32
+ /**
33
+ * Stops the background pruning interval and optionally clears all entries.
34
+ * @param clearEntries - If true, also removes all entries and calls onEvict for each
35
+ */
36
+ stop(clearEntries?: boolean): void;
37
+ /**
38
+ * Clears all entries from the cache.
39
+ * Calls onEvict for each entry being removed.
40
+ */
41
+ clear(): void;
42
+ /**
43
+ * Evicts the least recently used entry from the cache.
44
+ * @private
45
+ */
19
46
  private evictLeastRecentlyUsed;
47
+ /**
48
+ * Removes all expired entries from the cache.
49
+ * @private
50
+ */
20
51
  private pruneExpired;
21
52
  }
22
53
  //# sourceMappingURL=ClientResourceCache.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"ClientResourceCache.d.ts","sourceRoot":"","sources":["../../src/session/ClientResourceCache.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,0BAA0B;IACzC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAOD,qBAAa,mBAAmB,CAAC,CAAC;IAChC,OAAO,CAAC,OAAO,CAA+B;IAC9C,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,KAAK,CAAS;IAEtB,OAAO,CAAC,aAAa,CAAC,CAAiC;gBAE3C,OAAO,GAAE,0BAA+B;IAO7C,aAAa,IAAI,MAAM;IAIvB,UAAU,IAAI,MAAM;IAIpB,MAAM,IAAI,MAAM;IAIhB,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,CAAC,GAAG,IAAI;IAa1B,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,GAAG,IAAI;IAQnC,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAIzB,IAAI,IAAI,IAAI;IAOnB,OAAO,CAAC,sBAAsB;IAO9B,OAAO,CAAC,YAAY;CAQrB"}
1
+ {"version":3,"file":"ClientResourceCache.d.ts","sourceRoot":"","sources":["../../src/session/ClientResourceCache.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,0BAA0B,CAAC,CAAC;IAC3C,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB;;;;;OAKG;IACH,OAAO,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAC9D;AAOD,qBAAa,mBAAmB,CAAC,CAAC;;IAChC,OAAO,CAAC,OAAO,CAA+B;IAC9C,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,KAAK,CAAS;IACtB,OAAO,CAAC,OAAO,CAAC,CAAqD;IAErE,OAAO,CAAC,aAAa,CAAC,CAAiC;gBAE3C,OAAO,GAAE,0BAA0B,CAAC,CAAC,CAAM;IAQhD,aAAa,IAAI,MAAM;IAIvB,UAAU,IAAI,MAAM;IAIpB,MAAM,IAAI,MAAM;IAIhB,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,CAAC,GAAG,IAAI;IAa1B,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,GAAG,IAAI;IAQ1C;;;;OAIG;IACI,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAQhC;;;OAGG;IACI,IAAI,CAAC,YAAY,UAAQ,GAAG,IAAI;IAUvC;;;OAGG;IACI,KAAK,IAAI,IAAI;IASpB;;;OAGG;IACH,OAAO,CAAC,sBAAsB;IAO9B;;;OAGG;IACH,OAAO,CAAC,YAAY;CAkCrB"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "toolception",
3
- "version": "0.3.0",
3
+ "version": "0.5.0",
4
4
  "private": false,
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -34,7 +34,7 @@
34
34
  "@vitest/coverage-v8": "^3.2.4",
35
35
  "tsx": "^4.19.0",
36
36
  "typescript": "^5.9.2",
37
- "vite": "^5.3.1",
37
+ "vite": "^7.2.4",
38
38
  "vite-plugin-dts": "^4.5.4",
39
39
  "vitest": "^3.2.4"
40
40
  },