toolception 0.6.0 → 0.6.2

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 (61) hide show
  1. package/README.md +1 -1
  2. package/dist/core/DynamicToolManager.d.ts +33 -22
  3. package/dist/core/DynamicToolManager.d.ts.map +1 -1
  4. package/dist/core/ServerOrchestrator.d.ts +33 -25
  5. package/dist/core/ServerOrchestrator.d.ts.map +1 -1
  6. package/dist/core/ToolRegistry.d.ts +5 -3
  7. package/dist/core/ToolRegistry.d.ts.map +1 -1
  8. package/dist/core/core.types.d.ts +29 -0
  9. package/dist/core/core.types.d.ts.map +1 -0
  10. package/dist/http/FastifyTransport.d.ts +49 -41
  11. package/dist/http/FastifyTransport.d.ts.map +1 -1
  12. package/dist/http/{customEndpoints.d.ts → http.types.d.ts} +33 -86
  13. package/dist/http/http.types.d.ts.map +1 -0
  14. package/dist/http/http.utils.d.ts +121 -0
  15. package/dist/http/http.utils.d.ts.map +1 -0
  16. package/dist/index.d.ts +5 -5
  17. package/dist/index.d.ts.map +1 -1
  18. package/dist/index.js +1076 -829
  19. package/dist/index.js.map +1 -1
  20. package/dist/meta/registerMetaTools.d.ts +12 -1
  21. package/dist/meta/registerMetaTools.d.ts.map +1 -1
  22. package/dist/mode/ModeResolver.d.ts +11 -10
  23. package/dist/mode/ModeResolver.d.ts.map +1 -1
  24. package/dist/mode/ModuleResolver.d.ts +18 -4
  25. package/dist/mode/ModuleResolver.d.ts.map +1 -1
  26. package/dist/mode/mode.types.d.ts +15 -0
  27. package/dist/mode/mode.types.d.ts.map +1 -0
  28. package/dist/permissions/PermissionAwareFastifyTransport.d.ts +15 -39
  29. package/dist/permissions/PermissionAwareFastifyTransport.d.ts.map +1 -1
  30. package/dist/permissions/PermissionResolver.d.ts +9 -24
  31. package/dist/permissions/PermissionResolver.d.ts.map +1 -1
  32. package/dist/permissions/{createPermissionAwareBundle.d.ts → permissions.types.d.ts} +17 -18
  33. package/dist/permissions/permissions.types.d.ts.map +1 -0
  34. package/dist/permissions/permissions.utils.d.ts +31 -0
  35. package/dist/permissions/permissions.utils.d.ts.map +1 -0
  36. package/dist/server/createMcpServer.d.ts +3 -46
  37. package/dist/server/createMcpServer.d.ts.map +1 -1
  38. package/dist/server/createPermissionBasedMcpServer.d.ts +2 -64
  39. package/dist/server/createPermissionBasedMcpServer.d.ts.map +1 -1
  40. package/dist/server/server.types.d.ts +71 -0
  41. package/dist/server/server.types.d.ts.map +1 -0
  42. package/dist/server/server.utils.d.ts +45 -0
  43. package/dist/server/server.utils.d.ts.map +1 -0
  44. package/dist/session/ClientResourceCache.d.ts +8 -27
  45. package/dist/session/ClientResourceCache.d.ts.map +1 -1
  46. package/dist/session/SessionContextResolver.d.ts +21 -72
  47. package/dist/session/SessionContextResolver.d.ts.map +1 -1
  48. package/dist/session/session.types.d.ts +29 -0
  49. package/dist/session/session.types.d.ts.map +1 -0
  50. package/dist/session/{validateSessionContextConfig.d.ts → session.utils.d.ts} +1 -2
  51. package/dist/session/session.utils.d.ts.map +1 -0
  52. package/dist/types/index.d.ts +0 -24
  53. package/dist/types/index.d.ts.map +1 -1
  54. package/package.json +1 -1
  55. package/dist/http/customEndpoints.d.ts.map +0 -1
  56. package/dist/http/endpointRegistration.d.ts +0 -35
  57. package/dist/http/endpointRegistration.d.ts.map +0 -1
  58. package/dist/permissions/createPermissionAwareBundle.d.ts.map +0 -1
  59. package/dist/permissions/validatePermissionConfig.d.ts +0 -9
  60. package/dist/permissions/validatePermissionConfig.d.ts.map +0 -1
  61. package/dist/session/validateSessionContextConfig.d.ts.map +0 -1
@@ -1,6 +1,13 @@
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
+ import { ToolRegistry } from '../core/ToolRegistry.js';
5
+ /**
6
+ * Reserved toolset key for meta-tools.
7
+ * Meta-tools are registered under this key to enable collision detection
8
+ * and tracking via the ToolRegistry.
9
+ */
10
+ export declare const META_TOOLSET_KEY = "_meta";
4
11
  /**
5
12
  * Registers meta-tools on the MCP server for toolset management.
6
13
  *
@@ -11,11 +18,15 @@ import { DynamicToolManager } from '../core/DynamicToolManager.js';
11
18
  *
12
19
  * In STATIC mode, only list_tools is registered since toolsets are fixed at startup.
13
20
  *
21
+ * Meta-tools are registered with the ToolRegistry under the reserved "_meta" toolset key
22
+ * to enable collision detection with user-defined tools.
23
+ *
14
24
  * @param server - The MCP server to register tools on
15
25
  * @param manager - The DynamicToolManager instance
26
+ * @param toolRegistry - The ToolRegistry for collision detection
16
27
  * @param options - Configuration options including the mode
17
28
  */
