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.
- package/README.md +182 -29
- package/dist/core/DynamicToolManager.d.ts +45 -2
- package/dist/core/DynamicToolManager.d.ts.map +1 -1
- package/dist/core/ServerOrchestrator.d.ts +24 -2
- package/dist/core/ServerOrchestrator.d.ts.map +1 -1
- package/dist/http/FastifyTransport.d.ts +17 -0
- package/dist/http/FastifyTransport.d.ts.map +1 -1
- package/dist/http/customEndpoints.d.ts +247 -0
- package/dist/http/customEndpoints.d.ts.map +1 -0
- package/dist/http/endpointRegistration.d.ts +35 -0
- package/dist/http/endpointRegistration.d.ts.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +797 -454
- package/dist/index.js.map +1 -1
- package/dist/meta/registerMetaTools.d.ts +14 -0
- package/dist/meta/registerMetaTools.d.ts.map +1 -1
- package/dist/mode/ModeResolver.d.ts +7 -0
- package/dist/mode/ModeResolver.d.ts.map +1 -1
- package/dist/permissions/PermissionAwareFastifyTransport.d.ts +9 -1
- package/dist/permissions/PermissionAwareFastifyTransport.d.ts.map +1 -1
- package/dist/permissions/PermissionResolver.d.ts +12 -0
- package/dist/permissions/PermissionResolver.d.ts.map +1 -1
- package/dist/permissions/createPermissionAwareBundle.d.ts +6 -0
- package/dist/permissions/createPermissionAwareBundle.d.ts.map +1 -1
- package/dist/server/createMcpServer.d.ts +4 -3
- package/dist/server/createMcpServer.d.ts.map +1 -1
- package/dist/server/createPermissionBasedMcpServer.d.ts.map +1 -1
- package/dist/session/ClientResourceCache.d.ts +34 -3
- package/dist/session/ClientResourceCache.d.ts.map +1 -1
- package/package.json +2 -2
|
@@ -0,0 +1,247 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
/**
|
|
3
|
+
* Supported HTTP methods for custom endpoints
|
|
4
|
+
*/
|
|
5
|
+
export type HttpMethod = "GET" | "POST" | "PUT" | "DELETE" | "PATCH";
|
|
6
|
+
/**
|
|
7
|
+
* Request context passed to custom endpoint handlers.
|
|
8
|
+
* Contains validated and typed request data without exposing Fastify types.
|
|
9
|
+
*/
|
|
10
|
+
export interface CustomEndpointRequest<TBody = unknown, TQuery = unknown, TParams = unknown> {
|
|
11
|
+
/**
|
|
12
|
+
* Validated request body (typed from bodySchema)
|
|
13
|
+
*/
|
|
14
|
+
body: TBody;
|
|
15
|
+
/**
|
|
16
|
+
* Validated query parameters (typed from querySchema)
|
|
17
|
+
*/
|
|
18
|
+
query: TQuery;
|
|
19
|
+
/**
|
|
20
|
+
* Validated path parameters (typed from paramsSchema)
|
|
21
|
+
*/
|
|
22
|
+
params: TParams;
|
|
23
|
+
/**
|
|
24
|
+
* Raw request headers
|
|
25
|
+
*/
|
|
26
|
+
headers: Record<string, string | string[] | undefined>;
|
|
27
|
+
/**
|
|
28
|
+
* Client ID (from mcp-client-id header or auto-generated for anonymous clients)
|
|
29
|
+
*/
|
|
30
|
+
clientId: string;
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Permission-aware request context for custom endpoints in permission-based servers.
|
|
34
|
+
* Extends CustomEndpointRequest with permission information.
|
|
35
|
+
*/
|
|
36
|
+
export interface PermissionAwareEndpointRequest<TBody = unknown, TQuery = unknown, TParams = unknown> extends CustomEndpointRequest<TBody, TQuery, TParams> {
|
|
37
|
+
/**
|
|
38
|
+
* Toolsets this client is allowed to access (resolved from permissions)
|
|
39
|
+
*/
|
|
40
|
+
allowedToolsets: string[];
|
|
41
|
+
/**
|
|
42
|
+
* Toolsets that failed to enable for this client
|
|
43
|
+
*/
|
|
44
|
+
failedToolsets: string[];
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Handler function type with automatic type inference from Zod schemas.
|
|
48
|
+
* Receives validated and typed request data, returns typed response.
|
|
49
|
+
*/
|
|
50
|
+
export type CustomEndpointHandler<TBody extends z.ZodTypeAny, TQuery extends z.ZodTypeAny, TParams extends z.ZodTypeAny, TResponse extends z.ZodTypeAny> = (request: CustomEndpointRequest<TBody extends z.ZodTypeAny ? z.infer<TBody> : never, TQuery extends z.ZodTypeAny ? z.infer<TQuery> : never, TParams extends z.ZodTypeAny ? z.infer<TParams> : never>) => Promise<z.infer<TResponse>> | z.infer<TResponse>;
|
|
51
|
+
/**
|
|
52
|
+
* Permission-aware handler function type for permission-based servers.
|
|
53
|
+
* Receives permission context in addition to validated request data.
|
|
54
|
+
*/
|
|
55
|
+
export type PermissionAwareEndpointHandler<TBody extends z.ZodTypeAny, TQuery extends z.ZodTypeAny, TParams extends z.ZodTypeAny, TResponse extends z.ZodTypeAny> = (request: PermissionAwareEndpointRequest<TBody extends z.ZodTypeAny ? z.infer<TBody> : never, TQuery extends z.ZodTypeAny ? z.infer<TQuery> : never, TParams extends z.ZodTypeAny ? z.infer<TParams> : never>) => Promise<z.infer<TResponse>> | z.infer<TResponse>;
|
|
56
|
+
/**
|
|
57
|
+
* Custom HTTP endpoint definition with Zod schema-based validation and type inference.
|
|
58
|
+
* Allows defining REST-like endpoints alongside MCP protocol endpoints.
|
|
59
|
+
*
|
|
60
|
+
* @template TBody - Zod schema for request body validation
|
|
61
|
+
* @template TQuery - Zod schema for query parameter validation
|
|
62
|
+
* @template TParams - Zod schema for path parameter validation
|
|
63
|
+
* @template TResponse - Zod schema for response validation
|
|
64
|
+
*
|
|
65
|
+
* @example
|
|
66
|
+
* ```typescript
|
|
67
|
+
* const getUserEndpoint = defineEndpoint({
|
|
68
|
+
* method: "GET",
|
|
69
|
+
* path: "/users/:userId",
|
|
70
|
+
* paramsSchema: z.object({
|
|
71
|
+
* userId: z.string().uuid(),
|
|
72
|
+
* }),
|
|
73
|
+
* responseSchema: z.object({
|
|
74
|
+
* id: z.string(),
|
|
75
|
+
* name: z.string(),
|
|
76
|
+
* }),
|
|
77
|
+
* handler: async (req) => {
|
|
78
|
+
* // req.params is typed: { userId: string }
|
|
79
|
+
* const { userId } = req.params;
|
|
80
|
+
* return { id: userId, name: "Alice" };
|
|
81
|
+
* },
|
|
82
|
+
* });
|
|
83
|
+
* ```
|
|
84
|
+
*/
|
|
85
|
+
export interface CustomEndpointDefinition<TBody extends z.ZodTypeAny = z.ZodTypeAny, TQuery extends z.ZodTypeAny = z.ZodTypeAny, TParams extends z.ZodTypeAny = z.ZodTypeAny, TResponse extends z.ZodTypeAny = z.ZodTypeAny> {
|
|
86
|
+
/**
|
|
87
|
+
* HTTP method for this endpoint
|
|
88
|
+
*/
|
|
89
|
+
method: HttpMethod;
|
|
90
|
+
/**
|
|
91
|
+
* URL path (relative to basePath). Supports path parameters using :param syntax.
|
|
92
|
+
*
|
|
93
|
+
* @example
|
|
94
|
+
* - "/users" - Simple path
|
|
95
|
+
* - "/users/:id" - Path with single parameter
|
|
96
|
+
* - "/items/:category/:id" - Path with multiple parameters
|
|
97
|
+
*/
|
|
98
|
+
path: string;
|
|
99
|
+
/**
|
|
100
|
+
* Optional Zod schema for request body validation (typically used with POST, PUT, PATCH).
|
|
101
|
+
* Enables automatic type inference for handler body parameter.
|
|
102
|
+
*/
|
|
103
|
+
bodySchema?: TBody;
|
|
104
|
+
/**
|
|
105
|
+
* Optional Zod schema for query parameter validation.
|
|
106
|
+
* Enables automatic type inference for handler query parameter.
|
|
107
|
+
*
|
|
108
|
+
* @example
|
|
109
|
+
* ```typescript
|
|
110
|
+
* querySchema: z.object({
|
|
111
|
+
* limit: z.coerce.number().int().positive().default(10),
|
|
112
|
+
* offset: z.coerce.number().int().nonnegative().default(0),
|
|
113
|
+
* })
|
|
114
|
+
* ```
|
|
115
|
+
*/
|
|
116
|
+
querySchema?: TQuery;
|
|
117
|
+
/**
|
|
118
|
+
* Optional Zod schema for path parameter validation.
|
|
119
|
+
* Enables automatic type inference for handler params parameter.
|
|
120
|
+
*/
|
|
121
|
+
paramsSchema?: TParams;
|
|
122
|
+
/**
|
|
123
|
+
* Optional Zod schema for response validation.
|
|
124
|
+
* Enables automatic type inference for handler return type.
|
|
125
|
+
* If validation fails, returns 500 error to prevent information leakage.
|
|
126
|
+
*/
|
|
127
|
+
responseSchema?: TResponse;
|
|
128
|
+
/**
|
|
129
|
+
* Request handler function with inferred types from schemas.
|
|
130
|
+
* Receives validated and typed request data, returns typed response.
|
|
131
|
+
*/
|
|
132
|
+
handler: CustomEndpointHandler<TBody, TQuery, TParams, TResponse>;
|
|
133
|
+
/**
|
|
134
|
+
* Optional description for documentation purposes
|
|
135
|
+
*/
|
|
136
|
+
description?: string;
|
|
137
|
+
}
|
|
138
|
+
/**
|
|
139
|
+
* Standard error response structure for custom endpoints
|
|
140
|
+
*/
|
|
141
|
+
export interface EndpointErrorResponse {
|
|
142
|
+
error: {
|
|
143
|
+
/**
|
|
144
|
+
* Error code indicating the type of error
|
|
145
|
+
* - VALIDATION_ERROR: Request validation failed (400)
|
|
146
|
+
* - INTERNAL_ERROR: Handler threw an error (500)
|
|
147
|
+
* - RESPONSE_VALIDATION_ERROR: Response validation failed (500)
|
|
148
|
+
*/
|
|
149
|
+
code: "VALIDATION_ERROR" | "INTERNAL_ERROR" | "RESPONSE_VALIDATION_ERROR";
|
|
150
|
+
/**
|
|
151
|
+
* Human-readable error message
|
|
152
|
+
*/
|
|
153
|
+
message: string;
|
|
154
|
+
/**
|
|
155
|
+
* Optional additional error details (e.g., Zod validation errors)
|
|
156
|
+
*/
|
|
157
|
+
details?: unknown;
|
|
158
|
+
};
|
|
159
|
+
}
|
|
160
|
+
/**
|
|
161
|
+
* Helper function to create type-safe custom endpoints with automatic type inference.
|
|
162
|
+
* Provides better IntelliSense and type checking for endpoint definitions.
|
|
163
|
+
*
|
|
164
|
+
* @template TBody - Zod schema for request body
|
|
165
|
+
* @template TQuery - Zod schema for query parameters
|
|
166
|
+
* @template TParams - Zod schema for path parameters
|
|
167
|
+
* @template TResponse - Zod schema for response
|
|
168
|
+
*
|
|
169
|
+
* @param definition - Endpoint definition with schemas and handler
|
|
170
|
+
* @returns The same endpoint definition with full type inference
|
|
171
|
+
*
|
|
172
|
+
* @example
|
|
173
|
+
* ```typescript
|
|
174
|
+
* import { z } from "zod";
|
|
175
|
+
* import { defineEndpoint } from "toolception";
|
|
176
|
+
*
|
|
177
|
+
* const getUsersEndpoint = defineEndpoint({
|
|
178
|
+
* method: "GET",
|
|
179
|
+
* path: "/users",
|
|
180
|
+
* querySchema: z.object({
|
|
181
|
+
* limit: z.coerce.number().int().positive().default(10),
|
|
182
|
+
* role: z.enum(["admin", "user"]).optional(),
|
|
183
|
+
* }),
|
|
184
|
+
* responseSchema: z.object({
|
|
185
|
+
* users: z.array(z.object({
|
|
186
|
+
* id: z.string(),
|
|
187
|
+
* name: z.string(),
|
|
188
|
+
* })),
|
|
189
|
+
* total: z.number(),
|
|
190
|
+
* }),
|
|
191
|
+
* handler: async (req) => {
|
|
192
|
+
* // req.query is fully typed: { limit: number, role?: "admin" | "user" }
|
|
193
|
+
* const { limit, role } = req.query;
|
|
194
|
+
*
|
|
195
|
+
* return {
|
|
196
|
+
* users: [{ id: "1", name: "Alice" }],
|
|
197
|
+
* total: 1,
|
|
198
|
+
* };
|
|
199
|
+
* },
|
|
200
|
+
* });
|
|
201
|
+
* ```
|
|
202
|
+
*/
|
|
203
|
+
export declare function defineEndpoint<TBody extends z.ZodTypeAny = z.ZodNever, TQuery extends z.ZodTypeAny = z.ZodNever, TParams extends z.ZodTypeAny = z.ZodNever, TResponse extends z.ZodTypeAny = z.ZodAny>(definition: CustomEndpointDefinition<TBody, TQuery, TParams, TResponse>): CustomEndpointDefinition<TBody, TQuery, TParams, TResponse>;
|
|
204
|
+
/**
|
|
205
|
+
* Helper function to create permission-aware custom endpoints for permission-based servers.
|
|
206
|
+
* Similar to defineEndpoint but with access to permission context in the handler.
|
|
207
|
+
*
|
|
208
|
+
* @template TBody - Zod schema for request body
|
|
209
|
+
* @template TQuery - Zod schema for query parameters
|
|
210
|
+
* @template TParams - Zod schema for path parameters
|
|
211
|
+
* @template TResponse - Zod schema for response
|
|
212
|
+
*
|
|
213
|
+
* @param definition - Endpoint definition with permission-aware handler
|
|
214
|
+
* @returns Endpoint definition compatible with permission-based servers
|
|
215
|
+
*
|
|
216
|
+
* @example
|
|
217
|
+
* ```typescript
|
|
218
|
+
* import { definePermissionAwareEndpoint } from "toolception";
|
|
219
|
+
*
|
|
220
|
+
* const statsEndpoint = definePermissionAwareEndpoint({
|
|
221
|
+
* method: "GET",
|
|
222
|
+
* path: "/my-permissions",
|
|
223
|
+
* responseSchema: z.object({
|
|
224
|
+
* toolsets: z.array(z.string()),
|
|
225
|
+
* count: z.number(),
|
|
226
|
+
* }),
|
|
227
|
+
* handler: async (req) => {
|
|
228
|
+
* // req.allowedToolsets and req.failedToolsets are available
|
|
229
|
+
* return {
|
|
230
|
+
* toolsets: req.allowedToolsets,
|
|
231
|
+
* count: req.allowedToolsets.length,
|
|
232
|
+
* };
|
|
233
|
+
* },
|
|
234
|
+
* });
|
|
235
|
+
* ```
|
|
236
|
+
*/
|
|
237
|
+
export declare function definePermissionAwareEndpoint<TBody extends z.ZodTypeAny = z.ZodNever, TQuery extends z.ZodTypeAny = z.ZodNever, TParams extends z.ZodTypeAny = z.ZodNever, TResponse extends z.ZodTypeAny = z.ZodAny>(definition: {
|
|
238
|
+
method: HttpMethod;
|
|
239
|
+
path: string;
|
|
240
|
+
bodySchema?: TBody;
|
|
241
|
+
querySchema?: TQuery;
|
|
242
|
+
paramsSchema?: TParams;
|
|
243
|
+
responseSchema?: TResponse;
|
|
244
|
+
handler: PermissionAwareEndpointHandler<TBody, TQuery, TParams, TResponse>;
|
|
245
|
+
description?: string;
|
|
246
|
+
}): CustomEndpointDefinition<TBody, TQuery, TParams, TResponse>;
|
|
247
|
+
//# sourceMappingURL=customEndpoints.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"customEndpoints.d.ts","sourceRoot":"","sources":["../../src/http/customEndpoints.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { FastifyInstance, FastifyRequest } from 'fastify';
|
|
2
|
+
import { CustomEndpointDefinition } from './customEndpoints.js';
|
|
3
|
+
/**
|
|
4
|
+
* Options for registering custom endpoints
|
|
5
|
+
*/
|
|
6
|
+
export interface RegisterCustomEndpointsOptions {
|
|
7
|
+
/**
|
|
8
|
+
* Optional function to extract additional context for each request.
|
|
9
|
+
* Used by permission-aware transport to inject permission data.
|
|
10
|
+
*/
|
|
11
|
+
contextExtractor?: (req: FastifyRequest) => Promise<Record<string, any>> | Record<string, any>;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Registers custom endpoints on a Fastify instance.
|
|
15
|
+
* Handles Zod validation, error responses, and type-safe request mapping.
|
|
16
|
+
*
|
|
17
|
+
* @param app - Fastify instance to register endpoints on
|
|
18
|
+
* @param basePath - Base path for all endpoints (e.g., "/" or "/api")
|
|
19
|
+
* @param endpoints - Array of custom endpoint definitions
|
|
20
|
+
* @param options - Optional configuration for endpoint registration
|
|
21
|
+
*
|
|
22
|
+
* @example
|
|
23
|
+
* ```typescript
|
|
24
|
+
* registerCustomEndpoints(app, "/api", [
|
|
25
|
+
* defineEndpoint({
|
|
26
|
+
* method: "GET",
|
|
27
|
+
* path: "/users",
|
|
28
|
+
* querySchema: z.object({ limit: z.coerce.number() }),
|
|
29
|
+
* handler: async (req) => ({ users: [] }),
|
|
30
|
+
* }),
|
|
31
|
+
* ]);
|
|
32
|
+
* ```
|
|
33
|
+
*/
|
|
34
|
+
export declare function registerCustomEndpoints(app: FastifyInstance, basePath: string, endpoints: CustomEndpointDefinition[], options?: RegisterCustomEndpointsOptions): void;
|
|
35
|
+
//# sourceMappingURL=endpointRegistration.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"endpointRegistration.d.ts","sourceRoot":"","sources":["../../src/http/endpointRegistration.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,cAAc,EAAgB,MAAM,SAAS,CAAC;AAG7E,OAAO,KAAK,EACV,wBAAwB,EAGzB,MAAM,sBAAsB,CAAC;AAE9B;;GAEG;AACH,MAAM,WAAW,8BAA8B;IAC7C;;;OAGG;IACH,gBAAgB,CAAC,EAAE,CACjB,GAAG,EAAE,cAAc,KAChB,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;CACzD;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,uBAAuB,CACrC,GAAG,EAAE,eAAe,EACpB,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,wBAAwB,EAAE,EACrC,OAAO,CAAC,EAAE,8BAA8B,GACvC,IAAI,CAgIN"}
|
package/dist/index.d.ts
CHANGED
|
@@ -2,4 +2,6 @@ export { createMcpServer } from './server/createMcpServer.js';
|
|
|
2
2
|
export type { CreateMcpServerOptions } from './server/createMcpServer.js';
|
|
3
3
|
export { createPermissionBasedMcpServer } from './server/createPermissionBasedMcpServer.js';
|
|
4
4
|
export type { ToolSetCatalog, ToolSetDefinition, McpToolDefinition, ExposurePolicy, Mode, ModuleLoader, PermissionConfig, CreatePermissionBasedMcpServerOptions, } from './types/index.js';
|
|
5
|
+
export type { CustomEndpointDefinition, CustomEndpointRequest, PermissionAwareEndpointRequest, CustomEndpointHandler, PermissionAwareEndpointHandler, HttpMethod, EndpointErrorResponse, } from './http/customEndpoints.js';
|
|
6
|
+
export { defineEndpoint, definePermissionAwareEndpoint, } from './http/customEndpoints.js';
|
|
5
7
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAC9D,YAAY,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAC;AAG1E,OAAO,EAAE,8BAA8B,EAAE,MAAM,4CAA4C,CAAC;AAG5F,YAAY,EACV,cAAc,EACd,iBAAiB,EACjB,iBAAiB,EACjB,cAAc,EACd,IAAI,EACJ,YAAY,EACZ,gBAAgB,EAChB,qCAAqC,GACtC,MAAM,kBAAkB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAC9D,YAAY,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAC;AAG1E,OAAO,EAAE,8BAA8B,EAAE,MAAM,4CAA4C,CAAC;AAG5F,YAAY,EACV,cAAc,EACd,iBAAiB,EACjB,iBAAiB,EACjB,cAAc,EACd,IAAI,EACJ,YAAY,EACZ,gBAAgB,EAChB,qCAAqC,GACtC,MAAM,kBAAkB,CAAC;AAG1B,YAAY,EACV,wBAAwB,EACxB,qBAAqB,EACrB,8BAA8B,EAC9B,qBAAqB,EACrB,8BAA8B,EAC9B,UAAU,EACV,qBAAqB,GACtB,MAAM,2BAA2B,CAAC;AAEnC,OAAO,EACL,cAAc,EACd,6BAA6B,GAC9B,MAAM,2BAA2B,CAAC"}
|