@metorial/mcp-server 1.0.0-rc.1

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/dist/index.cjs ADDED
@@ -0,0 +1,397 @@
1
+ "use strict";
2
+ var __create = Object.create;
3
+ var __defProp = Object.defineProperty;
4
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
+ var __getOwnPropNames = Object.getOwnPropertyNames;
6
+ var __getProtoOf = Object.getPrototypeOf;
7
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
8
+ var __export = (target, all) => {
9
+ for (var name in all)
10
+ __defProp(target, name, { get: all[name], enumerable: true });
11
+ };
12
+ var __copyProps = (to, from, except, desc) => {
13
+ if (from && typeof from === "object" || typeof from === "function") {
14
+ for (let key of __getOwnPropNames(from))
15
+ if (!__hasOwnProp.call(to, key) && key !== except)
16
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
17
+ }
18
+ return to;
19
+ };
20
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
21
+ // If the importer is in node compatibility mode or this is not an ESM
22
+ // file that has been converted to a CommonJS file using a Babel-
23
+ // compatible transform (i.e. "__esModule" has not been set), then set
24
+ // "default" to the CommonJS "module.exports" for node compatibility.
25
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
26
+ mod
27
+ ));
28
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
29
+
30
+ // src/index.ts
31
+ var index_exports = {};
32
+ __export(index_exports, {
33
+ auth: () => auth,
34
+ clientAdapter: () => clientAdapter,
35
+ config: () => config,
36
+ createAuth: () => createAuth,
37
+ createConfig: () => createConfig,
38
+ createMcpServer: () => createMcpServer,
39
+ serverAdapter: () => serverAdapter
40
+ });
41
+ module.exports = __toCommonJS(index_exports);
42
+
43
+ // src/instance.ts
44
+ var import_mcp = require("@metorial/mcp");
45
+
46
+ // src/auth.ts
47
+ var import_zod = __toESM(require("zod"), 1);
48
+ var McpServerAuthConfig = class _McpServerAuthConfig {
49
+ constructor(schema) {
50
+ this.schema = schema;
51
+ }
52
+ #value = null;
53
+ #getAuthUrlHandler;
54
+ #callbackHandler;
55
+ #tokenRefreshHandler;
56
+ static create(schema) {
57
+ return new _McpServerAuthConfig(schema ?? import_zod.default.object({}));
58
+ }
59
+ static getImplementation(config2) {
60
+ if (!config2.#getAuthUrlHandler || !config2.#callbackHandler) {
61
+ throw new Error("MCP Server auth config is missing required handlers");
62
+ }
63
+ return {
64
+ getAuthUrlHandler: config2.#getAuthUrlHandler,
65
+ callbackHandler: config2.#callbackHandler,
66
+ tokenRefreshHandler: config2.#tokenRefreshHandler
67
+ };
68
+ }
69
+ setValue(value) {
70
+ this.#value = value;
71
+ }
72
+ getAuthorizationUrl(cb) {
73
+ this.#getAuthUrlHandler = async (d) => {
74
+ let res = await cb(d);
75
+ if (typeof res == "string") {
76
+ return { authorizationUrl: res };
77
+ }
78
+ return res;
79
+ };
80
+ return this;
81
+ }
82
+ handleCallback(cb) {
83
+ this.#callbackHandler = cb;
84
+ return this;
85
+ }
86
+ refreshToken(cb) {
87
+ this.#tokenRefreshHandler = cb;
88
+ return this;
89
+ }
90
+ build() {
91
+ if (!this.#getAuthUrlHandler || !this.#callbackHandler) {
92
+ throw new Error("MCP Server auth config is missing required handlers");
93
+ }
94
+ let self = this;
95
+ return new Proxy(
96
+ {},
97
+ {
98
+ get: (target, prop, receiver) => {
99
+ if (prop == "__config__") {
100
+ return self;
101
+ }
102
+ if (self.#value === null) {
103
+ throw new Error("MCP Server auth config value not set");
104
+ }
105
+ return self.#value[prop];
106
+ }
107
+ }
108
+ );
109
+ }
110
+ };
111
+ var createAuth = (schema) => {
112
+ return McpServerAuthConfig.create(schema);
113
+ };
114
+ var auth = (schema) => createAuth(schema);
115
+ var getAuthConfigImplementation = (configValue) => {
116
+ let self = configValue["__config__"];
117
+ return McpServerAuthConfig.getImplementation(self);
118
+ };
119
+
120
+ // src/client.ts
121
+ var import_mcp_transport_memory = require("@metorial/mcp-transport-memory");
122
+ var import_client = require("@modelcontextprotocol/sdk/client/index.js");
123
+ var import_zod2 = __toESM(require("zod"), 1);
124
+ var getClient = async (server, notificationListener, opts) => {
125
+ let transport = (0, import_mcp_transport_memory.createInMemoryTransport)();
126
+ await server.connect(transport.server);
127
+ let client = new import_client.Client(opts.client);
128
+ client.registerCapabilities(opts.capabilities);
129
+ client.fallbackNotificationHandler = notificationListener;
130
+ await client.connect(transport.client);
131
+ return client;
132
+ };
133
+ var handleMcpMessages = async (server, opts, messages) => {
134
+ let responses = [];
135
+ let client = await getClient(
136
+ server,
137
+ async (notification) => {
138
+ responses.push(notification);
139
+ },
140
+ opts
141
+ );
142
+ let error = null;
143
+ for (let message of messages) {
144
+ try {
145
+ if ("id" in message) {
146
+ let res = await client.request(message, import_zod2.default.any());
147
+ responses.push(res);
148
+ } else {
149
+ await client.notification(message);
150
+ }
151
+ } catch (err) {
152
+ error = err;
153
+ break;
154
+ }
155
+ }
156
+ return { messages: responses, error };
157
+ };
158
+
159
+ // src/config.ts
160
+ var McpServerConfig = class _McpServerConfig {
161
+ constructor(schema) {
162
+ this.schema = schema;
163
+ }
164
+ #value = null;
165
+ static create(schema) {
166
+ return new _McpServerConfig(schema);
167
+ }
168
+ setValue(value) {
169
+ let parsed = this.schema.parse(value);
170
+ this.#value = parsed;
171
+ }
172
+ value() {
173
+ let self = this;
174
+ return new Proxy(
175
+ {},
176
+ {
177
+ get: (target, prop, receiver) => {
178
+ if (prop == "__config__") {
179
+ return self;
180
+ }
181
+ if (self.#value === null) {
182
+ throw new Error("MCP Server config value not set");
183
+ }
184
+ return self.#value[prop];
185
+ }
186
+ }
187
+ );
188
+ }
189
+ };
190
+ var createConfig = (schema) => {
191
+ return McpServerConfig.create(schema).value();
192
+ };
193
+ var config = (schema) => createConfig(schema);
194
+ var setConfigValue = (configValue, value) => {
195
+ let self = configValue["__config__"];
196
+ self.setValue(value);
197
+ };
198
+ var getConfigSchema = (configValue) => {
199
+ let self = configValue["__config__"];
200
+ return self.schema.toJSONSchema({
201
+ unrepresentable: "any",
202
+ override: (ctx) => {
203
+ let def = ctx.zodSchema._zod.def;
204
+ if (def.type === "date") {
205
+ ctx.jsonSchema.type = "string";
206
+ ctx.jsonSchema.format = "date-time";
207
+ }
208
+ if (def.type === "bigint") {
209
+ ctx.jsonSchema.type = "number";
210
+ }
211
+ }
212
+ });
213
+ };
214
+
215
+ // src/instance.ts
216
+ var getServer = (instance) => {
217
+ if ("server" in instance) {
218
+ return instance.server;
219
+ } else {
220
+ return (0, import_mcp.createMcpServer)(instance);
221
+ }
222
+ };
223
+ var McpServerInstance = class _McpServerInstance {
224
+ constructor(instance) {
225
+ this.instance = instance;
226
+ this.#server = getServer(instance);
227
+ }
228
+ #server;
229
+ static create(instance) {
230
+ return new _McpServerInstance(instance);
231
+ }
232
+ discover() {
233
+ return {
234
+ configSchema: this.instance.config ? getConfigSchema(this.instance.config) : null,
235
+ oauth: this.instance.authConfig ? {
236
+ status: "enabled",
237
+ hasTokenRefresh: !!getAuthConfigImplementation(this.instance.authConfig).tokenRefreshHandler
238
+ } : {
239
+ status: "disabled"
240
+ }
241
+ };
242
+ }
243
+ handleMcpMessages(opts) {
244
+ setConfigValue(this.instance.config, opts.config);
245
+ return handleMcpMessages(this.#server, opts.client, opts.message);
246
+ }
247
+ getOauthAuthorizationUrl(d) {
248
+ if (!this.instance.authConfig) return null;
249
+ let impl = getAuthConfigImplementation(this.instance.authConfig);
250
+ return impl.getAuthUrlHandler(d);
251
+ }
252
+ handleOauthCallback(d) {
253
+ if (!this.instance.authConfig) return null;
254
+ let impl = getAuthConfigImplementation(this.instance.authConfig);
255
+ return impl.callbackHandler(d);
256
+ }
257
+ handleOauthTokenRefresh(d) {
258
+ if (!this.instance.authConfig) return null;
259
+ let impl = getAuthConfigImplementation(this.instance.authConfig);
260
+ if (!impl.tokenRefreshHandler) {
261
+ return null;
262
+ }
263
+ return impl.tokenRefreshHandler(d);
264
+ }
265
+ };
266
+ var createMcpServer = (instance) => {
267
+ return McpServerInstance.create(instance);
268
+ };
269
+
270
+ // src/adapter.ts
271
+ var import_zod3 = __toESM(require("zod"), 1);
272
+ var discoverMessage = import_zod3.default.object({
273
+ type: import_zod3.default.literal("metorial-mcp.discover")
274
+ });
275
+ var authUrlMessage = import_zod3.default.object({
276
+ type: import_zod3.default.literal("metorial-mcp.get-oauth-authorization-url"),
277
+ params: import_zod3.default.object({
278
+ authConfig: import_zod3.default.record(import_zod3.default.string(), import_zod3.default.any()),
279
+ clientId: import_zod3.default.string(),
280
+ clientSecret: import_zod3.default.string(),
281
+ state: import_zod3.default.string(),
282
+ redirectUri: import_zod3.default.string()
283
+ })
284
+ });
285
+ var oauthCallbackMessage = import_zod3.default.object({
286
+ type: import_zod3.default.literal("metorial-mcp.handle-oauth-callback"),
287
+ params: import_zod3.default.object({
288
+ authConfig: import_zod3.default.record(import_zod3.default.string(), import_zod3.default.any()),
289
+ authState: import_zod3.default.record(import_zod3.default.string(), import_zod3.default.string()),
290
+ clientId: import_zod3.default.string(),
291
+ clientSecret: import_zod3.default.string(),
292
+ code: import_zod3.default.string(),
293
+ state: import_zod3.default.string(),
294
+ redirectUri: import_zod3.default.string(),
295
+ callbackUrl: import_zod3.default.string(),
296
+ authorizationUrl: import_zod3.default.string()
297
+ })
298
+ });
299
+ var oauthTokenRefreshMessage = import_zod3.default.object({
300
+ type: import_zod3.default.literal("metorial-mcp.handle-oauth-token-refresh"),
301
+ params: import_zod3.default.object({
302
+ authConfig: import_zod3.default.record(import_zod3.default.string(), import_zod3.default.any()),
303
+ authState: import_zod3.default.record(import_zod3.default.string(), import_zod3.default.string()),
304
+ refreshToken: import_zod3.default.string(),
305
+ clientId: import_zod3.default.string(),
306
+ clientSecret: import_zod3.default.string()
307
+ })
308
+ });
309
+ var allMessages = import_zod3.default.union([
310
+ discoverMessage,
311
+ authUrlMessage,
312
+ oauthCallbackMessage,
313
+ oauthTokenRefreshMessage
314
+ ]);
315
+ var serverAdapter = async (instance, messages) => Promise.all(
316
+ messages.map(async (message) => {
317
+ let parsed = allMessages.parse(message);
318
+ switch (parsed.type) {
319
+ case "metorial-mcp.discover": {
320
+ return instance.discover();
321
+ }
322
+ case "metorial-mcp.get-oauth-authorization-url": {
323
+ return instance.getOauthAuthorizationUrl(parsed.params);
324
+ }
325
+ case "metorial-mcp.handle-oauth-callback": {
326
+ return instance.handleOauthCallback(parsed.params);
327
+ }
328
+ case "metorial-mcp.handle-oauth-token-refresh": {
329
+ return instance.handleOauthTokenRefresh(parsed.params);
330
+ }
331
+ }
332
+ throw new Error(`Unknown message type: ${message.type}`);
333
+ })
334
+ );
335
+ var clientAdapter = (transport) => {
336
+ let queue = [];
337
+ let isSent = { current: false };
338
+ let isSending = { current: false };
339
+ let send = async (message) => {
340
+ let promise = new Promise((resolve, reject) => {
341
+ queue.push({ msg: message, resolve, reject });
342
+ });
343
+ if (!isSending.current) {
344
+ isSending.current = true;
345
+ setTimeout(async () => {
346
+ isSent.current = true;
347
+ try {
348
+ let res = await transport(queue.map((q) => q.msg));
349
+ res.forEach((r, i) => {
350
+ queue[i].resolve(r);
351
+ });
352
+ } catch (err) {
353
+ queue.forEach((q) => {
354
+ q.reject(err);
355
+ });
356
+ } finally {
357
+ queue = [];
358
+ }
359
+ }, 2);
360
+ }
361
+ return promise;
362
+ };
363
+ return {
364
+ discover: async () => {
365
+ return send({ type: "metorial-mcp.discover" });
366
+ },
367
+ getOauthAuthorizationUrl: async (d) => {
368
+ return send({
369
+ type: "metorial-mcp.get-oauth-authorization-url",
370
+ params: d
371
+ });
372
+ },
373
+ handleOauthCallback: async (d) => {
374
+ return send({
375
+ type: "metorial-mcp.handle-oauth-callback",
376
+ params: d
377
+ });
378
+ },
379
+ handleOauthTokenRefresh: async (d) => {
380
+ return send({
381
+ type: "metorial-mcp.handle-oauth-token-refresh",
382
+ params: d
383
+ });
384
+ }
385
+ };
386
+ };
387
+ // Annotate the CommonJS export names for ESM import in node:
388
+ 0 && (module.exports = {
389
+ auth,
390
+ clientAdapter,
391
+ config,
392
+ createAuth,
393
+ createConfig,
394
+ createMcpServer,
395
+ serverAdapter
396
+ });
397
+ //# sourceMappingURL=index.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/index.ts","../src/instance.ts","../src/auth.ts","../src/client.ts","../src/config.ts","../src/adapter.ts"],"sourcesContent":["export {\n createMcpServer,\n type McpServerInstance,\n type McpServerInstanceOpts,\n type McpServerInstanceServer\n} from './instance';\n\nexport {\n clientAdapter,\n serverAdapter,\n type McpServerInstanceAdapterResponses,\n type McpServerInstanceMessage\n} from './adapter';\n\nexport {\n auth,\n createAuth,\n type McpServerAuthCallbackHandler,\n type McpServerAuthCallbackHandlerParams,\n type McpServerAuthCallbackHandlerResult,\n type McpServerAuthConfig,\n type McpServerAuthTokenRefreshHandler,\n type McpServerAuthTokenRefreshHandlerParams,\n type McpServerAuthTokenRefreshHandlerResult,\n type McpServerAuthUrlHandler,\n type McpServerAuthUrlHandlerInternal,\n type McpServerAuthUrlHandlerParams,\n type McpServerAuthUrlHandlerResult,\n type McpServerAuthValue\n} from './auth';\n\nexport { config, createConfig, type McpServerConfig } from './config';\n","import {\n createMcpServer as createMcpServerInternal,\n CreateMcpServerOpts\n} from '@metorial/mcp';\nimport { McpServer } from '@modelcontextprotocol/sdk/server/mcp';\nimport { JSONRPCMessage } from '@modelcontextprotocol/sdk/types';\nimport {\n getAuthConfigImplementation,\n McpServerAuthCallbackHandlerParams,\n McpServerAuthTokenRefreshHandlerParams,\n McpServerAuthUrlHandlerParams\n} from './auth';\nimport { ClientOpts, handleMcpMessages } from './client';\nimport { getConfigSchema, setConfigValue } from './config';\n\nexport type McpServerInstanceServer = CreateMcpServerOpts | { server: McpServer };\nlet getServer = (instance: McpServerInstanceServer) => {\n if ('server' in instance) {\n return instance.server;\n } else {\n return createMcpServerInternal(instance);\n }\n};\n\nexport type McpServerInstanceOpts = McpServerInstanceServer & {\n config?: any;\n authConfig?: any;\n};\n\nexport class McpServerInstance {\n #server: McpServer;\n\n private constructor(private instance: McpServerInstanceOpts) {\n this.#server = getServer(instance);\n }\n\n static create(instance: McpServerInstanceOpts) {\n return new McpServerInstance(instance);\n }\n\n discover() {\n return {\n configSchema: this.instance.config ? getConfigSchema(this.instance.config) : null,\n oauth: this.instance.authConfig\n ? {\n status: 'enabled' as const,\n hasTokenRefresh: !!getAuthConfigImplementation(this.instance.authConfig)\n .tokenRefreshHandler\n }\n : {\n status: 'disabled' as const\n }\n };\n }\n\n handleMcpMessages(opts: { config: any; client: ClientOpts; message: JSONRPCMessage[] }) {\n setConfigValue(this.instance.config, opts.config);\n\n return handleMcpMessages(this.#server, opts.client, opts.message);\n }\n\n getOauthAuthorizationUrl(d: McpServerAuthUrlHandlerParams<any>) {\n if (!this.instance.authConfig) return null;\n let impl = getAuthConfigImplementation(this.instance.authConfig);\n\n return impl.getAuthUrlHandler(d);\n }\n\n handleOauthCallback(d: McpServerAuthCallbackHandlerParams<any>) {\n if (!this.instance.authConfig) return null;\n let impl = getAuthConfigImplementation(this.instance.authConfig);\n\n return impl.callbackHandler(d);\n }\n\n handleOauthTokenRefresh(d: McpServerAuthTokenRefreshHandlerParams<any>) {\n if (!this.instance.authConfig) return null;\n let impl = getAuthConfigImplementation(this.instance.authConfig);\n\n if (!impl.tokenRefreshHandler) {\n return null;\n }\n\n return impl.tokenRefreshHandler(d);\n }\n}\n\nexport let createMcpServer = (instance: McpServerInstanceOpts) => {\n return McpServerInstance.create(instance);\n};\n","import z from 'zod';\n\nexport type McpServerAuthUrlHandlerParams<AuthConfig extends {}> = {\n authConfig: AuthConfig;\n clientId: string;\n clientSecret: string;\n state: string;\n redirectUri: string;\n};\n\nexport type McpServerAuthUrlHandlerResult = {\n authorizationUrl: string;\n authState?: Record<string, string> | null;\n};\n\nexport type McpServerAuthUrlHandlerInternal = <AuthConfig extends {}>(\n d: McpServerAuthUrlHandlerParams<AuthConfig>\n) => Promise<McpServerAuthUrlHandlerResult>;\n\nexport type McpServerAuthUrlHandler = <AuthConfig extends {}>(\n d: McpServerAuthUrlHandlerParams<AuthConfig>\n) => Promise<string | McpServerAuthUrlHandlerResult>;\n\nexport type McpServerAuthCallbackHandlerParams<AuthConfig extends {}> = {\n authConfig: AuthConfig;\n authState: Record<string, string>;\n clientId: string;\n clientSecret: string;\n code: string;\n state: string;\n redirectUri: string;\n callbackUrl: string;\n authorizationUrl: string;\n};\n\nexport type McpServerAuthCallbackHandlerResult = {\n accessToken: string;\n refreshToken?: string;\n expiresIn?: number;\n scope?: string;\n tokenType?: string;\n [key: string]: any;\n};\n\nexport type McpServerAuthCallbackHandler = <AuthConfig extends {}>(\n d: McpServerAuthCallbackHandlerParams<AuthConfig>\n) => Promise<McpServerAuthCallbackHandlerResult>;\n\nexport type McpServerAuthTokenRefreshHandlerParams<AuthConfig extends {}> = {\n authConfig: AuthConfig;\n authState: Record<string, string>;\n refreshToken: string;\n clientId: string;\n clientSecret: string;\n};\n\nexport type McpServerAuthTokenRefreshHandlerResult = {\n accessToken: string;\n refreshToken?: string;\n expiresIn?: number;\n scope?: string;\n tokenType?: string;\n [key: string]: any;\n};\n\nexport type McpServerAuthTokenRefreshHandler = <AuthConfig extends {}>(\n d: McpServerAuthTokenRefreshHandlerParams<AuthConfig>\n) => Promise<McpServerAuthTokenRefreshHandlerResult>;\n\nexport type McpServerAuthValue = {\n accessToken: string;\n expiresIn?: number;\n scope?: string;\n tokenType?: string;\n [key: string]: any;\n};\n\nexport class McpServerAuthConfig<AuthConfig extends {}> {\n #value: McpServerAuthValue | null = null;\n\n #getAuthUrlHandler?: McpServerAuthUrlHandlerInternal;\n #callbackHandler?: McpServerAuthCallbackHandler;\n #tokenRefreshHandler?: McpServerAuthTokenRefreshHandler;\n\n private constructor(private readonly schema: z.ZodType<AuthConfig>) {}\n\n static create<AuthConfig extends {}>(schema?: z.ZodType<AuthConfig>) {\n return new McpServerAuthConfig(schema ?? (z.object({}) as z.ZodType<AuthConfig>));\n }\n\n static getImplementation(config: McpServerAuthConfig<any>) {\n if (!config.#getAuthUrlHandler || !config.#callbackHandler) {\n throw new Error('MCP Server auth config is missing required handlers');\n }\n\n return {\n getAuthUrlHandler: config.#getAuthUrlHandler,\n callbackHandler: config.#callbackHandler,\n tokenRefreshHandler: config.#tokenRefreshHandler\n };\n }\n\n setValue(value: McpServerAuthValue) {\n this.#value = value;\n }\n\n getAuthorizationUrl(cb: McpServerAuthUrlHandler) {\n this.#getAuthUrlHandler = async d => {\n let res = await cb(d);\n if (typeof res == 'string') {\n return { authorizationUrl: res };\n }\n return res;\n };\n return this;\n }\n\n handleCallback(cb: McpServerAuthCallbackHandler) {\n this.#callbackHandler = cb;\n return this;\n }\n\n refreshToken(cb: McpServerAuthTokenRefreshHandler) {\n this.#tokenRefreshHandler = cb;\n return this;\n }\n\n build(): AuthConfig {\n if (!this.#getAuthUrlHandler || !this.#callbackHandler) {\n throw new Error('MCP Server auth config is missing required handlers');\n }\n\n let self = this;\n\n // Proxy for getting the config values\n // or throwing an error if not set\n return new Proxy(\n {},\n {\n get: (target, prop, receiver) => {\n if (prop == '__config__') {\n return self;\n }\n\n if (self.#value === null) {\n throw new Error('MCP Server auth config value not set');\n }\n\n return (self.#value as any)[prop];\n }\n }\n ) as any as AuthConfig;\n }\n}\n\nexport let createAuth = <Config extends {}>(schema?: z.ZodType<Config>) => {\n return McpServerAuthConfig.create(schema);\n};\n\nexport let auth = <Config extends {}>(schema?: z.ZodType<Config>) => createAuth(schema);\n\nexport let getAuthConfigImplementation = <Config extends {}>(configValue: any) => {\n let self = configValue['__config__'] as McpServerAuthConfig<Config>;\n return McpServerAuthConfig.getImplementation(self);\n};\n","import { createInMemoryTransport } from '@metorial/mcp-transport-memory';\nimport { Client } from '@modelcontextprotocol/sdk/client/index.js';\nimport { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\nimport {\n ClientCapabilities,\n JSONRPCMessage,\n Notification\n} from '@modelcontextprotocol/sdk/types.js';\nimport z from 'zod';\n\nexport interface ClientOpts {\n client: {\n name: string;\n version: string;\n };\n capabilities: ClientCapabilities;\n}\n\nexport let getClient = async (\n server: McpServer,\n notificationListener: (notification: Notification) => Promise<void>,\n opts: ClientOpts\n) => {\n let transport = createInMemoryTransport();\n await server.connect(transport.server);\n\n let client = new Client(opts.client);\n\n client.registerCapabilities(opts.capabilities);\n client.fallbackNotificationHandler = notificationListener;\n\n await client.connect(transport.client);\n\n return client;\n};\n\nexport let handleMcpMessages = async (\n server: McpServer,\n opts: ClientOpts,\n messages: JSONRPCMessage[]\n) => {\n let responses: JSONRPCMessage[] = [];\n\n let client = await getClient(\n server,\n async notification => {\n responses.push(notification as JSONRPCMessage);\n },\n opts\n );\n\n let error: Error | null = null;\n\n for (let message of messages) {\n try {\n if ('id' in message) {\n let res = await client.request(message as any, z.any());\n responses.push(res);\n } else {\n await client.notification(message as any);\n }\n } catch (err) {\n error = err as Error;\n break;\n }\n }\n\n return { messages: responses, error };\n};\n","import z from 'zod';\n\nexport class McpServerConfig<Config extends {}> {\n #value: Config | null = null;\n\n private constructor(public readonly schema: z.ZodType<Config>) {}\n\n static create<Config extends {}>(schema: z.ZodType<Config>) {\n return new McpServerConfig(schema);\n }\n\n setValue(value: unknown) {\n let parsed = this.schema.parse(value);\n this.#value = parsed;\n }\n\n value(): Config {\n let self = this;\n\n // Proxy for getting the config values\n // or throwing an error if not set\n return new Proxy(\n {},\n {\n get: (target, prop, receiver) => {\n if (prop == '__config__') {\n return self;\n }\n\n if (self.#value === null) {\n throw new Error('MCP Server config value not set');\n }\n\n return (self.#value as any)[prop];\n }\n }\n ) as any as Config;\n }\n}\n\nexport let createConfig = <Config extends {}>(schema: z.ZodType<Config>) => {\n return McpServerConfig.create(schema).value();\n};\n\nexport let config = <Config extends {}>(schema: z.ZodType<Config>) => createConfig(schema);\n\nexport let setConfigValue = <Config extends {}>(configValue: any, value: Config) => {\n let self = configValue['__config__'] as McpServerConfig<Config>;\n self.setValue(value);\n};\n\nexport let getConfigSchema = <Config extends {}>(configValue: any) => {\n let self = configValue['__config__'] as McpServerConfig<Config>;\n return self.schema.toJSONSchema({\n unrepresentable: 'any',\n override: ctx => {\n let def = ctx.zodSchema._zod.def;\n\n if (def.type === 'date') {\n ctx.jsonSchema.type = 'string';\n ctx.jsonSchema.format = 'date-time';\n }\n if (def.type === 'bigint') {\n ctx.jsonSchema.type = 'number';\n }\n }\n });\n};\n","import z from 'zod';\nimport { McpServerInstance } from './instance';\n\nlet discoverMessage = z.object({\n type: z.literal('metorial-mcp.discover')\n});\ntype DiscoverMessage = z.infer<typeof discoverMessage>;\n\nlet authUrlMessage = z.object({\n type: z.literal('metorial-mcp.get-oauth-authorization-url'),\n params: z.object({\n authConfig: z.record(z.string(), z.any()),\n clientId: z.string(),\n clientSecret: z.string(),\n state: z.string(),\n redirectUri: z.string()\n })\n});\ntype AuthUrlMessage = z.infer<typeof authUrlMessage>;\n\nlet oauthCallbackMessage = z.object({\n type: z.literal('metorial-mcp.handle-oauth-callback'),\n params: z.object({\n authConfig: z.record(z.string(), z.any()),\n authState: z.record(z.string(), z.string()),\n clientId: z.string(),\n clientSecret: z.string(),\n code: z.string(),\n state: z.string(),\n redirectUri: z.string(),\n callbackUrl: z.string(),\n authorizationUrl: z.string()\n })\n});\ntype OauthCallbackMessage = z.infer<typeof oauthCallbackMessage>;\n\nlet oauthTokenRefreshMessage = z.object({\n type: z.literal('metorial-mcp.handle-oauth-token-refresh'),\n params: z.object({\n authConfig: z.record(z.string(), z.any()),\n authState: z.record(z.string(), z.string()),\n refreshToken: z.string(),\n clientId: z.string(),\n clientSecret: z.string()\n })\n});\ntype OauthTokenRefreshMessage = z.infer<typeof oauthTokenRefreshMessage>;\n\nlet allMessages = z.union([\n discoverMessage,\n authUrlMessage,\n oauthCallbackMessage,\n oauthTokenRefreshMessage\n]);\n\nexport type McpServerInstanceMessage =\n | DiscoverMessage\n | AuthUrlMessage\n | OauthCallbackMessage\n | OauthTokenRefreshMessage;\n\nexport let serverAdapter = async (\n instance: McpServerInstance,\n messages: McpServerInstanceMessage[]\n) =>\n Promise.all(\n messages.map(async message => {\n let parsed = allMessages.parse(message);\n\n switch (parsed.type) {\n case 'metorial-mcp.discover': {\n return instance.discover();\n }\n case 'metorial-mcp.get-oauth-authorization-url': {\n return instance.getOauthAuthorizationUrl(parsed.params);\n }\n case 'metorial-mcp.handle-oauth-callback': {\n return instance.handleOauthCallback(parsed.params);\n }\n case 'metorial-mcp.handle-oauth-token-refresh': {\n return instance.handleOauthTokenRefresh(parsed.params);\n }\n }\n\n throw new Error(`Unknown message type: ${(message as any).type}`);\n })\n );\n\nexport type McpServerInstanceAdapterResponses = Awaited<ReturnType<typeof serverAdapter>>;\n\nexport let clientAdapter = (\n transport: (\n messages: McpServerInstanceMessage[]\n ) => Promise<McpServerInstanceAdapterResponses>\n) => {\n let queue: {\n msg: McpServerInstanceMessage;\n resolve: (res: any) => void;\n reject: (err: any) => void;\n }[] = [];\n let isSent = { current: false };\n let isSending = { current: false };\n\n let send = async (message: McpServerInstanceMessage) => {\n let promise = new Promise<any>((resolve, reject) => {\n queue.push({ msg: message, resolve, reject });\n });\n\n if (!isSending.current) {\n isSending.current = true;\n\n setTimeout(async () => {\n isSent.current = true;\n\n try {\n let res = await transport(queue.map(q => q.msg));\n res.forEach((r, i) => {\n queue[i].resolve(r);\n });\n } catch (err) {\n queue.forEach(q => {\n q.reject(err);\n });\n } finally {\n queue = [];\n }\n }, 2);\n }\n\n return promise;\n };\n\n return {\n discover: async () => {\n return send({ type: 'metorial-mcp.discover' }) as Promise<\n Awaited<ReturnType<McpServerInstance['discover']>>\n >;\n },\n\n getOauthAuthorizationUrl: async (\n d: Parameters<McpServerInstance['getOauthAuthorizationUrl']>[0]\n ) => {\n return send({\n type: 'metorial-mcp.get-oauth-authorization-url',\n params: d\n }) as Promise<Awaited<ReturnType<McpServerInstance['getOauthAuthorizationUrl']>>>;\n },\n\n handleOauthCallback: async (\n d: Parameters<McpServerInstance['handleOauthCallback']>[0]\n ) => {\n return send({\n type: 'metorial-mcp.handle-oauth-callback',\n params: d\n }) as Promise<Awaited<ReturnType<McpServerInstance['handleOauthCallback']>>>;\n },\n\n handleOauthTokenRefresh: async (\n d: Parameters<McpServerInstance['handleOauthTokenRefresh']>[0]\n ) => {\n return send({\n type: 'metorial-mcp.handle-oauth-token-refresh',\n params: d\n }) as Promise<Awaited<ReturnType<McpServerInstance['handleOauthTokenRefresh']>>>;\n }\n };\n};\n"],"mappings":"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","names":["z","config","import_zod","z","createMcpServerInternal","import_zod","z"]}
@@ -0,0 +1,208 @@
1
+ import * as z from 'zod';
2
+ import z__default from 'zod';
3
+ import * as zod_v4_core from 'zod/v4/core';
4
+ import { CreateMcpServerOpts } from '@metorial/mcp';
5
+ import { McpServer } from '@modelcontextprotocol/sdk/server/mcp';
6
+ import { JSONRPCMessage } from '@modelcontextprotocol/sdk/types';
7
+ import { ClientCapabilities } from '@modelcontextprotocol/sdk/types.js';
8
+
9
+ type McpServerAuthUrlHandlerParams<AuthConfig extends {}> = {
10
+ authConfig: AuthConfig;
11
+ clientId: string;
12
+ clientSecret: string;
13
+ state: string;
14
+ redirectUri: string;
15
+ };
16
+ type McpServerAuthUrlHandlerResult = {
17
+ authorizationUrl: string;
18
+ authState?: Record<string, string> | null;
19
+ };
20
+ type McpServerAuthUrlHandlerInternal = <AuthConfig extends {}>(d: McpServerAuthUrlHandlerParams<AuthConfig>) => Promise<McpServerAuthUrlHandlerResult>;
21
+ type McpServerAuthUrlHandler = <AuthConfig extends {}>(d: McpServerAuthUrlHandlerParams<AuthConfig>) => Promise<string | McpServerAuthUrlHandlerResult>;
22
+ type McpServerAuthCallbackHandlerParams<AuthConfig extends {}> = {
23
+ authConfig: AuthConfig;
24
+ authState: Record<string, string>;
25
+ clientId: string;
26
+ clientSecret: string;
27
+ code: string;
28
+ state: string;
29
+ redirectUri: string;
30
+ callbackUrl: string;
31
+ authorizationUrl: string;
32
+ };
33
+ type McpServerAuthCallbackHandlerResult = {
34
+ accessToken: string;
35
+ refreshToken?: string;
36
+ expiresIn?: number;
37
+ scope?: string;
38
+ tokenType?: string;
39
+ [key: string]: any;
40
+ };
41
+ type McpServerAuthCallbackHandler = <AuthConfig extends {}>(d: McpServerAuthCallbackHandlerParams<AuthConfig>) => Promise<McpServerAuthCallbackHandlerResult>;
42
+ type McpServerAuthTokenRefreshHandlerParams<AuthConfig extends {}> = {
43
+ authConfig: AuthConfig;
44
+ authState: Record<string, string>;
45
+ refreshToken: string;
46
+ clientId: string;
47
+ clientSecret: string;
48
+ };
49
+ type McpServerAuthTokenRefreshHandlerResult = {
50
+ accessToken: string;
51
+ refreshToken?: string;
52
+ expiresIn?: number;
53
+ scope?: string;
54
+ tokenType?: string;
55
+ [key: string]: any;
56
+ };
57
+ type McpServerAuthTokenRefreshHandler = <AuthConfig extends {}>(d: McpServerAuthTokenRefreshHandlerParams<AuthConfig>) => Promise<McpServerAuthTokenRefreshHandlerResult>;
58
+ type McpServerAuthValue = {
59
+ accessToken: string;
60
+ expiresIn?: number;
61
+ scope?: string;
62
+ tokenType?: string;
63
+ [key: string]: any;
64
+ };
65
+ declare class McpServerAuthConfig<AuthConfig extends {}> {
66
+ #private;
67
+ private readonly schema;
68
+ private constructor();
69
+ static create<AuthConfig extends {}>(schema?: z__default.ZodType<AuthConfig>): McpServerAuthConfig<AuthConfig>;
70
+ static getImplementation(config: McpServerAuthConfig<any>): {
71
+ getAuthUrlHandler: McpServerAuthUrlHandlerInternal;
72
+ callbackHandler: McpServerAuthCallbackHandler;
73
+ tokenRefreshHandler: McpServerAuthTokenRefreshHandler | undefined;
74
+ };
75
+ setValue(value: McpServerAuthValue): void;
76
+ getAuthorizationUrl(cb: McpServerAuthUrlHandler): this;
77
+ handleCallback(cb: McpServerAuthCallbackHandler): this;
78
+ refreshToken(cb: McpServerAuthTokenRefreshHandler): this;
79
+ build(): AuthConfig;
80
+ }
81
+ declare let createAuth: <Config extends {}>(schema?: z__default.ZodType<Config>) => McpServerAuthConfig<Config>;
82
+ declare let auth: <Config extends {}>(schema?: z__default.ZodType<Config>) => McpServerAuthConfig<Config>;
83
+
84
+ interface ClientOpts {
85
+ client: {
86
+ name: string;
87
+ version: string;
88
+ };
89
+ capabilities: ClientCapabilities;
90
+ }
91
+
92
+ type McpServerInstanceServer = CreateMcpServerOpts | {
93
+ server: McpServer;
94
+ };
95
+ type McpServerInstanceOpts = McpServerInstanceServer & {
96
+ config?: any;
97
+ authConfig?: any;
98
+ };
99
+ declare class McpServerInstance {
100
+ #private;
101
+ private instance;
102
+ private constructor();
103
+ static create(instance: McpServerInstanceOpts): McpServerInstance;
104
+ discover(): {
105
+ configSchema: zod_v4_core.ZodStandardJSONSchemaPayload<z.ZodType<{}, unknown, zod_v4_core.$ZodTypeInternals<{}, unknown>>> | null;
106
+ oauth: {
107
+ status: "enabled";
108
+ hasTokenRefresh: boolean;
109
+ } | {
110
+ status: "disabled";
111
+ hasTokenRefresh?: undefined;
112
+ };
113
+ };
114
+ handleMcpMessages(opts: {
115
+ config: any;
116
+ client: ClientOpts;
117
+ message: JSONRPCMessage[];
118
+ }): Promise<{
119
+ messages: JSONRPCMessage[];
120
+ error: Error | null;
121
+ }>;
122
+ getOauthAuthorizationUrl(d: McpServerAuthUrlHandlerParams<any>): Promise<McpServerAuthUrlHandlerResult> | null;
123
+ handleOauthCallback(d: McpServerAuthCallbackHandlerParams<any>): Promise<McpServerAuthCallbackHandlerResult> | null;
124
+ handleOauthTokenRefresh(d: McpServerAuthTokenRefreshHandlerParams<any>): Promise<McpServerAuthTokenRefreshHandlerResult> | null;
125
+ }
126
+ declare let createMcpServer: (instance: McpServerInstanceOpts) => McpServerInstance;
127
+
128
+ declare let discoverMessage: z__default.ZodObject<{
129
+ type: z__default.ZodLiteral<"metorial-mcp.discover">;
130
+ }, z__default.core.$strip>;
131
+ type DiscoverMessage = z__default.infer<typeof discoverMessage>;
132
+ declare let authUrlMessage: z__default.ZodObject<{
133
+ type: z__default.ZodLiteral<"metorial-mcp.get-oauth-authorization-url">;
134
+ params: z__default.ZodObject<{
135
+ authConfig: z__default.ZodRecord<z__default.ZodString, z__default.ZodAny>;
136
+ clientId: z__default.ZodString;
137
+ clientSecret: z__default.ZodString;
138
+ state: z__default.ZodString;
139
+ redirectUri: z__default.ZodString;
140
+ }, z__default.core.$strip>;
141
+ }, z__default.core.$strip>;
142
+ type AuthUrlMessage = z__default.infer<typeof authUrlMessage>;
143
+ declare let oauthCallbackMessage: z__default.ZodObject<{
144
+ type: z__default.ZodLiteral<"metorial-mcp.handle-oauth-callback">;
145
+ params: z__default.ZodObject<{
146
+ authConfig: z__default.ZodRecord<z__default.ZodString, z__default.ZodAny>;
147
+ authState: z__default.ZodRecord<z__default.ZodString, z__default.ZodString>;
148
+ clientId: z__default.ZodString;
149
+ clientSecret: z__default.ZodString;
150
+ code: z__default.ZodString;
151
+ state: z__default.ZodString;
152
+ redirectUri: z__default.ZodString;
153
+ callbackUrl: z__default.ZodString;
154
+ authorizationUrl: z__default.ZodString;
155
+ }, z__default.core.$strip>;
156
+ }, z__default.core.$strip>;
157
+ type OauthCallbackMessage = z__default.infer<typeof oauthCallbackMessage>;
158
+ declare let oauthTokenRefreshMessage: z__default.ZodObject<{
159
+ type: z__default.ZodLiteral<"metorial-mcp.handle-oauth-token-refresh">;
160
+ params: z__default.ZodObject<{
161
+ authConfig: z__default.ZodRecord<z__default.ZodString, z__default.ZodAny>;
162
+ authState: z__default.ZodRecord<z__default.ZodString, z__default.ZodString>;
163
+ refreshToken: z__default.ZodString;
164
+ clientId: z__default.ZodString;
165
+ clientSecret: z__default.ZodString;
166
+ }, z__default.core.$strip>;
167
+ }, z__default.core.$strip>;
168
+ type OauthTokenRefreshMessage = z__default.infer<typeof oauthTokenRefreshMessage>;
169
+ type McpServerInstanceMessage = DiscoverMessage | AuthUrlMessage | OauthCallbackMessage | OauthTokenRefreshMessage;
170
+ declare let serverAdapter: (instance: McpServerInstance, messages: McpServerInstanceMessage[]) => Promise<(McpServerAuthUrlHandlerResult | McpServerAuthCallbackHandlerResult | {
171
+ configSchema: z__default.core.ZodStandardJSONSchemaPayload<z__default.ZodType<{}, unknown, z__default.core.$ZodTypeInternals<{}, unknown>>> | null;
172
+ oauth: {
173
+ status: "enabled";
174
+ hasTokenRefresh: boolean;
175
+ } | {
176
+ status: "disabled";
177
+ hasTokenRefresh?: undefined;
178
+ };
179
+ } | null)[]>;
180
+ type McpServerInstanceAdapterResponses = Awaited<ReturnType<typeof serverAdapter>>;
181
+ declare let clientAdapter: (transport: (messages: McpServerInstanceMessage[]) => Promise<McpServerInstanceAdapterResponses>) => {
182
+ discover: () => Promise<{
183
+ configSchema: z__default.core.ZodStandardJSONSchemaPayload<z__default.ZodType<{}, unknown, z__default.core.$ZodTypeInternals<{}, unknown>>> | null;
184
+ oauth: {
185
+ status: "enabled";
186
+ hasTokenRefresh: boolean;
187
+ } | {
188
+ status: "disabled";
189
+ hasTokenRefresh?: undefined;
190
+ };
191
+ }>;
192
+ getOauthAuthorizationUrl: (d: Parameters<McpServerInstance["getOauthAuthorizationUrl"]>[0]) => Promise<McpServerAuthUrlHandlerResult | null>;
193
+ handleOauthCallback: (d: Parameters<McpServerInstance["handleOauthCallback"]>[0]) => Promise<McpServerAuthCallbackHandlerResult | null>;
194
+ handleOauthTokenRefresh: (d: Parameters<McpServerInstance["handleOauthTokenRefresh"]>[0]) => Promise<McpServerAuthTokenRefreshHandlerResult | null>;
195
+ };
196
+
197
+ declare class McpServerConfig<Config extends {}> {
198
+ #private;
199
+ readonly schema: z__default.ZodType<Config>;
200
+ private constructor();
201
+ static create<Config extends {}>(schema: z__default.ZodType<Config>): McpServerConfig<Config>;
202
+ setValue(value: unknown): void;
203
+ value(): Config;
204
+ }
205
+ declare let createConfig: <Config extends {}>(schema: z__default.ZodType<Config>) => Config;
206
+ declare let config: <Config extends {}>(schema: z__default.ZodType<Config>) => Config;
207
+
208
+ export { type McpServerAuthCallbackHandler, type McpServerAuthCallbackHandlerParams, type McpServerAuthCallbackHandlerResult, McpServerAuthConfig, type McpServerAuthTokenRefreshHandler, type McpServerAuthTokenRefreshHandlerParams, type McpServerAuthTokenRefreshHandlerResult, type McpServerAuthUrlHandler, type McpServerAuthUrlHandlerInternal, type McpServerAuthUrlHandlerParams, type McpServerAuthUrlHandlerResult, type McpServerAuthValue, McpServerConfig, McpServerInstance, type McpServerInstanceAdapterResponses, type McpServerInstanceMessage, type McpServerInstanceOpts, type McpServerInstanceServer, auth, clientAdapter, config, createAuth, createConfig, createMcpServer, serverAdapter };