18
- export declare function registerMetaTools(server: McpServer, manager: DynamicToolManager, options?: {
29
+ export declare function registerMetaTools(server: McpServer, manager: DynamicToolManager, toolRegistry: ToolRegistry, options?: {
19
30
  mode?: Exclude<Mode, "ALL">;
20
31
  }): void;
21
32
  //# sourceMappingURL=registerMetaTools.d.ts.map
@@ -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;;;;;;;;;;;;;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,CAoHN"}
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;AACnE,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAEvD;;;;GAIG;AACH,eAAO,MAAM,gBAAgB,UAAU,CAAC;AAExC;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,iBAAiB,CAC/B,MAAM,EAAE,SAAS,EACjB,OAAO,EAAE,kBAAkB,EAC3B,YAAY,EAAE,YAAY,EAC1B,OAAO,CAAC,EAAE;IAAE,IAAI,CAAC,EAAE,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,CAAA;CAAE,GACxC,IAAI,CA0HN"}
@@ -1,14 +1,12 @@
1
1
  import { Mode, ToolSetCatalog } from '../types/index.js';
2
- interface ModeResolverKeys {
3
- dynamic?: string[];
4
- toolsets?: string[];
5
- }
6
- interface ModeResolverOptions {
7
- keys?: ModeResolverKeys;
8
- }
2
+ import { ModeResolverKeys, ModeResolverOptions } from './mode.types.js';
9
3
  export declare class ToolsetValidator {
10
4
  private readonly keys;
11
5
  constructor(options?: ModeResolverOptions);
6
+ static builder(): {
7
+ keys(value: ModeResolverKeys): /*elided*/ any;
8
+ build(): ToolsetValidator;
9
+ };
12
10
  resolveMode(env?: Record<string, string | undefined>, args?: Record<string, unknown>): Mode | null;
13
11
  parseCommaSeparatedToolSets(input: string, catalog: ToolSetCatalog): string[];
14
12
  getModulesForToolSets(toolsets: string[], catalog: ToolSetCatalog): string[];
@@ -18,8 +16,12 @@ export declare class ToolsetValidator {
18
16
  error?: string;
19
17
  };
20
18
  /**
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.
19
+ * @param name - The invalid name value
20
+ * @param catalog - The toolset catalog for listing available options
21
+ * @returns Validation result with descriptive error message
22
+ */
23
+ private createInvalidNameError;
24
+ /**
23
25
  * @param toolsetNames - Array of toolset names to validate
24
26
  * @param catalog - The toolset catalog to validate against
25
27
  * @returns Validation result with modules array if valid
@@ -32,5 +34,4 @@ export declare class ToolsetValidator {
32
34
  private isDynamicEnabled;
33
35
  private getToolsetsString;
34
36
  }
35
- export {};
36
37
  //# sourceMappingURL=ModeResolver.d.ts.map
@@ -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;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
+ {"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;AAC9D,OAAO,KAAK,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AAG7E,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,QAAQ,CAAC,IAAI,CAA6B;gBAEtC,OAAO,GAAE,mBAAwB;IAO7C,MAAM,CAAC,OAAO;oBAGE,gBAAgB;;;IAMzB,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;IAmB3D;;;;OAIG;IACH,OAAO,CAAC,sBAAsB;IAiB9B;;;;OAIG;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,12 +1,14 @@
1
1
  import { ToolSetCatalog, ToolSetDefinition, McpToolDefinition, ModuleLoader } from '../types/index.js';
2
- export interface ModuleResolverOptions {
3
- catalog: ToolSetCatalog;
4
- moduleLoaders?: Record<string, ModuleLoader>;
5
- }
2
+ import { ModuleResolverOptions } from './mode.types.js';
6
3
  export declare class ModuleResolver {
7
4
  private readonly catalog;
8
5
  private readonly moduleLoaders;
9
6
  constructor(options: ModuleResolverOptions);
7
+ static builder(): {
8
+ catalog(value: ToolSetCatalog): /*elided*/ any;
9
+ moduleLoaders(value: Record<string, ModuleLoader>): /*elided*/ any;
10
+ build(): ModuleResolver;
11
+ };
10
12
  getAvailableToolsets(): string[];
11
13
  getToolsetDefinition(name: string): ToolSetDefinition | undefined;
12
14
  validateToolsetName(name: unknown): {
@@ -15,5 +17,17 @@ export declare class ModuleResolver {
15
17
  error?: string;
16
18
  };
17
19
  resolveToolsForToolsets(toolsets: string[], context?: unknown): Promise<McpToolDefinition[]>;
20
+ /**
21
+ * @param def - The toolset definition
22
+ * @param collected - Mutable array to append direct tools to
23
+ */
24
+ private collectDirectTools;
25
+ /**
26
+ * @param def - The toolset definition containing module keys
27
+ * @param toolsetName - The toolset name for error messages
28
+ * @param context - Optional context passed to module loaders
29
+ * @param collected - Mutable array to append loaded tools to
30
+ */
31
+ private loadModuleTools;
18
32
  }
19
33
  //# sourceMappingURL=ModuleResolver.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"ModuleResolver.d.ts","sourceRoot":"","sources":["../../src/mode/ModuleResolver.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,cAAc,EACd,iBAAiB,EACjB,iBAAiB,EACjB,YAAY,EACb,MAAM,mBAAmB,CAAC;AAE3B,MAAM,WAAW,qBAAqB;IACpC,OAAO,EAAE,cAAc,CAAC;IACxB,aAAa,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;CAC9C;AAED,qBAAa,cAAc;IACzB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAiB;IACzC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAA+B;gBAEjD,OAAO,EAAE,qBAAqB;IAKnC,oBAAoB,IAAI,MAAM,EAAE;IAIhC,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,iBAAiB,GAAG,SAAS;IAIjE,mBAAmB,CAAC,IAAI,EAAE,OAAO,GAAG;QACzC,OAAO,EAAE,OAAO,CAAC;QACjB,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,KAAK,CAAC,EAAE,MAAM,CAAC;KAChB;IA6BY,uBAAuB,CAClC,QAAQ,EAAE,MAAM,EAAE,EAClB,OAAO,CAAC,EAAE,OAAO,GAChB,OAAO,CAAC,iBAAiB,EAAE,CAAC;CA4BhC"}
1
+ {"version":3,"file":"ModuleResolver.d.ts","sourceRoot":"","sources":["../../src/mode/ModuleResolver.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,cAAc,EACd,iBAAiB,EACjB,iBAAiB,EACjB,YAAY,EACb,MAAM,mBAAmB,CAAC;AAC3B,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAC;AAG7D,qBAAa,cAAc;IACzB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAiB;IACzC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAA+B;gBAEjD,OAAO,EAAE,qBAAqB;IAa1C,MAAM,CAAC,OAAO;uBAGK,cAAc;6BACR,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC;;;IAM9C,oBAAoB,IAAI,MAAM,EAAE;IAIhC,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,iBAAiB,GAAG,SAAS;IAIjE,mBAAmB,CAAC,IAAI,EAAE,OAAO,GAAG;QACzC,OAAO,EAAE,OAAO,CAAC;QACjB,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,KAAK,CAAC,EAAE,MAAM,CAAC;KAChB;IAoCY,uBAAuB,CAClC,QAAQ,EAAE,MAAM,EAAE,EAClB,OAAO,CAAC,EAAE,OAAO,GAChB,OAAO,CAAC,iBAAiB,EAAE,CAAC;IAW/B;;;OAGG;IACH,OAAO,CAAC,kBAAkB;IAS1B;;;;;OAKG;YACW,eAAe;CAuB9B"}
@@ -0,0 +1,15 @@
1
+ import { ToolSetCatalog, ModuleLoader } from '../types/index.js';
2
+ export interface ModeResolverKeys {
3
+ dynamic?: string[];
4
+ toolsets?: string[];
5
+ }
6
+ export interface ModeResolverOptions {
7
+ keys?: ModeResolverKeys;
8
+ }
9
+ export declare const DEFAULT_KEYS: Required<ModeResolverKeys>;
10
+ export declare const RESERVED_TOOLSET_KEYS: string[];
11
+ export interface ModuleResolverOptions {
12
+ catalog: ToolSetCatalog;
13
+ moduleLoaders?: Record<string, ModuleLoader>;
14
+ }
15
+ //# sourceMappingURL=mode.types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mode.types.d.ts","sourceRoot":"","sources":["../../src/mode/mode.types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAEtE,MAAM,WAAW,gBAAgB;IAC/B,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;CACrB;AAED,MAAM,WAAW,mBAAmB;IAClC,IAAI,CAAC,EAAE,gBAAgB,CAAC;CACzB;AAED,eAAO,MAAM,YAAY,EAAE,QAAQ,CAAC,gBAAgB,CAOnD,CAAC;AAEF,eAAO,MAAM,qBAAqB,UAAY,CAAC;AAE/C,MAAM,WAAW,qBAAqB;IACpC,OAAO,EAAE,cAAc,CAAC;IACxB,aAAa,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;CAC9C"}
@@ -1,29 +1,7 @@
1
1
  import { FastifyInstance } from 'fastify';
2
2
  import { DynamicToolManager } from '../core/DynamicToolManager.js';
3
- import { ClientRequestContext, PermissionAwareBundle } from './createPermissionAwareBundle.js';
4
- import { CustomEndpointDefinition } from '../http/customEndpoints.js';
5
- export interface PermissionAwareFastifyTransportOptions {
6
- host?: string;
7
- port?: number;
8
- basePath?: string;
9
- cors?: boolean;
10
- logger?: boolean;
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[];
18
- }
19
- /**
20
- * Enhanced Fastify transport that supports permission-based toolset access.
21
- * Integrates with PermissionResolver to enforce per-client toolset permissions.
22
- *
23
- * This transport extracts client context from requests and passes it to the
24
- * permission-aware bundle creator, ensuring each client receives only their
25
- * authorized toolsets while maintaining session management and caching.
26
- */
3
+ import { ClientRequestContext, PermissionAwareBundle, PermissionAwareFastifyTransportOptions } from './permissions.types.js';
4
+ import { CustomEndpointDefinition } from '../http/http.types.js';
27
5
  export declare class PermissionAwareFastifyTransport {
28
6
  #private;
29
7
  private readonly options;
@@ -32,23 +10,21 @@ export declare class PermissionAwareFastifyTransport {
32
10
  private app;
33
11
  private readonly configSchema?;
34
12
  private readonly clientCache;
35
- /**
36
- * Creates a new PermissionAwareFastifyTransport instance.
37
- * @param defaultManager - Default tool manager for status endpoints
38
- * @param createPermissionAwareBundle - Function to create permission-aware bundles
39
- * @param options - Transport configuration options
40
- * @param configSchema - Optional JSON schema for configuration discovery
41
- */
42
13
  constructor(defaultManager: DynamicToolManager, createPermissionAwareBundle: (context: ClientRequestContext) => Promise<PermissionAwareBundle>, options?: PermissionAwareFastifyTransportOptions, configSchema?: object);
43
- /**
44
- * Starts the Fastify server and registers all MCP endpoints.
45
- * Sets up routes for health checks, tool status, and MCP protocol handling.
46
- */
14
+ static builder(): {
15
+ defaultManager(value: DynamicToolManager): /*elided*/ any;
16
+ createPermissionAwareBundle(value: (context: ClientRequestContext) => Promise<PermissionAwareBundle>): /*elided*/ any;
17
+ host(value: string): /*elided*/ any;
18
+ port(value: number): /*elided*/ any;
19
+ basePath(value: string): /*elided*/ any;
20
+ cors(value: boolean): /*elided*/ any;
21
+ logger(value: boolean): /*elided*/ any;
22
+ app(value: FastifyInstance): /*elided*/ any;
23
+ customEndpoints(value: CustomEndpointDefinition[]): /*elided*/ any;
24
+ configSchema(value: object): /*elided*/ any;
25
+ build(): PermissionAwareFastifyTransport;
26
+ };
47
27
  start(): Promise<void>;
48
- /**
49
- * Stops the Fastify server and cleans up all resources.
50
- * Closes all client sessions and clears the cache.
51
- */
52
28
  stop(): Promise<void>;
53
29
  }
54
30
  //# sourceMappingURL=PermissionAwareFastifyTransport.d.ts.map
@@ -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;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"}
1
+ {"version":3,"file":"PermissionAwareFastifyTransport.d.ts","sourceRoot":"","sources":["../../src/permissions/PermissionAwareFastifyTransport.ts"],"names":[],"mappings":"AAAA,OAAgB,EACd,KAAK,eAAe,EAGrB,MAAM,SAAS,CAAC;AAIjB,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAC;AAMxE,OAAO,KAAK,EACV,oBAAoB,EACpB,qBAAqB,EACrB,sCAAsC,EACvC,MAAM,wBAAwB,CAAC;AAChC,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,uBAAuB,CAAC;AAQtE,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;gBAGD,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,MAAM,CAAC,OAAO;8BAMY,kBAAkB;2CACL,CAAC,OAAO,EAAE,oBAAoB,KAAK,OAAO,CAAC,qBAAqB,CAAC;oBACxF,MAAM;oBACN,MAAM;wBACF,MAAM;oBACV,OAAO;sBACL,OAAO;mBACV,eAAe;+BACH,wBAAwB,EAAE;4BAC7B,MAAM;;;IAMjB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAoDtB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;CA0TnC"}
@@ -1,43 +1,28 @@
1
1
  import { PermissionConfig } from '../types/index.js';
2
- /**
3
- * Resolves and caches client permissions based on configured permission sources.
4
- * Supports both header-based and config-based permission resolution with caching
5
- * for performance optimization.
6
- */
7
2
  export declare class PermissionResolver {
8
3
  #private;
9
4
  private config;
10
5
  private cache;
11
6
  private readonly normalizedHeaderName;
12
- /**
13
- * Creates a new PermissionResolver instance.
14
- * @param config - The permission configuration defining how permissions are resolved
15
- */
16
7
  constructor(config: PermissionConfig);
8
+ static builder(): {
9
+ source(value: "headers" | "config"): /*elided*/ any;
10
+ headerName(value: string): /*elided*/ any;
11
+ staticMap(value: Record<string, string[]>): /*elided*/ any;
12
+ resolver(value: (clientId: string) => string[]): /*elided*/ any;
13
+ defaultPermissions(value: string[]): /*elided*/ any;
14
+ build(): PermissionResolver;
15
+ };
17
16
  /**
18
- * Resolves permissions for a client based on the configured source.
19
- * Results are cached to improve performance for subsequent requests from the same client.
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
- *
26
17
  * @param clientId - The unique identifier for the client
27
- * @param headers - Optional request headers (required for header-based permissions)
18
+ * @param headers - Optional request headers
28
19
  * @returns Array of toolset names the client is allowed to access
29
20
  */
30
21
  resolvePermissions(clientId: string, headers?: Record<string, string>): string[];
31
22
  /**
32
- * Invalidates cached permissions for a specific client.
33
- * Call this when you know a client's permissions have changed.
34
23
  * @param clientId - The client ID to invalidate
35
24
  */
36
25
  invalidateCache(clientId: string): void;
37
- /**
38
- * Clears the permission cache.
39
- * Useful for cleanup during server shutdown or when permissions need to be refreshed.
40
- */
41
26
  clearCache(): void;
42
27
  }
43
28
  //# sourceMappingURL=PermissionResolver.d.ts.map
@@ -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;;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"}
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,qBAAa,kBAAkB;;IAIjB,OAAO,CAAC,MAAM;IAH1B,OAAO,CAAC,KAAK,CAA+B;IAC5C,OAAO,CAAC,QAAQ,CAAC,oBAAoB,CAAS;gBAE1B,MAAM,EAAE,gBAAgB;IAO5C,MAAM,CAAC,OAAO;sBAGI,SAAS,GAAG,QAAQ;0BAChB,MAAM;yBACP,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC;wBACzB,CAAC,QAAQ,EAAE,MAAM,KAAK,MAAM,EAAE;kCACpB,MAAM,EAAE;;;IAMtC;;;;OAIG;IACH,kBAAkB,CAChB,QAAQ,EAAE,MAAM,EAChB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAC/B,MAAM,EAAE;IAyCX;;OAEG;IACH,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI;IA2HvC,UAAU,IAAI,IAAI;CAGnB"}
@@ -1,6 +1,20 @@
1
1
  import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
2
2
  import { ServerOrchestrator } from '../core/ServerOrchestrator.js';
3
- import { PermissionResolver } from './PermissionResolver.js';
3
+ import { CustomEndpointDefinition } from '../http/http.types.js';
4
+ export interface PermissionAwareFastifyTransportOptions {
5
+ host?: string;
6
+ port?: number;
7
+ basePath?: string;
8
+ cors?: boolean;
9
+ logger?: boolean;
10
+ app?: import('fastify').FastifyInstance;
11
+ /**
12
+ * Optional custom HTTP endpoints to register alongside MCP protocol endpoints.
13
+ * Allows adding REST-like endpoints with Zod validation and type inference.
14
+ * Handlers receive permission context (allowedToolsets, failedToolsets).
15
+ */
16
+ customEndpoints?: CustomEndpointDefinition[];
17
+ }
4
18
  /**
5
19
  * Context information extracted from a client request.
6
20
  * Used to identify the client and resolve their permissions.
@@ -8,7 +22,7 @@ import { PermissionResolver } from './PermissionResolver.js';
8
22
  export interface ClientRequestContext {
9
23
  /**
10
24
  * Unique identifier for the client making the request.
11
- * May be provided via mcp-client-id header or generated as anonymous ID.
25
+ * Must be provided via the mcp-client-id header for MCP protocol traffic.
12
26
  */
13
27
  clientId: string;
14
28
  /**
@@ -40,19 +54,4 @@ export interface PermissionAwareBundle {
40
54
  */
41
55
  failedToolsets: string[];
42
56
  }
43
- /**
44
- * Creates a permission-aware bundle creation function that wraps the original
45
- * createBundle function with permission resolution and enforcement.
46
- *
47
- * This function resolves client permissions and passes them to the bundle creator,
48
- * which creates a server with STATIC mode configured to only those toolsets.
49
- *
50
- * @param originalCreateBundle - Bundle creation function that accepts allowed toolsets
51
- * @param permissionResolver - Resolver instance for determining client permissions
52
- * @returns Enhanced bundle creation function that accepts client context
53
- */
54
- export declare function createPermissionAwareBundle(originalCreateBundle: (allowedToolsets: string[]) => {
55
- server: McpServer;
56
- orchestrator: ServerOrchestrator;
57
- }, permissionResolver: PermissionResolver): (context: ClientRequestContext) => Promise<PermissionAwareBundle>;
58
- //# sourceMappingURL=createPermissionAwareBundle.d.ts.map
57
+ //# sourceMappingURL=permissions.types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"permissions.types.d.ts","sourceRoot":"","sources":["../../src/permissions/permissions.types.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,wBAAwB,EAAE,MAAM,uBAAuB,CAAC;AAEtE,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,OAAO,SAAS,EAAE,eAAe,CAAC;IACxC;;;;OAIG;IACH,eAAe,CAAC,EAAE,wBAAwB,EAAE,CAAC;CAC9C;AAED;;;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"}
@@ -0,0 +1,31 @@
1
+ import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
2
+ import { ExposurePolicy, PermissionConfig } from '../types/index.js';
3
+ import { ServerOrchestrator } from '../core/ServerOrchestrator.js';
4
+ import { PermissionResolver } from './PermissionResolver.js';
5
+ import { ClientRequestContext, PermissionAwareBundle } from './permissions.types.js';
6
+ /**
7
+ * Validates a permission configuration object to ensure it meets all requirements.
8
+ * Throws descriptive errors for any validation failures.
9
+ * @param config - The permission configuration to validate
10
+ */
11
+ export declare function validatePermissionConfig(config: PermissionConfig): void;
12
+ /**
13
+ * Creates a permission-aware bundle creation function that wraps the original
14
+ * createBundle function with permission resolution and enforcement.
15
+ *
16
+ * @param originalCreateBundle - Bundle creation function that accepts allowed toolsets
17
+ * @param permissionResolver - Resolver instance for determining client permissions
18
+ * @returns Enhanced bundle creation function that accepts client context
19
+ */
20
+ export declare function createPermissionAwareBundle(originalCreateBundle: (allowedToolsets: string[]) => {
21
+ server: McpServer;
22
+ orchestrator: ServerOrchestrator;
23
+ }, permissionResolver: PermissionResolver): (context: ClientRequestContext) => Promise<PermissionAwareBundle>;
24
+ /**
25
+ * Validates and sanitizes exposure policy for permission-based servers.
26
+ * Certain policy options are not applicable or could conflict with permission-based access control.
27
+ * @param policy - The original exposure policy
28
+ * @returns Sanitized policy safe for permission-based servers
29
+ */
30
+ export declare function sanitizeExposurePolicyForPermissions(policy?: ExposurePolicy): ExposurePolicy | undefined;
31
+ //# sourceMappingURL=permissions.utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"permissions.utils.d.ts","sourceRoot":"","sources":["../../src/permissions/permissions.utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACzE,OAAO,KAAK,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAC1E,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAC;AACxE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAClE,OAAO,KAAK,EACV,oBAAoB,EACpB,qBAAqB,EACtB,MAAM,wBAAwB,CAAC;AAIhC;;;;GAIG;AACH,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,gBAAgB,GAAG,IAAI,CAKvE;AA4FD;;;;;;;GAOG;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,IAGpC,SAAS,oBAAoB,KAC5B,OAAO,CAAC,qBAAqB,CAAC,CAkDlC;AAID;;;;;GAKG;AACH,wBAAgB,oCAAoC,CAClD,MAAM,CAAC,EAAE,cAAc,GACtB,cAAc,GAAG,SAAS,CAkC5B"}
@@ -1,47 +1,4 @@
1
- import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
2
- import { ExposurePolicy, Mode, ModuleLoader, SessionContextConfig, ToolSetCatalog } from '../types/index.js';
3
- import { FastifyTransportOptions } from '../http/FastifyTransport.js';
4
- export interface CreateMcpServerOptions {
5
- catalog: ToolSetCatalog;
6
- moduleLoaders?: Record<string, ModuleLoader>;
7
- exposurePolicy?: ExposurePolicy;
8
- context?: unknown;
9
- startup?: {
10
- mode?: Exclude<Mode, "ALL">;
11
- toolsets?: string[] | "ALL";
12
- };
13
- registerMetaTools?: boolean;
14
- http?: FastifyTransportOptions;
15
- /**
16
- * Factory to create an MCP server instance. Required.
17
- * In DYNAMIC mode, a new instance is created per client bundle.
18
- * In STATIC mode, a single instance is created and reused across bundles.
19
- */
20
- createServer: () => McpServer;
21
- configSchema?: object;
22
- /**
23
- * Optional per-session context configuration.
24
- * Enables extracting context from query parameters and merging with base context
25
- * on a per-request basis. Useful for multi-tenant scenarios.
26
- *
27
- * @example
28
- * ```typescript
29
- * sessionContext: {
30
- * enabled: true,
31
- * queryParam: {
32
- * name: 'config',
33
- * encoding: 'base64',
34
- * allowedKeys: ['API_TOKEN', 'USER_ID'],
35
- * },
36
- * merge: 'shallow',
37
- * }
38
- * ```
39
- */
40
- sessionContext?: SessionContextConfig;
41
- }
42
- export declare function createMcpServer(options: CreateMcpServerOptions): Promise<{
43
- server: McpServer;
44
- start: () => Promise<void>;
45
- close: () => Promise<void>;
46
- }>;
1
+ import { CreateMcpServerOptions, McpServerHandle } from './server.types.js';
2
+ export type { CreateMcpServerOptions } from './server.types.js';
3
+ export declare function createMcpServer(options: CreateMcpServerOptions): Promise<McpServerHandle>;
47
4
  //# sourceMappingURL=createMcpServer.d.ts.map
@@ -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,EACV,cAAc,EACd,IAAI,EACJ,YAAY,EACZ,oBAAoB,EACpB,cAAc,EACf,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EAEL,KAAK,uBAAuB,EAC7B,MAAM,6BAA6B,CAAC;AAKrC,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;IACtB;;;;;;;;;;;;;;;;;OAiBG;IACH,cAAc,CAAC,EAAE,oBAAoB,CAAC;CACvC;AAaD,wBAAsB,eAAe,CAAC,OAAO,EAAE,sBAAsB;;;;GA2IpE"}
1
+ {"version":3,"file":"createMcpServer.d.ts","sourceRoot":"","sources":["../../src/server/createMcpServer.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,sBAAsB,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAWjF,YAAY,EAAE,sBAAsB,EAAE,MAAM,mBAAmB,CAAC;AAEhE,wBAAsB,eAAe,CACnC,OAAO,EAAE,sBAAsB,GAC9B,OAAO,CAAC,eAAe,CAAC,CAgC1B"}
@@ -1,65 +1,3 @@
1
- import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
2
- import { CreatePermissionBasedMcpServerOptions } from '../types/index.js';
3
- /**
4
- * Creates an MCP server with permission-based toolset access control.
5
- *
6
- * This function provides a separate API for creating servers where each client receives
7
- * only the toolsets they're authorized to access. Each client gets a fresh server instance
8
- * with STATIC mode configured to their allowed toolsets, ensuring per-client isolation
9
- * without meta-tools or dynamic loading.
10
- *
11
- * The server supports two permission sources:
12
- * - **Header-based**: Permissions are read from request headers (e.g., `mcp-toolset-permissions`)
13
- * - **Config-based**: Permissions are resolved server-side using static maps or resolver functions
14
- *
15
- * @param options - Configuration options including permission settings, catalog, and HTTP transport options
16
- * @returns Server instance with `server`, `start()`, and `close()` methods matching the createMcpServer interface
17
- * @throws {Error} If permission configuration is invalid, missing, or if startup.mode is provided
18
- *
19
- * @example
20
- * // Header-based permissions
21
- * const server = await createPermissionBasedMcpServer({
22
- * createServer: () => new McpServer({ name: "my-server", version: "1.0.0" }),
23
- * catalog: { toolsetA: { name: "Toolset A", tools: [...] } },
24
- * permissions: {
25
- * source: 'headers',
26
- * headerName: 'mcp-toolset-permissions' // optional, this is the default
27
- * }
28
- * });
29
- *
30
- * @example
31
- * // Config-based permissions with static map
32
- * const server = await createPermissionBasedMcpServer({
33
- * createServer: () => new McpServer({ name: "my-server", version: "1.0.0" }),
34
- * catalog: { toolsetA: { name: "Toolset A", tools: [...] } },
35
- * permissions: {
36
- * source: 'config',
37
- * staticMap: {
38
- * 'client-1': ['toolsetA', 'toolsetB'],
39
- * 'client-2': ['toolsetC']
40
- * },
41
- * defaultPermissions: [] // optional, defaults to empty array
42
- * }
43
- * });
44
- *
45
- * @example
46
- * // Config-based permissions with resolver function
47
- * const server = await createPermissionBasedMcpServer({
48
- * createServer: () => new McpServer({ name: "my-server", version: "1.0.0" }),
49
- * catalog: { toolsetA: { name: "Toolset A", tools: [...] } },
50
- * permissions: {
51
- * source: 'config',
52
- * resolver: (clientId) => {
53
- * // Your custom logic to determine permissions
54
- * return clientId.startsWith('admin-') ? ['toolsetA', 'toolsetB'] : ['toolsetA'];
55
- * },
56
- * defaultPermissions: ['toolsetA'] // fallback if resolver fails
57
- * }
58
- * });
59
- */
60
- export declare function createPermissionBasedMcpServer(options: CreatePermissionBasedMcpServerOptions): Promise<{
61
- server: McpServer;
62
- start: () => Promise<void>;
63
- close: () => Promise<void>;
64
- }>;
1
+ import { CreatePermissionBasedMcpServerOptions, McpServerHandle } from './server.types.js';
2
+ export declare function createPermissionBasedMcpServer(options: CreatePermissionBasedMcpServerOptions): Promise<McpServerHandle>;
65
3
  //# sourceMappingURL=createPermissionBasedMcpServer.d.ts.map
@@ -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,EACV,qCAAqC,EAEtC,MAAM,mBAAmB,CAAC;AAqD3B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAwDG;AACH,wBAAsB,8BAA8B,CAClD,OAAO,EAAE,qCAAqC;;;;GA6G/C"}
1
+ {"version":3,"file":"createPermissionBasedMcpServer.d.ts","sourceRoot":"","sources":["../../src/server/createPermissionBasedMcpServer.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACV,qCAAqC,EACrC,eAAe,EAChB,MAAM,mBAAmB,CAAC;AAW3B,wBAAsB,8BAA8B,CAClD,OAAO,EAAE,qCAAqC,GAC7C,OAAO,CAAC,eAAe,CAAC,CA+B1B"}
@@ -0,0 +1,71 @@
1
+ import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
2
+ import { ExposurePolicy, Mode, ModuleLoader, PermissionConfig, SessionContextConfig, ToolSetCatalog } from '../types/index.js';
3
+ import { FastifyTransportOptions } from '../http/http.types.js';
4
+ /** Handle returned by both `createMcpServer` and `createPermissionBasedMcpServer`. */
5
+ export interface McpServerHandle {
6
+ server: McpServer;
7
+ start: () => Promise<void>;
8
+ close: () => Promise<void>;
9
+ }
10
+ export interface CreateMcpServerOptions {
11
+ catalog: ToolSetCatalog;
12
+ moduleLoaders?: Record<string, ModuleLoader>;
13
+ exposurePolicy?: ExposurePolicy;
14
+ context?: unknown;
15
+ startup?: {
16
+ mode?: Exclude<Mode, "ALL">;
17
+ toolsets?: string[] | "ALL";
18
+ };
19
+ registerMetaTools?: boolean;
20
+ http?: FastifyTransportOptions;
21
+ /**
22
+ * Factory to create an MCP server instance. Required.
23
+ * In DYNAMIC mode, a new instance is created per client bundle.
24
+ * In STATIC mode, a single instance is created and reused across bundles.
25
+ */
26
+ createServer: () => McpServer;
27
+ configSchema?: object;
28
+ /**
29
+ * Optional per-session context configuration.
30
+ * Enables extracting context from query parameters and merging with base context
31
+ * on a per-request basis. Useful for multi-tenant scenarios.
32
+ *
33
+ * @example
34
+ * ```typescript
35
+ * sessionContext: {
36
+ * enabled: true,
37
+ * queryParam: {
38
+ * name: 'config',
39
+ * encoding: 'base64',
40
+ * allowedKeys: ['API_TOKEN', 'USER_ID'],
41
+ * },
42
+ * merge: 'shallow',
43
+ * }
44
+ * ```
45
+ */
46
+ sessionContext?: SessionContextConfig;
47
+ }
48
+ export type CreatePermissionBasedMcpServerOptions = Omit<CreateMcpServerOptions, "startup"> & {
49
+ /**
50
+ * Permission configuration defining how client access control is enforced.
51
+ *
52
+ * This field is required for permission-based servers. It determines whether
53
+ * permissions are read from request headers or resolved server-side using
54
+ * static maps or resolver functions.
55
+ *
56
+ * @see {@link PermissionConfig} for detailed configuration options and examples
57
+ */
58
+ permissions: PermissionConfig;
59
+ /**
60
+ * Startup configuration is not allowed for permission-based servers.
61
+ *
62
+ * Permission-based servers automatically determine which toolsets to load for
63
+ * each client based on the `permissions` configuration. The server internally
64
+ * uses STATIC mode per client to ensure isolation and prevent dynamic toolset
65
+ * changes during a session.
66
+ *
67
+ * @deprecated Do not use - permission-based servers determine toolsets from client permissions
68
+ */
69
+ startup?: never;
70
+ };
71
+ //# sourceMappingURL=server.types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.types.d.ts","sourceRoot":"","sources":["../../src/server/server.types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACzE,OAAO,KAAK,EACV,cAAc,EACd,IAAI,EACJ,YAAY,EACZ,gBAAgB,EAChB,oBAAoB,EACpB,cAAc,EACf,MAAM,mBAAmB,CAAC;AAC3B,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,uBAAuB,CAAC;AAErE,sFAAsF;AACtF,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,SAAS,CAAC;IAClB,KAAK,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC3B,KAAK,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CAC5B;AAED,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;IACtB;;;;;;;;;;;;;;;;;OAiBG;IACH,cAAc,CAAC,EAAE,oBAAoB,CAAC;CACvC;AAED,MAAM,MAAM,qCAAqC,GAAG,IAAI,CACtD,sBAAsB,EACtB,SAAS,CACV,GAAG;IACF;;;;;;;;OAQG;IACH,WAAW,EAAE,gBAAgB,CAAC;IAE9B;;;;;;;;;OASG;IACH,OAAO,CAAC,EAAE,KAAK,CAAC;CACjB,CAAC"}
@@ -0,0 +1,45 @@
1
+ import { z } from 'zod';
2
+ import { Mode } from '../types/index.js';
3
+ /**
4
+ * Zod schema for validating startup configuration.
5
+ * Uses strict mode to reject unknown properties like 'initialToolsets'.
6
+ */
7
+ export declare const startupConfigSchema: z.ZodObject<{
8
+ mode: z.ZodOptional<z.ZodEnum<["DYNAMIC", "STATIC"]>>;
9
+ toolsets: z.ZodOptional<z.ZodUnion<[z.ZodArray<z.ZodString, "many">, z.ZodLiteral<"ALL">]>>;
10
+ }, "strict", z.ZodTypeAny, {
11
+ toolsets?: string[] | "ALL" | undefined;
12
+ mode?: "DYNAMIC" | "STATIC" | undefined;
13
+ }, {
14
+ toolsets?: string[] | "ALL" | undefined;
15
+ mode?: "DYNAMIC" | "STATIC" | undefined;
16
+ }>;
17
+ /**
18
+ * Validates a startup configuration object against `startupConfigSchema`.
19
+ * Throws a descriptive error when the config is invalid.
20
+ *
21
+ * @param startup - The startup configuration to validate
22
+ */
23
+ export declare function validateStartupConfig(startup: {
24
+ mode?: Exclude<Mode, "ALL">;
25
+ toolsets?: string[] | "ALL";
26
+ }): void;
27
+ /**
28
+ * Creates a notifier function that sends `tools/list_changed` notifications
29
+ * to an MCP server. Handles two different notification APIs and suppresses
30
+ * "Not connected" errors that occur when no clients are connected.
31
+ *
32
+ * @returns A function that sends tools/list_changed notifications to an MCP server
33
+ */
34
+ export declare function createToolsChangedNotifier(): (target: unknown) => Promise<void>;
35
+ /**
36
+ * Resolves whether meta-tools should be registered.
37
+ * When `explicit` is provided it takes precedence; otherwise meta-tools are
38
+ * enabled in DYNAMIC mode and disabled in STATIC mode.
39
+ *
40
+ * @param explicit - The user-provided registerMetaTools value (undefined = auto)
41
+ * @param mode - The resolved server mode
42
+ * @returns Whether meta-tools should be registered
43
+ */
44
+ export declare function resolveMetaToolsFlag(explicit: boolean | undefined, mode: Exclude<Mode, "ALL">): boolean;
45
+ //# sourceMappingURL=server.utils.d.ts.map