@metorial/mcp-server 1.0.0-rc.4 → 1.0.0-rc.6

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 CHANGED
@@ -46,11 +46,14 @@ var import_mcp = require("@metorial/mcp");
46
46
 
47
47
  // src/auth.ts
48
48
  var import_zod = __toESM(require("zod"), 1);
49
+ var authConfigs = /* @__PURE__ */ new Set();
49
50
  var McpServerOAuthConfig = class _McpServerOAuthConfig {
50
51
  constructor(schema) {
51
52
  this.schema = schema;
53
+ authConfigs.add(this);
52
54
  }
53
55
  #value = null;
56
+ #isRegistered = false;
54
57
  #getAuthUrlHandler;
55
58
  #callbackHandler;
56
59
  #tokenRefreshHandler;
@@ -63,20 +66,26 @@ var McpServerOAuthConfig = class _McpServerOAuthConfig {
63
66
  if (handlers.refreshToken) {
64
67
  config2.refreshToken(handlers.refreshToken);
65
68
  }
66
- return config2;
69
+ return config2.build();
67
70
  }
68
71
  static getImplementation(config2) {
69
72
  if (!config2.#getAuthUrlHandler || !config2.#callbackHandler) {
70
73
  throw new Error("MCP Server auth config is missing required handlers");
71
74
  }
72
75
  return {
76
+ setValue: config2.setValue.bind(config2),
77
+ registered: config2.registered.bind(config2),
73
78
  getAuthUrlHandler: config2.#getAuthUrlHandler,
74
79
  callbackHandler: config2.#callbackHandler,
75
80
  tokenRefreshHandler: config2.#tokenRefreshHandler
76
81
  };
77
82
  }
78
- setValue(value) {
79
- this.#value = value;
83
+ static assertRegistered(config2) {
84
+ if (!config2.#isRegistered) {
85
+ throw new Error(
86
+ "MCP Server auth config is not registered with `createMcpServer`. Please pass your OAuth config as `authConfig` when creating the server."
87
+ );
88
+ }
80
89
  }
81
90
  getAuthorizationUrl(cb) {
82
91
  this.#getAuthUrlHandler = async (d) => {
@@ -108,14 +117,22 @@ var McpServerOAuthConfig = class _McpServerOAuthConfig {
108
117
  if (prop == "__config__") {
109
118
  return self;
110
119
  }
111
- if (self.#value === null) {
112
- throw new Error("MCP Server auth config value not set");
120
+ if (self.#value === null || !self.#isRegistered) {
121
+ throw new Error(
122
+ "MCP Server auth config is not registered with `createMcpServer`. Please pass your OAuth config as `authConfig` when creating the server."
123
+ );
113
124
  }
114
125
  return self.#value[prop];
115
126
  }
116
127
  }
117
128
  );
118
129
  }
130
+ setValue(value) {
131
+ this.#value = value;
132
+ }
133
+ registered() {
134
+ this.#isRegistered = true;
135
+ }
119
136
  };
120
137
  var createOAuth = (...args) => McpServerOAuthConfig.create(...args);
121
138
  var oAuth = createOAuth;
@@ -125,7 +142,14 @@ var getOAuthConfigImplementation = (configValue) => {
125
142
  };
126
143
  var setOAuthConfigValue = (configValue, value) => {
127
144
  let self = configValue["__config__"];
128
- self.setValue(value);
145
+ let impl = McpServerOAuthConfig.getImplementation(self);
146
+ impl.setValue(value);
147
+ impl.registered();
148
+ };
149
+ var registerOAuthConfig = (configValue) => {
150
+ let self = configValue["__config__"];
151
+ let impl = McpServerOAuthConfig.getImplementation(self);
152
+ impl.registered();
129
153
  };
130
154
  var getOAuthConfigSchema = (configValue) => {
131
155
  let self = configValue["__config__"];
@@ -184,18 +208,31 @@ var handleMcpMessages = async (server, opts, messages) => {
184
208
  };
185
209
 
186
210
  // src/config.ts
211
+ var configs = /* @__PURE__ */ new Set();
187
212
  var McpServerConfig = class _McpServerConfig {
188
213
  constructor(schema) {
189
214
  this.schema = schema;
215
+ configs.add(this);
190
216
  }
191
217
  #value = null;
218
+ #isRegistered = false;
192
219
  static create(schema) {
193
220
  return new _McpServerConfig(schema);
194
221
  }
222
+ static assertRegistered(config2) {
223
+ if (!config2.#isRegistered) {
224
+ throw new Error(
225
+ "MCP Server config is not registered with `createMcpServer`. Please pass your config as `config` when creating the server."
226
+ );
227
+ }
228
+ }
195
229
  setValue(value) {
196
230
  let parsed = this.schema.parse(value);
197
231
  this.#value = parsed;
198
232
  }
233
+ registered() {
234
+ this.#isRegistered = true;
235
+ }
199
236
  value() {
200
237
  let self = this;
201
238
  return new Proxy(
@@ -205,8 +242,10 @@ var McpServerConfig = class _McpServerConfig {
205
242
  if (prop == "__config__") {
206
243
  return self;
207
244
  }
208
- if (self.#value === null) {
209
- throw new Error("MCP Server config value not set");
245
+ if (self.#value === null || !self.#isRegistered) {
246
+ throw new Error(
247
+ "MCP Server config is not registered with `createMcpServer`. Please pass your config as `config` when creating the server."
248
+ );
210
249
  }
211
250
  return self.#value[prop];
212
251
  }
@@ -221,6 +260,11 @@ var config = (schema) => createConfig(schema);
221
260
  var setConfigValue = (configValue, value) => {
222
261
  let self = configValue["__config__"];
223
262
  self.setValue(value);
263
+ self.registered();
264
+ };
265
+ var registerConfig = (configValue) => {
266
+ let self = configValue["__config__"];
267
+ self.registered();
224
268
  };
225
269
  var getConfigSchema = (configValue) => {
226
270
  let self = configValue["__config__"];
@@ -250,6 +294,10 @@ var getServer = (instance) => {
250
294
  var McpServerInstance = class _McpServerInstance {
251
295
  constructor(instance) {
252
296
  this.instance = instance;
297
+ if (instance.config) registerConfig(instance.config);
298
+ if (instance.authConfig) registerOAuthConfig(instance.authConfig);
299
+ for (let ac of authConfigs) McpServerOAuthConfig.assertRegistered(ac);
300
+ for (let co of configs) McpServerConfig.assertRegistered(co);
253
301
  this.#server = getServer(instance);
254
302
  }
255
303
  #server;
@@ -435,6 +483,17 @@ var clientAdapter = (transport) => {
435
483
  type: "metorial-mcp.handle-oauth-token-refresh",
436
484
  params: d
437
485
  });
486
+ },
487
+ handleMcpMessages: async (d) => {
488
+ return send({
489
+ type: "metorial-mcp.handle-mcp-message",
490
+ params: {
491
+ config: d.config,
492
+ authConfig: d.authConfig,
493
+ client: d.client,
494
+ messages: d.message
495
+ }
496
+ });
438
497
  }
439
498
  };
440
499
  };
@@ -1 +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 createOAuth,\n oAuth,\n type McpServerOAuthCallbackHandler,\n type McpServerOAuthCallbackHandlerParams,\n type McpServerOAuthCallbackHandlerResult,\n type McpServerOAuthConfig,\n type McpServerOAuthTokenRefreshHandler,\n type McpServerOAuthTokenRefreshHandlerParams,\n type McpServerOAuthTokenRefreshHandlerResult,\n type McpServerOAuthUrlHandler,\n type McpServerOAuthUrlHandlerInternal,\n type McpServerOAuthUrlHandlerParams,\n type McpServerOAuthUrlHandlerResult,\n type McpServerOAuthValue\n} from './auth';\n\nexport { config, createConfig, type McpServerConfig } from './config';\n\nexport {\n McpTool,\n type McpServerInfo,\n type McpToolAnnotations,\n type McpToolHandlerOutput,\n type McpToolHandlerOutputSync,\n type McpToolImplementation,\n type McpToolOpts\n} from '@metorial/mcp';\n","import {\n createMcpServer as createMcpServerInternal,\n CreateMcpServerOpts\n} from '@metorial/mcp';\nimport { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\nimport { JSONRPCMessage } from '@modelcontextprotocol/sdk/types.js';\nimport {\n getOAuthConfigImplementation,\n getOAuthConfigSchema,\n McpServerOAuthCallbackHandlerParams,\n McpServerOAuthTokenRefreshHandlerParams,\n McpServerOAuthUrlHandlerParams,\n setOAuthConfigValue\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 authConfig: getOAuthConfigSchema(this.instance.authConfig),\n hasTokenRefresh: !!getOAuthConfigImplementation(this.instance.authConfig)\n .tokenRefreshHandler\n }\n : {\n status: 'disabled' as const\n }\n };\n }\n\n handleMcpMessages(opts: {\n config: any;\n authConfig: any;\n client: ClientOpts;\n message: JSONRPCMessage[];\n }) {\n if (this.instance.config) {\n setConfigValue(this.instance.config, opts.config);\n }\n if (opts.authConfig && this.instance.authConfig) {\n setOAuthConfigValue(this.instance.authConfig, opts.authConfig);\n }\n\n return handleMcpMessages(this.#server, opts.client, opts.message);\n }\n\n getOauthAuthorizationUrl(d: McpServerOAuthUrlHandlerParams<any>) {\n if (!this.instance.authConfig) return null;\n let impl = getOAuthConfigImplementation(this.instance.authConfig);\n\n return impl.getAuthUrlHandler(d);\n }\n\n handleOauthCallback(d: McpServerOAuthCallbackHandlerParams<any>) {\n if (!this.instance.authConfig) return null;\n let impl = getOAuthConfigImplementation(this.instance.authConfig);\n\n return impl.callbackHandler(d);\n }\n\n handleOauthTokenRefresh(d: McpServerOAuthTokenRefreshHandlerParams<any>) {\n if (!this.instance.authConfig) return null;\n let impl = getOAuthConfigImplementation(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 McpServerOAuthUrlHandlerParams<OAuthConfig extends {}> = {\n authConfig: OAuthConfig;\n clientId: string;\n clientSecret: string;\n state: string;\n redirectUri: string;\n};\n\nexport type McpServerOAuthUrlHandlerResult = {\n authorizationUrl: string;\n authState?: Record<string, string> | null;\n};\n\nexport type McpServerOAuthUrlHandlerInternal = <OAuthConfig extends {}>(\n d: McpServerOAuthUrlHandlerParams<OAuthConfig>\n) => Promise<McpServerOAuthUrlHandlerResult>;\n\nexport type McpServerOAuthUrlHandler = <OAuthConfig extends {}>(\n d: McpServerOAuthUrlHandlerParams<OAuthConfig>\n) => Promise<string | McpServerOAuthUrlHandlerResult>;\n\nexport type McpServerOAuthCallbackHandlerParams<OAuthConfig extends {}> = {\n authConfig: OAuthConfig;\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 McpServerOAuthCallbackHandlerResult = {\n accessToken: string;\n refreshToken?: string;\n expiresIn?: number;\n scope?: string;\n tokenType?: string;\n [key: string]: any;\n};\n\nexport type McpServerOAuthCallbackHandler = <OAuthConfig extends {}>(\n d: McpServerOAuthCallbackHandlerParams<OAuthConfig>\n) => Promise<McpServerOAuthCallbackHandlerResult>;\n\nexport type McpServerOAuthTokenRefreshHandlerParams<OAuthConfig extends {}> = {\n authConfig: OAuthConfig;\n authState: Record<string, string>;\n refreshToken: string;\n clientId: string;\n clientSecret: string;\n};\n\nexport type McpServerOAuthTokenRefreshHandlerResult = {\n accessToken: string;\n refreshToken?: string;\n expiresIn?: number;\n scope?: string;\n tokenType?: string;\n [key: string]: any;\n};\n\nexport type McpServerOAuthTokenHandlers = {\n getAuthorizationUrl: McpServerOAuthUrlHandler;\n handleCallback: McpServerOAuthCallbackHandler;\n refreshToken?: McpServerOAuthTokenRefreshHandler;\n};\n\nexport type McpServerOAuthTokenRefreshHandler = <OAuthConfig extends {}>(\n d: McpServerOAuthTokenRefreshHandlerParams<OAuthConfig>\n) => Promise<McpServerOAuthTokenRefreshHandlerResult>;\n\nexport type McpServerOAuthValue = {\n accessToken: string;\n expiresIn?: number;\n scope?: string;\n tokenType?: string;\n [key: string]: any;\n};\n\nexport class McpServerOAuthConfig<OAuthConfig extends {}> {\n #value: McpServerOAuthValue | null = null;\n\n #getAuthUrlHandler?: McpServerOAuthUrlHandlerInternal;\n #callbackHandler?: McpServerOAuthCallbackHandler;\n #tokenRefreshHandler?: McpServerOAuthTokenRefreshHandler;\n\n private constructor(public readonly schema: z.ZodType<OAuthConfig>) {}\n\n static create<OAuthConfig extends {}>(\n ...args:\n | [z.ZodType<OAuthConfig>, McpServerOAuthTokenHandlers]\n | [McpServerOAuthTokenHandlers]\n ) {\n let schema = args.length == 2 ? args[0] : undefined;\n let handlers = args.length == 2 ? args[1] : args[0];\n\n let config = new McpServerOAuthConfig(schema ?? (z.object({}) as z.ZodType<OAuthConfig>));\n\n config.getAuthorizationUrl(handlers.getAuthorizationUrl);\n config.handleCallback(handlers.handleCallback);\n if (handlers.refreshToken) {\n config.refreshToken(handlers.refreshToken);\n }\n\n return config;\n }\n\n static getImplementation(config: McpServerOAuthConfig<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: McpServerOAuthValue) {\n this.#value = value;\n }\n\n getAuthorizationUrl(cb: McpServerOAuthUrlHandler) {\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: McpServerOAuthCallbackHandler) {\n this.#callbackHandler = cb;\n return this;\n }\n\n refreshToken(cb: McpServerOAuthTokenRefreshHandler) {\n this.#tokenRefreshHandler = cb;\n return this;\n }\n\n build(): OAuthConfig {\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 OAuthConfig;\n }\n}\n\nexport let createOAuth = <Config extends {}>(\n ...args: [z.ZodType<Config>, McpServerOAuthTokenHandlers] | [McpServerOAuthTokenHandlers]\n) => McpServerOAuthConfig.create(...args);\n\nexport let oAuth = createOAuth;\n\nexport let getOAuthConfigImplementation = <Config extends {}>(configValue: any) => {\n let self = configValue['__config__'] as McpServerOAuthConfig<Config>;\n return McpServerOAuthConfig.getImplementation(self);\n};\n\nexport let setOAuthConfigValue = <Config extends {}>(\n configValue: any,\n value: McpServerOAuthValue\n) => {\n let self = configValue['__config__'] as McpServerOAuthConfig<Config>;\n self.setValue(value);\n};\n\nexport let getOAuthConfigSchema = <Config extends {}>(configValue: any) => {\n let self = configValue['__config__'] as McpServerOAuthConfig<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 { 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 handleMcpMessage = z.object({\n type: z.literal('metorial-mcp.handle-mcp-message'),\n params: z.object({\n authConfig: z.optional(z.record(z.string(), z.any())),\n config: z.record(z.string(), z.any()),\n client: z.object({\n client: z.record(z.string(), z.any()),\n capabilities: z.record(z.string(), z.any())\n }),\n messages: z.array(z.any())\n })\n});\ntype HandleMcpMessage = z.infer<typeof handleMcpMessage>;\n\nlet allMessages = z.union([\n discoverMessage,\n authUrlMessage,\n oauthCallbackMessage,\n oauthTokenRefreshMessage,\n handleMcpMessage\n]);\n\nexport type McpServerInstanceMessage =\n | DiscoverMessage\n | AuthUrlMessage\n | OauthCallbackMessage\n | OauthTokenRefreshMessage\n | HandleMcpMessage;\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 case 'metorial-mcp.handle-mcp-message': {\n return instance.handleMcpMessages({\n config: parsed.params.config || {},\n authConfig: parsed.params.authConfig || {},\n client: parsed.params.client as any,\n message: parsed.params.messages\n });\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":["config","z","import_zod","z","createMcpServerInternal","import_zod","z","import_mcp"]}
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 createOAuth,\n oAuth,\n type McpServerOAuthCallbackHandler,\n type McpServerOAuthCallbackHandlerParams,\n type McpServerOAuthCallbackHandlerResult,\n type McpServerOAuthConfig,\n type McpServerOAuthTokenRefreshHandler,\n type McpServerOAuthTokenRefreshHandlerParams,\n type McpServerOAuthTokenRefreshHandlerResult,\n type McpServerOAuthUrlHandler,\n type McpServerOAuthUrlHandlerInternal,\n type McpServerOAuthUrlHandlerParams,\n type McpServerOAuthUrlHandlerResult,\n type McpServerOAuthValue\n} from './auth';\n\nexport { config, createConfig, type McpServerConfig } from './config';\n\nexport {\n McpTool,\n type McpServerInfo,\n type McpToolAnnotations,\n type McpToolHandlerOutput,\n type McpToolHandlerOutputSync,\n type McpToolImplementation,\n type McpToolOpts\n} from '@metorial/mcp';\n","import {\n createMcpServer as createMcpServerInternal,\n CreateMcpServerOpts\n} from '@metorial/mcp';\nimport { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\nimport { JSONRPCMessage } from '@modelcontextprotocol/sdk/types.js';\nimport {\n authConfigs,\n getOAuthConfigImplementation,\n getOAuthConfigSchema,\n McpServerOAuthCallbackHandlerParams,\n McpServerOAuthConfig,\n McpServerOAuthTokenRefreshHandlerParams,\n McpServerOAuthUrlHandlerParams,\n registerOAuthConfig,\n setOAuthConfigValue\n} from './auth';\nimport { ClientOpts, handleMcpMessages } from './client';\nimport {\n configs,\n getConfigSchema,\n McpServerConfig,\n registerConfig,\n setConfigValue\n} 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 if (instance.config) registerConfig(instance.config);\n if (instance.authConfig) registerOAuthConfig(instance.authConfig);\n\n for (let ac of authConfigs) McpServerOAuthConfig.assertRegistered(ac);\n for (let co of configs) McpServerConfig.assertRegistered(co);\n\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 authConfig: getOAuthConfigSchema(this.instance.authConfig),\n hasTokenRefresh: !!getOAuthConfigImplementation(this.instance.authConfig)\n .tokenRefreshHandler\n }\n : {\n status: 'disabled' as const\n }\n };\n }\n\n handleMcpMessages(opts: {\n config: any;\n authConfig: any;\n client: ClientOpts;\n message: JSONRPCMessage[];\n }) {\n if (this.instance.config) {\n setConfigValue(this.instance.config, opts.config);\n }\n if (opts.authConfig && this.instance.authConfig) {\n setOAuthConfigValue(this.instance.authConfig, opts.authConfig);\n }\n\n return handleMcpMessages(this.#server, opts.client, opts.message);\n }\n\n getOauthAuthorizationUrl(d: McpServerOAuthUrlHandlerParams<any>) {\n if (!this.instance.authConfig) return null;\n let impl = getOAuthConfigImplementation(this.instance.authConfig);\n\n return impl.getAuthUrlHandler(d);\n }\n\n handleOauthCallback(d: McpServerOAuthCallbackHandlerParams<any>) {\n if (!this.instance.authConfig) return null;\n let impl = getOAuthConfigImplementation(this.instance.authConfig);\n\n return impl.callbackHandler(d);\n }\n\n handleOauthTokenRefresh(d: McpServerOAuthTokenRefreshHandlerParams<any>) {\n if (!this.instance.authConfig) return null;\n let impl = getOAuthConfigImplementation(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 McpServerOAuthUrlHandlerParams<OAuthConfig extends {}> = {\n authConfig: OAuthConfig;\n clientId: string;\n clientSecret: string;\n state: string;\n redirectUri: string;\n};\n\nexport type McpServerOAuthUrlHandlerResult = {\n authorizationUrl: string;\n authState?: Record<string, string> | null;\n};\n\nexport type McpServerOAuthUrlHandlerInternal = <OAuthConfig extends {}>(\n d: McpServerOAuthUrlHandlerParams<OAuthConfig>\n) => Promise<McpServerOAuthUrlHandlerResult>;\n\nexport type McpServerOAuthUrlHandler = <OAuthConfig extends {}>(\n d: McpServerOAuthUrlHandlerParams<OAuthConfig>\n) => Promise<string | McpServerOAuthUrlHandlerResult>;\n\nexport type McpServerOAuthCallbackHandlerParams<OAuthConfig extends {}> = {\n authConfig: OAuthConfig;\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 McpServerOAuthCallbackHandlerResult = {\n accessToken: string;\n refreshToken?: string;\n expiresIn?: number;\n scope?: string;\n tokenType?: string;\n [key: string]: any;\n};\n\nexport type McpServerOAuthCallbackHandler = <OAuthConfig extends {}>(\n d: McpServerOAuthCallbackHandlerParams<OAuthConfig>\n) => Promise<McpServerOAuthCallbackHandlerResult>;\n\nexport type McpServerOAuthTokenRefreshHandlerParams<OAuthConfig extends {}> = {\n authConfig: OAuthConfig;\n authState: Record<string, string>;\n refreshToken: string;\n clientId: string;\n clientSecret: string;\n};\n\nexport type McpServerOAuthTokenRefreshHandlerResult = {\n accessToken: string;\n refreshToken?: string;\n expiresIn?: number;\n scope?: string;\n tokenType?: string;\n [key: string]: any;\n};\n\nexport type McpServerOAuthTokenHandlers = {\n getAuthorizationUrl: McpServerOAuthUrlHandler;\n handleCallback: McpServerOAuthCallbackHandler;\n refreshToken?: McpServerOAuthTokenRefreshHandler;\n};\n\nexport type McpServerOAuthTokenRefreshHandler = <OAuthConfig extends {}>(\n d: McpServerOAuthTokenRefreshHandlerParams<OAuthConfig>\n) => Promise<McpServerOAuthTokenRefreshHandlerResult>;\n\nexport type McpServerOAuthValue = {\n accessToken: string;\n expiresIn?: number;\n scope?: string;\n tokenType?: string;\n [key: string]: any;\n};\n\nexport let authConfigs = new Set<McpServerOAuthConfig<any>>();\n\nexport class McpServerOAuthConfig<OAuthConfig extends {}> {\n #value: McpServerOAuthValue | null = null;\n #isRegistered = false;\n\n #getAuthUrlHandler?: McpServerOAuthUrlHandlerInternal;\n #callbackHandler?: McpServerOAuthCallbackHandler;\n #tokenRefreshHandler?: McpServerOAuthTokenRefreshHandler;\n\n private constructor(public readonly schema: z.ZodType<OAuthConfig>) {\n authConfigs.add(this);\n }\n\n static create<OAuthConfig extends {}>(\n ...args:\n | [z.ZodType<OAuthConfig>, McpServerOAuthTokenHandlers]\n | [McpServerOAuthTokenHandlers]\n ) {\n let schema = args.length == 2 ? args[0] : undefined;\n let handlers = args.length == 2 ? args[1] : args[0];\n\n let config = new McpServerOAuthConfig(schema ?? (z.object({}) as z.ZodType<OAuthConfig>));\n\n config.getAuthorizationUrl(handlers.getAuthorizationUrl);\n config.handleCallback(handlers.handleCallback);\n if (handlers.refreshToken) {\n config.refreshToken(handlers.refreshToken);\n }\n\n return config.build();\n }\n\n static getImplementation(config: McpServerOAuthConfig<any>) {\n if (!config.#getAuthUrlHandler || !config.#callbackHandler) {\n throw new Error('MCP Server auth config is missing required handlers');\n }\n\n return {\n setValue: config.setValue.bind(config),\n registered: config.registered.bind(config),\n\n getAuthUrlHandler: config.#getAuthUrlHandler,\n callbackHandler: config.#callbackHandler,\n tokenRefreshHandler: config.#tokenRefreshHandler\n };\n }\n\n static assertRegistered(config: McpServerOAuthConfig<any>) {\n if (!config.#isRegistered) {\n throw new Error(\n 'MCP Server auth config is not registered with `createMcpServer`. Please pass your OAuth config as `authConfig` when creating the server.'\n );\n }\n }\n\n getAuthorizationUrl(cb: McpServerOAuthUrlHandler) {\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: McpServerOAuthCallbackHandler) {\n this.#callbackHandler = cb;\n return this;\n }\n\n refreshToken(cb: McpServerOAuthTokenRefreshHandler) {\n this.#tokenRefreshHandler = cb;\n return this;\n }\n\n build(): OAuthConfig {\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 || !self.#isRegistered) {\n throw new Error(\n 'MCP Server auth config is not registered with `createMcpServer`. Please pass your OAuth config as `authConfig` when creating the server.'\n );\n }\n\n return (self.#value as any)[prop];\n }\n }\n ) as any as OAuthConfig;\n }\n\n private setValue(value: McpServerOAuthValue) {\n this.#value = value;\n }\n\n private registered() {\n this.#isRegistered = true;\n }\n}\n\nexport let createOAuth = <Config extends {}>(\n ...args: [z.ZodType<Config>, McpServerOAuthTokenHandlers] | [McpServerOAuthTokenHandlers]\n) => McpServerOAuthConfig.create(...args);\n\nexport let oAuth = createOAuth;\n\nexport let getOAuthConfigImplementation = <Config extends {}>(configValue: any) => {\n let self = configValue['__config__'] as McpServerOAuthConfig<Config>;\n return McpServerOAuthConfig.getImplementation(self);\n};\n\nexport let setOAuthConfigValue = <Config extends {}>(\n configValue: any,\n value: McpServerOAuthValue\n) => {\n let self = configValue['__config__'] as McpServerOAuthConfig<Config>;\n let impl = McpServerOAuthConfig.getImplementation(self);\n\n impl.setValue(value);\n impl.registered();\n};\n\nexport let registerOAuthConfig = <Config extends {}>(configValue: any) => {\n let self = configValue['__config__'] as McpServerOAuthConfig<Config>;\n let impl = McpServerOAuthConfig.getImplementation(self);\n impl.registered();\n};\n\nexport let getOAuthConfigSchema = <Config extends {}>(configValue: any) => {\n let self = configValue['__config__'] as McpServerOAuthConfig<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 { 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 let configs = new Set<McpServerConfig<any>>();\n\nexport class McpServerConfig<Config extends {}> {\n #value: Config | null = null;\n #isRegistered = false;\n\n private constructor(public readonly schema: z.ZodType<Config>) {\n configs.add(this);\n }\n\n static create<Config extends {}>(schema: z.ZodType<Config>) {\n return new McpServerConfig(schema);\n }\n\n static assertRegistered(config: McpServerConfig<any>) {\n if (!config.#isRegistered) {\n throw new Error(\n 'MCP Server config is not registered with `createMcpServer`. Please pass your config as `config` when creating the server.'\n );\n }\n }\n\n setValue(value: unknown) {\n let parsed = this.schema.parse(value);\n this.#value = parsed;\n }\n\n registered() {\n this.#isRegistered = true;\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 || !self.#isRegistered) {\n throw new Error(\n 'MCP Server config is not registered with `createMcpServer`. Please pass your config as `config` when creating the server.'\n );\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 self.registered();\n};\n\nexport let registerConfig = <Config extends {}>(configValue: any) => {\n let self = configValue['__config__'] as McpServerConfig<Config>;\n self.registered();\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 handleMcpMessage = z.object({\n type: z.literal('metorial-mcp.handle-mcp-message'),\n params: z.object({\n authConfig: z.optional(z.record(z.string(), z.any())),\n config: z.record(z.string(), z.any()),\n client: z.object({\n client: z.record(z.string(), z.any()),\n capabilities: z.record(z.string(), z.any())\n }),\n messages: z.array(z.any())\n })\n});\ntype HandleMcpMessage = z.infer<typeof handleMcpMessage>;\n\nlet allMessages = z.union([\n discoverMessage,\n authUrlMessage,\n oauthCallbackMessage,\n oauthTokenRefreshMessage,\n handleMcpMessage\n]);\n\nexport type McpServerInstanceMessage =\n | DiscoverMessage\n | AuthUrlMessage\n | OauthCallbackMessage\n | OauthTokenRefreshMessage\n | HandleMcpMessage;\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 case 'metorial-mcp.handle-mcp-message': {\n return instance.handleMcpMessages({\n config: parsed.params.config || {},\n authConfig: parsed.params.authConfig || {},\n client: parsed.params.client as any,\n message: parsed.params.messages\n });\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 handleMcpMessages: async (d: Parameters<McpServerInstance['handleMcpMessages']>[0]) => {\n return send({\n type: 'metorial-mcp.handle-mcp-message',\n params: {\n config: d.config,\n authConfig: d.authConfig,\n client: d.client,\n messages: d.message\n }\n }) as Promise<Awaited<ReturnType<McpServerInstance['handleMcpMessages']>>>;\n }\n };\n};\n"],"mappings":"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","names":["config","z","import_zod","z","config","createMcpServerInternal","import_zod","z","import_mcp"]}
package/dist/index.d.cts CHANGED
@@ -72,20 +72,24 @@ declare class McpServerOAuthConfig<OAuthConfig extends {}> {
72
72
  #private;
73
73
  readonly schema: z__default.ZodType<OAuthConfig>;
74
74
  private constructor();
75
- static create<OAuthConfig extends {}>(...args: [z__default.ZodType<OAuthConfig>, McpServerOAuthTokenHandlers] | [McpServerOAuthTokenHandlers]): McpServerOAuthConfig<OAuthConfig>;
75
+ static create<OAuthConfig extends {}>(...args: [z__default.ZodType<OAuthConfig>, McpServerOAuthTokenHandlers] | [McpServerOAuthTokenHandlers]): OAuthConfig;
76
76
  static getImplementation(config: McpServerOAuthConfig<any>): {
77
+ setValue: (value: McpServerOAuthValue) => void;
78
+ registered: () => void;
77
79
  getAuthUrlHandler: McpServerOAuthUrlHandlerInternal;
78
80
  callbackHandler: McpServerOAuthCallbackHandler;
79
81
  tokenRefreshHandler: McpServerOAuthTokenRefreshHandler | undefined;
80
82
  };
81
- setValue(value: McpServerOAuthValue): void;
83
+ static assertRegistered(config: McpServerOAuthConfig<any>): void;
82
84
  getAuthorizationUrl(cb: McpServerOAuthUrlHandler): this;
83
85
  handleCallback(cb: McpServerOAuthCallbackHandler): this;
84
86
  refreshToken(cb: McpServerOAuthTokenRefreshHandler): this;
85
87
  build(): OAuthConfig;
88
+ private setValue;
89
+ private registered;
86
90
  }
87
- declare let createOAuth: <Config extends {}>(...args: [z__default.ZodType<Config>, McpServerOAuthTokenHandlers] | [McpServerOAuthTokenHandlers]) => McpServerOAuthConfig<Config>;
88
- declare let oAuth: <Config extends {}>(...args: [z__default.ZodType<Config>, McpServerOAuthTokenHandlers] | [McpServerOAuthTokenHandlers]) => McpServerOAuthConfig<Config>;
91
+ declare let createOAuth: <Config extends {}>(...args: [z__default.ZodType<Config>, McpServerOAuthTokenHandlers] | [McpServerOAuthTokenHandlers]) => Config;
92
+ declare let oAuth: <Config extends {}>(...args: [z__default.ZodType<Config>, McpServerOAuthTokenHandlers] | [McpServerOAuthTokenHandlers]) => Config;
89
93
 
90
94
  interface ClientOpts {
91
95
  client: {
@@ -221,6 +225,10 @@ declare let clientAdapter: (transport: (messages: McpServerInstanceMessage[]) =>
221
225
  getOauthAuthorizationUrl: (d: Parameters<McpServerInstance["getOauthAuthorizationUrl"]>[0]) => Promise<McpServerOAuthUrlHandlerResult | null>;
222
226
  handleOauthCallback: (d: Parameters<McpServerInstance["handleOauthCallback"]>[0]) => Promise<McpServerOAuthCallbackHandlerResult | null>;
223
227
  handleOauthTokenRefresh: (d: Parameters<McpServerInstance["handleOauthTokenRefresh"]>[0]) => Promise<McpServerOAuthTokenRefreshHandlerResult | null>;
228
+ handleMcpMessages: (d: Parameters<McpServerInstance["handleMcpMessages"]>[0]) => Promise<{
229
+ messages: _modelcontextprotocol_sdk_types.JSONRPCMessage[];
230
+ error: Error | null;
231
+ }>;
224
232
  };
225
233
 
226
234
  declare class McpServerConfig<Config extends {}> {
@@ -228,7 +236,9 @@ declare class McpServerConfig<Config extends {}> {
228
236
  readonly schema: z__default.ZodType<Config>;
229
237
  private constructor();
230
238
  static create<Config extends {}>(schema: z__default.ZodType<Config>): McpServerConfig<Config>;
239
+ static assertRegistered(config: McpServerConfig<any>): void;
231
240
  setValue(value: unknown): void;
241
+ registered(): void;
232
242
  value(): Config;
233
243
  }
234
244
  declare let createConfig: <Config extends {}>(schema: z__default.ZodType<Config>) => Config;
package/dist/index.d.ts CHANGED
@@ -72,20 +72,24 @@ declare class McpServerOAuthConfig<OAuthConfig extends {}> {
72
72
  #private;
73
73
  readonly schema: z__default.ZodType<OAuthConfig>;
74
74
  private constructor();
75
- static create<OAuthConfig extends {}>(...args: [z__default.ZodType<OAuthConfig>, McpServerOAuthTokenHandlers] | [McpServerOAuthTokenHandlers]): McpServerOAuthConfig<OAuthConfig>;
75
+ static create<OAuthConfig extends {}>(...args: [z__default.ZodType<OAuthConfig>, McpServerOAuthTokenHandlers] | [McpServerOAuthTokenHandlers]): OAuthConfig;
76
76
  static getImplementation(config: McpServerOAuthConfig<any>): {
77
+ setValue: (value: McpServerOAuthValue) => void;
78
+ registered: () => void;
77
79
  getAuthUrlHandler: McpServerOAuthUrlHandlerInternal;
78
80
  callbackHandler: McpServerOAuthCallbackHandler;
79
81
  tokenRefreshHandler: McpServerOAuthTokenRefreshHandler | undefined;
80
82
  };
81
- setValue(value: McpServerOAuthValue): void;
83
+ static assertRegistered(config: McpServerOAuthConfig<any>): void;
82
84
  getAuthorizationUrl(cb: McpServerOAuthUrlHandler): this;
83
85
  handleCallback(cb: McpServerOAuthCallbackHandler): this;
84
86
  refreshToken(cb: McpServerOAuthTokenRefreshHandler): this;
85
87
  build(): OAuthConfig;
88
+ private setValue;
89
+ private registered;
86
90
  }
87
- declare let createOAuth: <Config extends {}>(...args: [z__default.ZodType<Config>, McpServerOAuthTokenHandlers] | [McpServerOAuthTokenHandlers]) => McpServerOAuthConfig<Config>;
88
- declare let oAuth: <Config extends {}>(...args: [z__default.ZodType<Config>, McpServerOAuthTokenHandlers] | [McpServerOAuthTokenHandlers]) => McpServerOAuthConfig<Config>;
91
+ declare let createOAuth: <Config extends {}>(...args: [z__default.ZodType<Config>, McpServerOAuthTokenHandlers] | [McpServerOAuthTokenHandlers]) => Config;
92
+ declare let oAuth: <Config extends {}>(...args: [z__default.ZodType<Config>, McpServerOAuthTokenHandlers] | [McpServerOAuthTokenHandlers]) => Config;
89
93
 
90
94
  interface ClientOpts {
91
95
  client: {
@@ -221,6 +225,10 @@ declare let clientAdapter: (transport: (messages: McpServerInstanceMessage[]) =>
221
225
  getOauthAuthorizationUrl: (d: Parameters<McpServerInstance["getOauthAuthorizationUrl"]>[0]) => Promise<McpServerOAuthUrlHandlerResult | null>;
222
226
  handleOauthCallback: (d: Parameters<McpServerInstance["handleOauthCallback"]>[0]) => Promise<McpServerOAuthCallbackHandlerResult | null>;
223
227
  handleOauthTokenRefresh: (d: Parameters<McpServerInstance["handleOauthTokenRefresh"]>[0]) => Promise<McpServerOAuthTokenRefreshHandlerResult | null>;
228
+ handleMcpMessages: (d: Parameters<McpServerInstance["handleMcpMessages"]>[0]) => Promise<{
229
+ messages: _modelcontextprotocol_sdk_types.JSONRPCMessage[];
230
+ error: Error | null;
231
+ }>;
224
232
  };
225
233
 
226
234
  declare class McpServerConfig<Config extends {}> {
@@ -228,7 +236,9 @@ declare class McpServerConfig<Config extends {}> {
228
236
  readonly schema: z__default.ZodType<Config>;
229
237
  private constructor();
230
238
  static create<Config extends {}>(schema: z__default.ZodType<Config>): McpServerConfig<Config>;
239
+ static assertRegistered(config: McpServerConfig<any>): void;
231
240
  setValue(value: unknown): void;
241
+ registered(): void;
232
242
  value(): Config;
233
243
  }
234
244
  declare let createConfig: <Config extends {}>(schema: z__default.ZodType<Config>) => Config;
package/dist/index.js CHANGED
@@ -5,11 +5,14 @@ import {
5
5
 
6
6
  // src/auth.ts
7
7
  import z from "zod";
8
+ var authConfigs = /* @__PURE__ */ new Set();
8
9
  var McpServerOAuthConfig = class _McpServerOAuthConfig {
9
10
  constructor(schema) {
10
11
  this.schema = schema;
12
+ authConfigs.add(this);
11
13
  }
12
14
  #value = null;
15
+ #isRegistered = false;
13
16
  #getAuthUrlHandler;
14
17
  #callbackHandler;
15
18
  #tokenRefreshHandler;
@@ -22,20 +25,26 @@ var McpServerOAuthConfig = class _McpServerOAuthConfig {
22
25
  if (handlers.refreshToken) {
23
26
  config2.refreshToken(handlers.refreshToken);
24
27
  }
25
- return config2;
28
+ return config2.build();
26
29
  }
27
30
  static getImplementation(config2) {
28
31
  if (!config2.#getAuthUrlHandler || !config2.#callbackHandler) {
29
32
  throw new Error("MCP Server auth config is missing required handlers");
30
33
  }
31
34
  return {
35
+ setValue: config2.setValue.bind(config2),
36
+ registered: config2.registered.bind(config2),
32
37
  getAuthUrlHandler: config2.#getAuthUrlHandler,
33
38
  callbackHandler: config2.#callbackHandler,
34
39
  tokenRefreshHandler: config2.#tokenRefreshHandler
35
40
  };
36
41
  }
37
- setValue(value) {
38
- this.#value = value;
42
+ static assertRegistered(config2) {
43
+ if (!config2.#isRegistered) {
44
+ throw new Error(
45
+ "MCP Server auth config is not registered with `createMcpServer`. Please pass your OAuth config as `authConfig` when creating the server."
46
+ );
47
+ }
39
48
  }
40
49
  getAuthorizationUrl(cb) {
41
50
  this.#getAuthUrlHandler = async (d) => {
@@ -67,14 +76,22 @@ var McpServerOAuthConfig = class _McpServerOAuthConfig {
67
76
  if (prop == "__config__") {
68
77
  return self;
69
78
  }
70
- if (self.#value === null) {
71
- throw new Error("MCP Server auth config value not set");
79
+ if (self.#value === null || !self.#isRegistered) {
80
+ throw new Error(
81
+ "MCP Server auth config is not registered with `createMcpServer`. Please pass your OAuth config as `authConfig` when creating the server."
82
+ );
72
83
  }
73
84
  return self.#value[prop];
74
85
  }
75
86
  }
76
87
  );
77
88
  }
89
+ setValue(value) {
90
+ this.#value = value;
91
+ }
92
+ registered() {
93
+ this.#isRegistered = true;
94
+ }
78
95
  };
79
96
  var createOAuth = (...args) => McpServerOAuthConfig.create(...args);
80
97
  var oAuth = createOAuth;
@@ -84,7 +101,14 @@ var getOAuthConfigImplementation = (configValue) => {
84
101
  };
85
102
  var setOAuthConfigValue = (configValue, value) => {
86
103
  let self = configValue["__config__"];
87
- self.setValue(value);
104
+ let impl = McpServerOAuthConfig.getImplementation(self);
105
+ impl.setValue(value);
106
+ impl.registered();
107
+ };
108
+ var registerOAuthConfig = (configValue) => {
109
+ let self = configValue["__config__"];
110
+ let impl = McpServerOAuthConfig.getImplementation(self);
111
+ impl.registered();
88
112
  };
89
113
  var getOAuthConfigSchema = (configValue) => {
90
114
  let self = configValue["__config__"];
@@ -143,18 +167,31 @@ var handleMcpMessages = async (server, opts, messages) => {
143
167
  };
144
168
 
145
169
  // src/config.ts
170
+ var configs = /* @__PURE__ */ new Set();
146
171
  var McpServerConfig = class _McpServerConfig {
147
172
  constructor(schema) {
148
173
  this.schema = schema;
174
+ configs.add(this);
149
175
  }
150
176
  #value = null;
177
+ #isRegistered = false;
151
178
  static create(schema) {
152
179
  return new _McpServerConfig(schema);
153
180
  }
181
+ static assertRegistered(config2) {
182
+ if (!config2.#isRegistered) {
183
+ throw new Error(
184
+ "MCP Server config is not registered with `createMcpServer`. Please pass your config as `config` when creating the server."
185
+ );
186
+ }
187
+ }
154
188
  setValue(value) {
155
189
  let parsed = this.schema.parse(value);
156
190
  this.#value = parsed;
157
191
  }
192
+ registered() {
193
+ this.#isRegistered = true;
194
+ }
158
195
  value() {
159
196
  let self = this;
160
197
  return new Proxy(
@@ -164,8 +201,10 @@ var McpServerConfig = class _McpServerConfig {
164
201
  if (prop == "__config__") {
165
202
  return self;
166
203
  }
167
- if (self.#value === null) {
168
- throw new Error("MCP Server config value not set");
204
+ if (self.#value === null || !self.#isRegistered) {
205
+ throw new Error(
206
+ "MCP Server config is not registered with `createMcpServer`. Please pass your config as `config` when creating the server."
207
+ );
169
208
  }
170
209
  return self.#value[prop];
171
210
  }
@@ -180,6 +219,11 @@ var config = (schema) => createConfig(schema);
180
219
  var setConfigValue = (configValue, value) => {
181
220
  let self = configValue["__config__"];
182
221
  self.setValue(value);
222
+ self.registered();
223
+ };
224
+ var registerConfig = (configValue) => {
225
+ let self = configValue["__config__"];
226
+ self.registered();
183
227
  };
184
228
  var getConfigSchema = (configValue) => {
185
229
  let self = configValue["__config__"];
@@ -209,6 +253,10 @@ var getServer = (instance) => {
209
253
  var McpServerInstance = class _McpServerInstance {
210
254
  constructor(instance) {
211
255
  this.instance = instance;
256
+ if (instance.config) registerConfig(instance.config);
257
+ if (instance.authConfig) registerOAuthConfig(instance.authConfig);
258
+ for (let ac of authConfigs) McpServerOAuthConfig.assertRegistered(ac);
259
+ for (let co of configs) McpServerConfig.assertRegistered(co);
212
260
  this.#server = getServer(instance);
213
261
  }
214
262
  #server;
@@ -394,6 +442,17 @@ var clientAdapter = (transport) => {
394
442
  type: "metorial-mcp.handle-oauth-token-refresh",
395
443
  params: d
396
444
  });
445
+ },
446
+ handleMcpMessages: async (d) => {
447
+ return send({
448
+ type: "metorial-mcp.handle-mcp-message",
449
+ params: {
450
+ config: d.config,
451
+ authConfig: d.authConfig,
452
+ client: d.client,
453
+ messages: d.message
454
+ }
455
+ });
397
456
  }
398
457
  };
399
458
  };
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/instance.ts","../src/auth.ts","../src/client.ts","../src/config.ts","../src/adapter.ts","../src/index.ts"],"sourcesContent":["import {\n createMcpServer as createMcpServerInternal,\n CreateMcpServerOpts\n} from '@metorial/mcp';\nimport { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\nimport { JSONRPCMessage } from '@modelcontextprotocol/sdk/types.js';\nimport {\n getOAuthConfigImplementation,\n getOAuthConfigSchema,\n McpServerOAuthCallbackHandlerParams,\n McpServerOAuthTokenRefreshHandlerParams,\n McpServerOAuthUrlHandlerParams,\n setOAuthConfigValue\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 authConfig: getOAuthConfigSchema(this.instance.authConfig),\n hasTokenRefresh: !!getOAuthConfigImplementation(this.instance.authConfig)\n .tokenRefreshHandler\n }\n : {\n status: 'disabled' as const\n }\n };\n }\n\n handleMcpMessages(opts: {\n config: any;\n authConfig: any;\n client: ClientOpts;\n message: JSONRPCMessage[];\n }) {\n if (this.instance.config) {\n setConfigValue(this.instance.config, opts.config);\n }\n if (opts.authConfig && this.instance.authConfig) {\n setOAuthConfigValue(this.instance.authConfig, opts.authConfig);\n }\n\n return handleMcpMessages(this.#server, opts.client, opts.message);\n }\n\n getOauthAuthorizationUrl(d: McpServerOAuthUrlHandlerParams<any>) {\n if (!this.instance.authConfig) return null;\n let impl = getOAuthConfigImplementation(this.instance.authConfig);\n\n return impl.getAuthUrlHandler(d);\n }\n\n handleOauthCallback(d: McpServerOAuthCallbackHandlerParams<any>) {\n if (!this.instance.authConfig) return null;\n let impl = getOAuthConfigImplementation(this.instance.authConfig);\n\n return impl.callbackHandler(d);\n }\n\n handleOauthTokenRefresh(d: McpServerOAuthTokenRefreshHandlerParams<any>) {\n if (!this.instance.authConfig) return null;\n let impl = getOAuthConfigImplementation(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 McpServerOAuthUrlHandlerParams<OAuthConfig extends {}> = {\n authConfig: OAuthConfig;\n clientId: string;\n clientSecret: string;\n state: string;\n redirectUri: string;\n};\n\nexport type McpServerOAuthUrlHandlerResult = {\n authorizationUrl: string;\n authState?: Record<string, string> | null;\n};\n\nexport type McpServerOAuthUrlHandlerInternal = <OAuthConfig extends {}>(\n d: McpServerOAuthUrlHandlerParams<OAuthConfig>\n) => Promise<McpServerOAuthUrlHandlerResult>;\n\nexport type McpServerOAuthUrlHandler = <OAuthConfig extends {}>(\n d: McpServerOAuthUrlHandlerParams<OAuthConfig>\n) => Promise<string | McpServerOAuthUrlHandlerResult>;\n\nexport type McpServerOAuthCallbackHandlerParams<OAuthConfig extends {}> = {\n authConfig: OAuthConfig;\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 McpServerOAuthCallbackHandlerResult = {\n accessToken: string;\n refreshToken?: string;\n expiresIn?: number;\n scope?: string;\n tokenType?: string;\n [key: string]: any;\n};\n\nexport type McpServerOAuthCallbackHandler = <OAuthConfig extends {}>(\n d: McpServerOAuthCallbackHandlerParams<OAuthConfig>\n) => Promise<McpServerOAuthCallbackHandlerResult>;\n\nexport type McpServerOAuthTokenRefreshHandlerParams<OAuthConfig extends {}> = {\n authConfig: OAuthConfig;\n authState: Record<string, string>;\n refreshToken: string;\n clientId: string;\n clientSecret: string;\n};\n\nexport type McpServerOAuthTokenRefreshHandlerResult = {\n accessToken: string;\n refreshToken?: string;\n expiresIn?: number;\n scope?: string;\n tokenType?: string;\n [key: string]: any;\n};\n\nexport type McpServerOAuthTokenHandlers = {\n getAuthorizationUrl: McpServerOAuthUrlHandler;\n handleCallback: McpServerOAuthCallbackHandler;\n refreshToken?: McpServerOAuthTokenRefreshHandler;\n};\n\nexport type McpServerOAuthTokenRefreshHandler = <OAuthConfig extends {}>(\n d: McpServerOAuthTokenRefreshHandlerParams<OAuthConfig>\n) => Promise<McpServerOAuthTokenRefreshHandlerResult>;\n\nexport type McpServerOAuthValue = {\n accessToken: string;\n expiresIn?: number;\n scope?: string;\n tokenType?: string;\n [key: string]: any;\n};\n\nexport class McpServerOAuthConfig<OAuthConfig extends {}> {\n #value: McpServerOAuthValue | null = null;\n\n #getAuthUrlHandler?: McpServerOAuthUrlHandlerInternal;\n #callbackHandler?: McpServerOAuthCallbackHandler;\n #tokenRefreshHandler?: McpServerOAuthTokenRefreshHandler;\n\n private constructor(public readonly schema: z.ZodType<OAuthConfig>) {}\n\n static create<OAuthConfig extends {}>(\n ...args:\n | [z.ZodType<OAuthConfig>, McpServerOAuthTokenHandlers]\n | [McpServerOAuthTokenHandlers]\n ) {\n let schema = args.length == 2 ? args[0] : undefined;\n let handlers = args.length == 2 ? args[1] : args[0];\n\n let config = new McpServerOAuthConfig(schema ?? (z.object({}) as z.ZodType<OAuthConfig>));\n\n config.getAuthorizationUrl(handlers.getAuthorizationUrl);\n config.handleCallback(handlers.handleCallback);\n if (handlers.refreshToken) {\n config.refreshToken(handlers.refreshToken);\n }\n\n return config;\n }\n\n static getImplementation(config: McpServerOAuthConfig<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: McpServerOAuthValue) {\n this.#value = value;\n }\n\n getAuthorizationUrl(cb: McpServerOAuthUrlHandler) {\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: McpServerOAuthCallbackHandler) {\n this.#callbackHandler = cb;\n return this;\n }\n\n refreshToken(cb: McpServerOAuthTokenRefreshHandler) {\n this.#tokenRefreshHandler = cb;\n return this;\n }\n\n build(): OAuthConfig {\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 OAuthConfig;\n }\n}\n\nexport let createOAuth = <Config extends {}>(\n ...args: [z.ZodType<Config>, McpServerOAuthTokenHandlers] | [McpServerOAuthTokenHandlers]\n) => McpServerOAuthConfig.create(...args);\n\nexport let oAuth = createOAuth;\n\nexport let getOAuthConfigImplementation = <Config extends {}>(configValue: any) => {\n let self = configValue['__config__'] as McpServerOAuthConfig<Config>;\n return McpServerOAuthConfig.getImplementation(self);\n};\n\nexport let setOAuthConfigValue = <Config extends {}>(\n configValue: any,\n value: McpServerOAuthValue\n) => {\n let self = configValue['__config__'] as McpServerOAuthConfig<Config>;\n self.setValue(value);\n};\n\nexport let getOAuthConfigSchema = <Config extends {}>(configValue: any) => {\n let self = configValue['__config__'] as McpServerOAuthConfig<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 { 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 handleMcpMessage = z.object({\n type: z.literal('metorial-mcp.handle-mcp-message'),\n params: z.object({\n authConfig: z.optional(z.record(z.string(), z.any())),\n config: z.record(z.string(), z.any()),\n client: z.object({\n client: z.record(z.string(), z.any()),\n capabilities: z.record(z.string(), z.any())\n }),\n messages: z.array(z.any())\n })\n});\ntype HandleMcpMessage = z.infer<typeof handleMcpMessage>;\n\nlet allMessages = z.union([\n discoverMessage,\n authUrlMessage,\n oauthCallbackMessage,\n oauthTokenRefreshMessage,\n handleMcpMessage\n]);\n\nexport type McpServerInstanceMessage =\n | DiscoverMessage\n | AuthUrlMessage\n | OauthCallbackMessage\n | OauthTokenRefreshMessage\n | HandleMcpMessage;\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 case 'metorial-mcp.handle-mcp-message': {\n return instance.handleMcpMessages({\n config: parsed.params.config || {},\n authConfig: parsed.params.authConfig || {},\n client: parsed.params.client as any,\n message: parsed.params.messages\n });\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","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 createOAuth,\n oAuth,\n type McpServerOAuthCallbackHandler,\n type McpServerOAuthCallbackHandlerParams,\n type McpServerOAuthCallbackHandlerResult,\n type McpServerOAuthConfig,\n type McpServerOAuthTokenRefreshHandler,\n type McpServerOAuthTokenRefreshHandlerParams,\n type McpServerOAuthTokenRefreshHandlerResult,\n type McpServerOAuthUrlHandler,\n type McpServerOAuthUrlHandlerInternal,\n type McpServerOAuthUrlHandlerParams,\n type McpServerOAuthUrlHandlerResult,\n type McpServerOAuthValue\n} from './auth';\n\nexport { config, createConfig, type McpServerConfig } from './config';\n\nexport {\n McpTool,\n type McpServerInfo,\n type McpToolAnnotations,\n type McpToolHandlerOutput,\n type McpToolHandlerOutputSync,\n type McpToolImplementation,\n type McpToolOpts\n} from '@metorial/mcp';\n"],"mappings":"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","names":["config","z","z"]}
1
+ {"version":3,"sources":["../src/instance.ts","../src/auth.ts","../src/client.ts","../src/config.ts","../src/adapter.ts","../src/index.ts"],"sourcesContent":["import {\n createMcpServer as createMcpServerInternal,\n CreateMcpServerOpts\n} from '@metorial/mcp';\nimport { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\nimport { JSONRPCMessage } from '@modelcontextprotocol/sdk/types.js';\nimport {\n authConfigs,\n getOAuthConfigImplementation,\n getOAuthConfigSchema,\n McpServerOAuthCallbackHandlerParams,\n McpServerOAuthConfig,\n McpServerOAuthTokenRefreshHandlerParams,\n McpServerOAuthUrlHandlerParams,\n registerOAuthConfig,\n setOAuthConfigValue\n} from './auth';\nimport { ClientOpts, handleMcpMessages } from './client';\nimport {\n configs,\n getConfigSchema,\n McpServerConfig,\n registerConfig,\n setConfigValue\n} 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 if (instance.config) registerConfig(instance.config);\n if (instance.authConfig) registerOAuthConfig(instance.authConfig);\n\n for (let ac of authConfigs) McpServerOAuthConfig.assertRegistered(ac);\n for (let co of configs) McpServerConfig.assertRegistered(co);\n\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 authConfig: getOAuthConfigSchema(this.instance.authConfig),\n hasTokenRefresh: !!getOAuthConfigImplementation(this.instance.authConfig)\n .tokenRefreshHandler\n }\n : {\n status: 'disabled' as const\n }\n };\n }\n\n handleMcpMessages(opts: {\n config: any;\n authConfig: any;\n client: ClientOpts;\n message: JSONRPCMessage[];\n }) {\n if (this.instance.config) {\n setConfigValue(this.instance.config, opts.config);\n }\n if (opts.authConfig && this.instance.authConfig) {\n setOAuthConfigValue(this.instance.authConfig, opts.authConfig);\n }\n\n return handleMcpMessages(this.#server, opts.client, opts.message);\n }\n\n getOauthAuthorizationUrl(d: McpServerOAuthUrlHandlerParams<any>) {\n if (!this.instance.authConfig) return null;\n let impl = getOAuthConfigImplementation(this.instance.authConfig);\n\n return impl.getAuthUrlHandler(d);\n }\n\n handleOauthCallback(d: McpServerOAuthCallbackHandlerParams<any>) {\n if (!this.instance.authConfig) return null;\n let impl = getOAuthConfigImplementation(this.instance.authConfig);\n\n return impl.callbackHandler(d);\n }\n\n handleOauthTokenRefresh(d: McpServerOAuthTokenRefreshHandlerParams<any>) {\n if (!this.instance.authConfig) return null;\n let impl = getOAuthConfigImplementation(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 McpServerOAuthUrlHandlerParams<OAuthConfig extends {}> = {\n authConfig: OAuthConfig;\n clientId: string;\n clientSecret: string;\n state: string;\n redirectUri: string;\n};\n\nexport type McpServerOAuthUrlHandlerResult = {\n authorizationUrl: string;\n authState?: Record<string, string> | null;\n};\n\nexport type McpServerOAuthUrlHandlerInternal = <OAuthConfig extends {}>(\n d: McpServerOAuthUrlHandlerParams<OAuthConfig>\n) => Promise<McpServerOAuthUrlHandlerResult>;\n\nexport type McpServerOAuthUrlHandler = <OAuthConfig extends {}>(\n d: McpServerOAuthUrlHandlerParams<OAuthConfig>\n) => Promise<string | McpServerOAuthUrlHandlerResult>;\n\nexport type McpServerOAuthCallbackHandlerParams<OAuthConfig extends {}> = {\n authConfig: OAuthConfig;\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 McpServerOAuthCallbackHandlerResult = {\n accessToken: string;\n refreshToken?: string;\n expiresIn?: number;\n scope?: string;\n tokenType?: string;\n [key: string]: any;\n};\n\nexport type McpServerOAuthCallbackHandler = <OAuthConfig extends {}>(\n d: McpServerOAuthCallbackHandlerParams<OAuthConfig>\n) => Promise<McpServerOAuthCallbackHandlerResult>;\n\nexport type McpServerOAuthTokenRefreshHandlerParams<OAuthConfig extends {}> = {\n authConfig: OAuthConfig;\n authState: Record<string, string>;\n refreshToken: string;\n clientId: string;\n clientSecret: string;\n};\n\nexport type McpServerOAuthTokenRefreshHandlerResult = {\n accessToken: string;\n refreshToken?: string;\n expiresIn?: number;\n scope?: string;\n tokenType?: string;\n [key: string]: any;\n};\n\nexport type McpServerOAuthTokenHandlers = {\n getAuthorizationUrl: McpServerOAuthUrlHandler;\n handleCallback: McpServerOAuthCallbackHandler;\n refreshToken?: McpServerOAuthTokenRefreshHandler;\n};\n\nexport type McpServerOAuthTokenRefreshHandler = <OAuthConfig extends {}>(\n d: McpServerOAuthTokenRefreshHandlerParams<OAuthConfig>\n) => Promise<McpServerOAuthTokenRefreshHandlerResult>;\n\nexport type McpServerOAuthValue = {\n accessToken: string;\n expiresIn?: number;\n scope?: string;\n tokenType?: string;\n [key: string]: any;\n};\n\nexport let authConfigs = new Set<McpServerOAuthConfig<any>>();\n\nexport class McpServerOAuthConfig<OAuthConfig extends {}> {\n #value: McpServerOAuthValue | null = null;\n #isRegistered = false;\n\n #getAuthUrlHandler?: McpServerOAuthUrlHandlerInternal;\n #callbackHandler?: McpServerOAuthCallbackHandler;\n #tokenRefreshHandler?: McpServerOAuthTokenRefreshHandler;\n\n private constructor(public readonly schema: z.ZodType<OAuthConfig>) {\n authConfigs.add(this);\n }\n\n static create<OAuthConfig extends {}>(\n ...args:\n | [z.ZodType<OAuthConfig>, McpServerOAuthTokenHandlers]\n | [McpServerOAuthTokenHandlers]\n ) {\n let schema = args.length == 2 ? args[0] : undefined;\n let handlers = args.length == 2 ? args[1] : args[0];\n\n let config = new McpServerOAuthConfig(schema ?? (z.object({}) as z.ZodType<OAuthConfig>));\n\n config.getAuthorizationUrl(handlers.getAuthorizationUrl);\n config.handleCallback(handlers.handleCallback);\n if (handlers.refreshToken) {\n config.refreshToken(handlers.refreshToken);\n }\n\n return config.build();\n }\n\n static getImplementation(config: McpServerOAuthConfig<any>) {\n if (!config.#getAuthUrlHandler || !config.#callbackHandler) {\n throw new Error('MCP Server auth config is missing required handlers');\n }\n\n return {\n setValue: config.setValue.bind(config),\n registered: config.registered.bind(config),\n\n getAuthUrlHandler: config.#getAuthUrlHandler,\n callbackHandler: config.#callbackHandler,\n tokenRefreshHandler: config.#tokenRefreshHandler\n };\n }\n\n static assertRegistered(config: McpServerOAuthConfig<any>) {\n if (!config.#isRegistered) {\n throw new Error(\n 'MCP Server auth config is not registered with `createMcpServer`. Please pass your OAuth config as `authConfig` when creating the server.'\n );\n }\n }\n\n getAuthorizationUrl(cb: McpServerOAuthUrlHandler) {\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: McpServerOAuthCallbackHandler) {\n this.#callbackHandler = cb;\n return this;\n }\n\n refreshToken(cb: McpServerOAuthTokenRefreshHandler) {\n this.#tokenRefreshHandler = cb;\n return this;\n }\n\n build(): OAuthConfig {\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 || !self.#isRegistered) {\n throw new Error(\n 'MCP Server auth config is not registered with `createMcpServer`. Please pass your OAuth config as `authConfig` when creating the server.'\n );\n }\n\n return (self.#value as any)[prop];\n }\n }\n ) as any as OAuthConfig;\n }\n\n private setValue(value: McpServerOAuthValue) {\n this.#value = value;\n }\n\n private registered() {\n this.#isRegistered = true;\n }\n}\n\nexport let createOAuth = <Config extends {}>(\n ...args: [z.ZodType<Config>, McpServerOAuthTokenHandlers] | [McpServerOAuthTokenHandlers]\n) => McpServerOAuthConfig.create(...args);\n\nexport let oAuth = createOAuth;\n\nexport let getOAuthConfigImplementation = <Config extends {}>(configValue: any) => {\n let self = configValue['__config__'] as McpServerOAuthConfig<Config>;\n return McpServerOAuthConfig.getImplementation(self);\n};\n\nexport let setOAuthConfigValue = <Config extends {}>(\n configValue: any,\n value: McpServerOAuthValue\n) => {\n let self = configValue['__config__'] as McpServerOAuthConfig<Config>;\n let impl = McpServerOAuthConfig.getImplementation(self);\n\n impl.setValue(value);\n impl.registered();\n};\n\nexport let registerOAuthConfig = <Config extends {}>(configValue: any) => {\n let self = configValue['__config__'] as McpServerOAuthConfig<Config>;\n let impl = McpServerOAuthConfig.getImplementation(self);\n impl.registered();\n};\n\nexport let getOAuthConfigSchema = <Config extends {}>(configValue: any) => {\n let self = configValue['__config__'] as McpServerOAuthConfig<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 { 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 let configs = new Set<McpServerConfig<any>>();\n\nexport class McpServerConfig<Config extends {}> {\n #value: Config | null = null;\n #isRegistered = false;\n\n private constructor(public readonly schema: z.ZodType<Config>) {\n configs.add(this);\n }\n\n static create<Config extends {}>(schema: z.ZodType<Config>) {\n return new McpServerConfig(schema);\n }\n\n static assertRegistered(config: McpServerConfig<any>) {\n if (!config.#isRegistered) {\n throw new Error(\n 'MCP Server config is not registered with `createMcpServer`. Please pass your config as `config` when creating the server.'\n );\n }\n }\n\n setValue(value: unknown) {\n let parsed = this.schema.parse(value);\n this.#value = parsed;\n }\n\n registered() {\n this.#isRegistered = true;\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 || !self.#isRegistered) {\n throw new Error(\n 'MCP Server config is not registered with `createMcpServer`. Please pass your config as `config` when creating the server.'\n );\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 self.registered();\n};\n\nexport let registerConfig = <Config extends {}>(configValue: any) => {\n let self = configValue['__config__'] as McpServerConfig<Config>;\n self.registered();\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 handleMcpMessage = z.object({\n type: z.literal('metorial-mcp.handle-mcp-message'),\n params: z.object({\n authConfig: z.optional(z.record(z.string(), z.any())),\n config: z.record(z.string(), z.any()),\n client: z.object({\n client: z.record(z.string(), z.any()),\n capabilities: z.record(z.string(), z.any())\n }),\n messages: z.array(z.any())\n })\n});\ntype HandleMcpMessage = z.infer<typeof handleMcpMessage>;\n\nlet allMessages = z.union([\n discoverMessage,\n authUrlMessage,\n oauthCallbackMessage,\n oauthTokenRefreshMessage,\n handleMcpMessage\n]);\n\nexport type McpServerInstanceMessage =\n | DiscoverMessage\n | AuthUrlMessage\n | OauthCallbackMessage\n | OauthTokenRefreshMessage\n | HandleMcpMessage;\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 case 'metorial-mcp.handle-mcp-message': {\n return instance.handleMcpMessages({\n config: parsed.params.config || {},\n authConfig: parsed.params.authConfig || {},\n client: parsed.params.client as any,\n message: parsed.params.messages\n });\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 handleMcpMessages: async (d: Parameters<McpServerInstance['handleMcpMessages']>[0]) => {\n return send({\n type: 'metorial-mcp.handle-mcp-message',\n params: {\n config: d.config,\n authConfig: d.authConfig,\n client: d.client,\n messages: d.message\n }\n }) as Promise<Awaited<ReturnType<McpServerInstance['handleMcpMessages']>>>;\n }\n };\n};\n","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 createOAuth,\n oAuth,\n type McpServerOAuthCallbackHandler,\n type McpServerOAuthCallbackHandlerParams,\n type McpServerOAuthCallbackHandlerResult,\n type McpServerOAuthConfig,\n type McpServerOAuthTokenRefreshHandler,\n type McpServerOAuthTokenRefreshHandlerParams,\n type McpServerOAuthTokenRefreshHandlerResult,\n type McpServerOAuthUrlHandler,\n type McpServerOAuthUrlHandlerInternal,\n type McpServerOAuthUrlHandlerParams,\n type McpServerOAuthUrlHandlerResult,\n type McpServerOAuthValue\n} from './auth';\n\nexport { config, createConfig, type McpServerConfig } from './config';\n\nexport {\n McpTool,\n type McpServerInfo,\n type McpToolAnnotations,\n type McpToolHandlerOutput,\n type McpToolHandlerOutputSync,\n type McpToolImplementation,\n type McpToolOpts\n} from '@metorial/mcp';\n"],"mappings":";AAAA;AAAA,EACE,mBAAmB;AAAA,OAEd;;;ACHP,OAAO,OAAO;AAmFP,IAAI,cAAc,oBAAI,IAA+B;AAErD,IAAM,uBAAN,MAAM,sBAA6C;AAAA,EAQhD,YAA4B,QAAgC;AAAhC;AAClC,gBAAY,IAAI,IAAI;AAAA,EACtB;AAAA,EATA,SAAqC;AAAA,EACrC,gBAAgB;AAAA,EAEhB;AAAA,EACA;AAAA,EACA;AAAA,EAMA,OAAO,UACF,MAGH;AACA,QAAI,SAAS,KAAK,UAAU,IAAI,KAAK,CAAC,IAAI;AAC1C,QAAI,WAAW,KAAK,UAAU,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC;AAElD,QAAIA,UAAS,IAAI,sBAAqB,UAAW,EAAE,OAAO,CAAC,CAAC,CAA4B;AAExF,IAAAA,QAAO,oBAAoB,SAAS,mBAAmB;AACvD,IAAAA,QAAO,eAAe,SAAS,cAAc;AAC7C,QAAI,SAAS,cAAc;AACzB,MAAAA,QAAO,aAAa,SAAS,YAAY;AAAA,IAC3C;AAEA,WAAOA,QAAO,MAAM;AAAA,EACtB;AAAA,EAEA,OAAO,kBAAkBA,SAAmC;AAC1D,QAAI,CAACA,QAAO,sBAAsB,CAACA,QAAO,kBAAkB;AAC1D,YAAM,IAAI,MAAM,qDAAqD;AAAA,IACvE;AAEA,WAAO;AAAA,MACL,UAAUA,QAAO,SAAS,KAAKA,OAAM;AAAA,MACrC,YAAYA,QAAO,WAAW,KAAKA,OAAM;AAAA,MAEzC,mBAAmBA,QAAO;AAAA,MAC1B,iBAAiBA,QAAO;AAAA,MACxB,qBAAqBA,QAAO;AAAA,IAC9B;AAAA,EACF;AAAA,EAEA,OAAO,iBAAiBA,SAAmC;AACzD,QAAI,CAACA,QAAO,eAAe;AACzB,YAAM,IAAI;AAAA,QACR;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAAA,EAEA,oBAAoB,IAA8B;AAChD,SAAK,qBAAqB,OAAM,MAAK;AACnC,UAAI,MAAM,MAAM,GAAG,CAAC;AACpB,UAAI,OAAO,OAAO,UAAU;AAC1B,eAAO,EAAE,kBAAkB,IAAI;AAAA,MACjC;AACA,aAAO;AAAA,IACT;AACA,WAAO;AAAA,EACT;AAAA,EAEA,eAAe,IAAmC;AAChD,SAAK,mBAAmB;AACxB,WAAO;AAAA,EACT;AAAA,EAEA,aAAa,IAAuC;AAClD,SAAK,uBAAuB;AAC5B,WAAO;AAAA,EACT;AAAA,EAEA,QAAqB;AACnB,QAAI,CAAC,KAAK,sBAAsB,CAAC,KAAK,kBAAkB;AACtD,YAAM,IAAI,MAAM,qDAAqD;AAAA,IACvE;AAEA,QAAI,OAAO;AAIX,WAAO,IAAI;AAAA,MACT,CAAC;AAAA,MACD;AAAA,QACE,KAAK,CAAC,QAAQ,MAAM,aAAa;AAC/B,cAAI,QAAQ,cAAc;AACxB,mBAAO;AAAA,UACT;AAEA,cAAI,KAAK,WAAW,QAAQ,CAAC,KAAK,eAAe;AAC/C,kBAAM,IAAI;AAAA,cACR;AAAA,YACF;AAAA,UACF;AAEA,iBAAQ,KAAK,OAAe,IAAI;AAAA,QAClC;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAAA,EAEQ,SAAS,OAA4B;AAC3C,SAAK,SAAS;AAAA,EAChB;AAAA,EAEQ,aAAa;AACnB,SAAK,gBAAgB;AAAA,EACvB;AACF;AAEO,IAAI,cAAc,IACpB,SACA,qBAAqB,OAAO,GAAG,IAAI;AAEjC,IAAI,QAAQ;AAEZ,IAAI,+BAA+B,CAAoB,gBAAqB;AACjF,MAAI,OAAO,YAAY,YAAY;AACnC,SAAO,qBAAqB,kBAAkB,IAAI;AACpD;AAEO,IAAI,sBAAsB,CAC/B,aACA,UACG;AACH,MAAI,OAAO,YAAY,YAAY;AACnC,MAAI,OAAO,qBAAqB,kBAAkB,IAAI;AAEtD,OAAK,SAAS,KAAK;AACnB,OAAK,WAAW;AAClB;AAEO,IAAI,sBAAsB,CAAoB,gBAAqB;AACxE,MAAI,OAAO,YAAY,YAAY;AACnC,MAAI,OAAO,qBAAqB,kBAAkB,IAAI;AACtD,OAAK,WAAW;AAClB;AAEO,IAAI,uBAAuB,CAAoB,gBAAqB;AACzE,MAAI,OAAO,YAAY,YAAY;AACnC,SAAO,KAAK,OAAO,aAAa;AAAA,IAC9B,iBAAiB;AAAA,IACjB,UAAU,SAAO;AACf,UAAI,MAAM,IAAI,UAAU,KAAK;AAE7B,UAAI,IAAI,SAAS,QAAQ;AACvB,YAAI,WAAW,OAAO;AACtB,YAAI,WAAW,SAAS;AAAA,MAC1B;AACA,UAAI,IAAI,SAAS,UAAU;AACzB,YAAI,WAAW,OAAO;AAAA,MACxB;AAAA,IACF;AAAA,EACF,CAAC;AACH;;;AClPA,SAAS,+BAA+B;AACxC,SAAS,cAAc;AAOvB,OAAOC,QAAO;AAUP,IAAI,YAAY,OACrB,QACA,sBACA,SACG;AACH,MAAI,YAAY,wBAAwB;AACxC,QAAM,OAAO,QAAQ,UAAU,MAAM;AAErC,MAAI,SAAS,IAAI,OAAO,KAAK,MAAM;AAEnC,SAAO,qBAAqB,KAAK,YAAY;AAC7C,SAAO,8BAA8B;AAErC,QAAM,OAAO,QAAQ,UAAU,MAAM;AAErC,SAAO;AACT;AAEO,IAAI,oBAAoB,OAC7B,QACA,MACA,aACG;AACH,MAAI,YAA8B,CAAC;AAEnC,MAAI,SAAS,MAAM;AAAA,IACjB;AAAA,IACA,OAAM,iBAAgB;AACpB,gBAAU,KAAK,YAA8B;AAAA,IAC/C;AAAA,IACA;AAAA,EACF;AAEA,MAAI,QAAsB;AAE1B,WAAS,WAAW,UAAU;AAC5B,QAAI;AACF,UAAI,QAAQ,SAAS;AACnB,YAAI,MAAM,MAAM,OAAO,QAAQ,SAAgBA,GAAE,IAAI,CAAC;AACtD,kBAAU,KAAK,GAAG;AAAA,MACpB,OAAO;AACL,cAAM,OAAO,aAAa,OAAc;AAAA,MAC1C;AAAA,IACF,SAAS,KAAK;AACZ,cAAQ;AACR;AAAA,IACF;AAAA,EACF;AAEA,SAAO,EAAE,UAAU,WAAW,MAAM;AACtC;;;AClEO,IAAI,UAAU,oBAAI,IAA0B;AAE5C,IAAM,kBAAN,MAAM,iBAAmC;AAAA,EAItC,YAA4B,QAA2B;AAA3B;AAClC,YAAQ,IAAI,IAAI;AAAA,EAClB;AAAA,EALA,SAAwB;AAAA,EACxB,gBAAgB;AAAA,EAMhB,OAAO,OAA0B,QAA2B;AAC1D,WAAO,IAAI,iBAAgB,MAAM;AAAA,EACnC;AAAA,EAEA,OAAO,iBAAiBC,SAA8B;AACpD,QAAI,CAACA,QAAO,eAAe;AACzB,YAAM,IAAI;AAAA,QACR;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAAA,EAEA,SAAS,OAAgB;AACvB,QAAI,SAAS,KAAK,OAAO,MAAM,KAAK;AACpC,SAAK,SAAS;AAAA,EAChB;AAAA,EAEA,aAAa;AACX,SAAK,gBAAgB;AAAA,EACvB;AAAA,EAEA,QAAgB;AACd,QAAI,OAAO;AAIX,WAAO,IAAI;AAAA,MACT,CAAC;AAAA,MACD;AAAA,QACE,KAAK,CAAC,QAAQ,MAAM,aAAa;AAC/B,cAAI,QAAQ,cAAc;AACxB,mBAAO;AAAA,UACT;AAEA,cAAI,KAAK,WAAW,QAAQ,CAAC,KAAK,eAAe;AAC/C,kBAAM,IAAI;AAAA,cACR;AAAA,YACF;AAAA,UACF;AAEA,iBAAQ,KAAK,OAAe,IAAI;AAAA,QAClC;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACF;AAEO,IAAI,eAAe,CAAoB,WAA8B;AAC1E,SAAO,gBAAgB,OAAO,MAAM,EAAE,MAAM;AAC9C;AAEO,IAAI,SAAS,CAAoB,WAA8B,aAAa,MAAM;AAElF,IAAI,iBAAiB,CAAoB,aAAkB,UAAkB;AAClF,MAAI,OAAO,YAAY,YAAY;AACnC,OAAK,SAAS,KAAK;AACnB,OAAK,WAAW;AAClB;AAEO,IAAI,iBAAiB,CAAoB,gBAAqB;AACnE,MAAI,OAAO,YAAY,YAAY;AACnC,OAAK,WAAW;AAClB;AAEO,IAAI,kBAAkB,CAAoB,gBAAqB;AACpE,MAAI,OAAO,YAAY,YAAY;AACnC,SAAO,KAAK,OAAO,aAAa;AAAA,IAC9B,iBAAiB;AAAA,IACjB,UAAU,SAAO;AACf,UAAI,MAAM,IAAI,UAAU,KAAK;AAE7B,UAAI,IAAI,SAAS,QAAQ;AACvB,YAAI,WAAW,OAAO;AACtB,YAAI,WAAW,SAAS;AAAA,MAC1B;AACA,UAAI,IAAI,SAAS,UAAU;AACzB,YAAI,WAAW,OAAO;AAAA,MACxB;AAAA,IACF;AAAA,EACF,CAAC;AACH;;;AHjEA,IAAI,YAAY,CAAC,aAAsC;AACrD,MAAI,YAAY,UAAU;AACxB,WAAO,SAAS;AAAA,EAClB,OAAO;AACL,WAAO,wBAAwB,QAAQ;AAAA,EACzC;AACF;AAOO,IAAM,oBAAN,MAAM,mBAAkB;AAAA,EAGrB,YAAoB,UAAiC;AAAjC;AAC1B,QAAI,SAAS,OAAQ,gBAAe,SAAS,MAAM;AACnD,QAAI,SAAS,WAAY,qBAAoB,SAAS,UAAU;AAEhE,aAAS,MAAM,YAAa,sBAAqB,iBAAiB,EAAE;AACpE,aAAS,MAAM,QAAS,iBAAgB,iBAAiB,EAAE;AAE3D,SAAK,UAAU,UAAU,QAAQ;AAAA,EACnC;AAAA,EAVA;AAAA,EAYA,OAAO,OAAO,UAAiC;AAC7C,WAAO,IAAI,mBAAkB,QAAQ;AAAA,EACvC;AAAA,EAEA,WAAW;AACT,WAAO;AAAA,MACL,cAAc,KAAK,SAAS,SAAS,gBAAgB,KAAK,SAAS,MAAM,IAAI;AAAA,MAC7E,OAAO,KAAK,SAAS,aACjB;AAAA,QACE,QAAQ;AAAA,QACR,YAAY,qBAAqB,KAAK,SAAS,UAAU;AAAA,QACzD,iBAAiB,CAAC,CAAC,6BAA6B,KAAK,SAAS,UAAU,EACrE;AAAA,MACL,IACA;AAAA,QACE,QAAQ;AAAA,MACV;AAAA,IACN;AAAA,EACF;AAAA,EAEA,kBAAkB,MAKf;AACD,QAAI,KAAK,SAAS,QAAQ;AACxB,qBAAe,KAAK,SAAS,QAAQ,KAAK,MAAM;AAAA,IAClD;AACA,QAAI,KAAK,cAAc,KAAK,SAAS,YAAY;AAC/C,0BAAoB,KAAK,SAAS,YAAY,KAAK,UAAU;AAAA,IAC/D;AAEA,WAAO,kBAAkB,KAAK,SAAS,KAAK,QAAQ,KAAK,OAAO;AAAA,EAClE;AAAA,EAEA,yBAAyB,GAAwC;AAC/D,QAAI,CAAC,KAAK,SAAS,WAAY,QAAO;AACtC,QAAI,OAAO,6BAA6B,KAAK,SAAS,UAAU;AAEhE,WAAO,KAAK,kBAAkB,CAAC;AAAA,EACjC;AAAA,EAEA,oBAAoB,GAA6C;AAC/D,QAAI,CAAC,KAAK,SAAS,WAAY,QAAO;AACtC,QAAI,OAAO,6BAA6B,KAAK,SAAS,UAAU;AAEhE,WAAO,KAAK,gBAAgB,CAAC;AAAA,EAC/B;AAAA,EAEA,wBAAwB,GAAiD;AACvE,QAAI,CAAC,KAAK,SAAS,WAAY,QAAO;AACtC,QAAI,OAAO,6BAA6B,KAAK,SAAS,UAAU;AAEhE,QAAI,CAAC,KAAK,qBAAqB;AAC7B,aAAO;AAAA,IACT;AAEA,WAAO,KAAK,oBAAoB,CAAC;AAAA,EACnC;AACF;AAEO,IAAI,kBAAkB,CAAC,aAAoC;AAChE,SAAO,kBAAkB,OAAO,QAAQ;AAC1C;;;AIrHA,OAAOC,QAAO;AAGd,IAAI,kBAAkBA,GAAE,OAAO;AAAA,EAC7B,MAAMA,GAAE,QAAQ,uBAAuB;AACzC,CAAC;AAGD,IAAI,iBAAiBA,GAAE,OAAO;AAAA,EAC5B,MAAMA,GAAE,QAAQ,0CAA0C;AAAA,EAC1D,QAAQA,GAAE,OAAO;AAAA,IACf,YAAYA,GAAE,OAAOA,GAAE,OAAO,GAAGA,GAAE,IAAI,CAAC;AAAA,IACxC,UAAUA,GAAE,OAAO;AAAA,IACnB,cAAcA,GAAE,OAAO;AAAA,IACvB,OAAOA,GAAE,OAAO;AAAA,IAChB,aAAaA,GAAE,OAAO;AAAA,EACxB,CAAC;AACH,CAAC;AAGD,IAAI,uBAAuBA,GAAE,OAAO;AAAA,EAClC,MAAMA,GAAE,QAAQ,oCAAoC;AAAA,EACpD,QAAQA,GAAE,OAAO;AAAA,IACf,YAAYA,GAAE,OAAOA,GAAE,OAAO,GAAGA,GAAE,IAAI,CAAC;AAAA,IACxC,WAAWA,GAAE,OAAOA,GAAE,OAAO,GAAGA,GAAE,OAAO,CAAC;AAAA,IAC1C,UAAUA,GAAE,OAAO;AAAA,IACnB,cAAcA,GAAE,OAAO;AAAA,IACvB,MAAMA,GAAE,OAAO;AAAA,IACf,OAAOA,GAAE,OAAO;AAAA,IAChB,aAAaA,GAAE,OAAO;AAAA,IACtB,aAAaA,GAAE,OAAO;AAAA,IACtB,kBAAkBA,GAAE,OAAO;AAAA,EAC7B,CAAC;AACH,CAAC;AAGD,IAAI,2BAA2BA,GAAE,OAAO;AAAA,EACtC,MAAMA,GAAE,QAAQ,yCAAyC;AAAA,EACzD,QAAQA,GAAE,OAAO;AAAA,IACf,YAAYA,GAAE,OAAOA,GAAE,OAAO,GAAGA,GAAE,IAAI,CAAC;AAAA,IACxC,WAAWA,GAAE,OAAOA,GAAE,OAAO,GAAGA,GAAE,OAAO,CAAC;AAAA,IAC1C,cAAcA,GAAE,OAAO;AAAA,IACvB,UAAUA,GAAE,OAAO;AAAA,IACnB,cAAcA,GAAE,OAAO;AAAA,EACzB,CAAC;AACH,CAAC;AAGD,IAAI,mBAAmBA,GAAE,OAAO;AAAA,EAC9B,MAAMA,GAAE,QAAQ,iCAAiC;AAAA,EACjD,QAAQA,GAAE,OAAO;AAAA,IACf,YAAYA,GAAE,SAASA,GAAE,OAAOA,GAAE,OAAO,GAAGA,GAAE,IAAI,CAAC,CAAC;AAAA,IACpD,QAAQA,GAAE,OAAOA,GAAE,OAAO,GAAGA,GAAE,IAAI,CAAC;AAAA,IACpC,QAAQA,GAAE,OAAO;AAAA,MACf,QAAQA,GAAE,OAAOA,GAAE,OAAO,GAAGA,GAAE,IAAI,CAAC;AAAA,MACpC,cAAcA,GAAE,OAAOA,GAAE,OAAO,GAAGA,GAAE,IAAI,CAAC;AAAA,IAC5C,CAAC;AAAA,IACD,UAAUA,GAAE,MAAMA,GAAE,IAAI,CAAC;AAAA,EAC3B,CAAC;AACH,CAAC;AAGD,IAAI,cAAcA,GAAE,MAAM;AAAA,EACxB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,CAAC;AASM,IAAI,gBAAgB,OACzB,UACA,aAEA,QAAQ;AAAA,EACN,SAAS,IAAI,OAAM,YAAW;AAC5B,QAAI,SAAS,YAAY,MAAM,OAAO;AAEtC,YAAQ,OAAO,MAAM;AAAA,MACnB,KAAK,yBAAyB;AAC5B,eAAO,SAAS,SAAS;AAAA,MAC3B;AAAA,MACA,KAAK,4CAA4C;AAC/C,eAAO,SAAS,yBAAyB,OAAO,MAAM;AAAA,MACxD;AAAA,MACA,KAAK,sCAAsC;AACzC,eAAO,SAAS,oBAAoB,OAAO,MAAM;AAAA,MACnD;AAAA,MACA,KAAK,2CAA2C;AAC9C,eAAO,SAAS,wBAAwB,OAAO,MAAM;AAAA,MACvD;AAAA,MACA,KAAK,mCAAmC;AACtC,eAAO,SAAS,kBAAkB;AAAA,UAChC,QAAQ,OAAO,OAAO,UAAU,CAAC;AAAA,UACjC,YAAY,OAAO,OAAO,cAAc,CAAC;AAAA,UACzC,QAAQ,OAAO,OAAO;AAAA,UACtB,SAAS,OAAO,OAAO;AAAA,QACzB,CAAC;AAAA,MACH;AAAA,IACF;AAEA,UAAM,IAAI,MAAM,yBAA0B,QAAgB,IAAI,EAAE;AAAA,EAClE,CAAC;AACH;AAIK,IAAI,gBAAgB,CACzB,cAGG;AACH,MAAI,QAIE,CAAC;AACP,MAAI,SAAS,EAAE,SAAS,MAAM;AAC9B,MAAI,YAAY,EAAE,SAAS,MAAM;AAEjC,MAAI,OAAO,OAAO,YAAsC;AACtD,QAAI,UAAU,IAAI,QAAa,CAAC,SAAS,WAAW;AAClD,YAAM,KAAK,EAAE,KAAK,SAAS,SAAS,OAAO,CAAC;AAAA,IAC9C,CAAC;AAED,QAAI,CAAC,UAAU,SAAS;AACtB,gBAAU,UAAU;AAEpB,iBAAW,YAAY;AACrB,eAAO,UAAU;AAEjB,YAAI;AACF,cAAI,MAAM,MAAM,UAAU,MAAM,IAAI,OAAK,EAAE,GAAG,CAAC;AAC/C,cAAI,QAAQ,CAAC,GAAG,MAAM;AACpB,kBAAM,CAAC,EAAE,QAAQ,CAAC;AAAA,UACpB,CAAC;AAAA,QACH,SAAS,KAAK;AACZ,gBAAM,QAAQ,OAAK;AACjB,cAAE,OAAO,GAAG;AAAA,UACd,CAAC;AAAA,QACH,UAAE;AACA,kBAAQ,CAAC;AAAA,QACX;AAAA,MACF,GAAG,CAAC;AAAA,IACN;AAEA,WAAO;AAAA,EACT;AAEA,SAAO;AAAA,IACL,UAAU,YAAY;AACpB,aAAO,KAAK,EAAE,MAAM,wBAAwB,CAAC;AAAA,IAG/C;AAAA,IAEA,0BAA0B,OACxB,MACG;AACH,aAAO,KAAK;AAAA,QACV,MAAM;AAAA,QACN,QAAQ;AAAA,MACV,CAAC;AAAA,IACH;AAAA,IAEA,qBAAqB,OACnB,MACG;AACH,aAAO,KAAK;AAAA,QACV,MAAM;AAAA,QACN,QAAQ;AAAA,MACV,CAAC;AAAA,IACH;AAAA,IAEA,yBAAyB,OACvB,MACG;AACH,aAAO,KAAK;AAAA,QACV,MAAM;AAAA,QACN,QAAQ;AAAA,MACV,CAAC;AAAA,IACH;AAAA,IAEA,mBAAmB,OAAO,MAA6D;AACrF,aAAO,KAAK;AAAA,QACV,MAAM;AAAA,QACN,QAAQ;AAAA,UACN,QAAQ,EAAE;AAAA,UACV,YAAY,EAAE;AAAA,UACd,QAAQ,EAAE;AAAA,UACV,UAAU,EAAE;AAAA,QACd;AAAA,MACF,CAAC;AAAA,IACH;AAAA,EACF;AACF;;;ACzKA;AAAA,EACE;AAAA,OAOK;","names":["config","z","config","z"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@metorial/mcp-server",
3
- "version": "1.0.0-rc.4",
3
+ "version": "1.0.0-rc.6",
4
4
  "publishConfig": {
5
5
  "access": "public"
6
6
  },
package/src/adapter.ts CHANGED
@@ -186,6 +186,18 @@ export let clientAdapter = (
186
186
  type: 'metorial-mcp.handle-oauth-token-refresh',
187
187
  params: d
188
188
  }) as Promise<Awaited<ReturnType<McpServerInstance['handleOauthTokenRefresh']>>>;
189
+ },
190
+
191
+ handleMcpMessages: async (d: Parameters<McpServerInstance['handleMcpMessages']>[0]) => {
192
+ return send({
193
+ type: 'metorial-mcp.handle-mcp-message',
194
+ params: {
195
+ config: d.config,
196
+ authConfig: d.authConfig,
197
+ client: d.client,
198
+ messages: d.message
199
+ }
200
+ }) as Promise<Awaited<ReturnType<McpServerInstance['handleMcpMessages']>>>;
189
201
  }
190
202
  };
191
203
  };
package/src/auth.ts CHANGED
@@ -81,14 +81,19 @@ export type McpServerOAuthValue = {
81
81
  [key: string]: any;
82
82
  };
83
83
 
84
+ export let authConfigs = new Set<McpServerOAuthConfig<any>>();
85
+
84
86
  export class McpServerOAuthConfig<OAuthConfig extends {}> {
85
87
  #value: McpServerOAuthValue | null = null;
88
+ #isRegistered = false;
86
89
 
87
90
  #getAuthUrlHandler?: McpServerOAuthUrlHandlerInternal;
88
91
  #callbackHandler?: McpServerOAuthCallbackHandler;
89
92
  #tokenRefreshHandler?: McpServerOAuthTokenRefreshHandler;
90
93
 
91
- private constructor(public readonly schema: z.ZodType<OAuthConfig>) {}
94
+ private constructor(public readonly schema: z.ZodType<OAuthConfig>) {
95
+ authConfigs.add(this);
96
+ }
92
97
 
93
98
  static create<OAuthConfig extends {}>(
94
99
  ...args:
@@ -106,7 +111,7 @@ export class McpServerOAuthConfig<OAuthConfig extends {}> {
106
111
  config.refreshToken(handlers.refreshToken);
107
112
  }
108
113
 
109
- return config;
114
+ return config.build();
110
115
  }
111
116
 
112
117
  static getImplementation(config: McpServerOAuthConfig<any>) {
@@ -115,14 +120,21 @@ export class McpServerOAuthConfig<OAuthConfig extends {}> {
115
120
  }
116
121
 
117
122
  return {
123
+ setValue: config.setValue.bind(config),
124
+ registered: config.registered.bind(config),
125
+
118
126
  getAuthUrlHandler: config.#getAuthUrlHandler,
119
127
  callbackHandler: config.#callbackHandler,
120
128
  tokenRefreshHandler: config.#tokenRefreshHandler
121
129
  };
122
130
  }
123
131
 
124
- setValue(value: McpServerOAuthValue) {
125
- this.#value = value;
132
+ static assertRegistered(config: McpServerOAuthConfig<any>) {
133
+ if (!config.#isRegistered) {
134
+ throw new Error(
135
+ 'MCP Server auth config is not registered with `createMcpServer`. Please pass your OAuth config as `authConfig` when creating the server.'
136
+ );
137
+ }
126
138
  }
127
139
 
128
140
  getAuthorizationUrl(cb: McpServerOAuthUrlHandler) {
@@ -163,8 +175,10 @@ export class McpServerOAuthConfig<OAuthConfig extends {}> {
163
175
  return self;
164
176
  }
165
177
 
166
- if (self.#value === null) {
167
- throw new Error('MCP Server auth config value not set');
178
+ if (self.#value === null || !self.#isRegistered) {
179
+ throw new Error(
180
+ 'MCP Server auth config is not registered with `createMcpServer`. Please pass your OAuth config as `authConfig` when creating the server.'
181
+ );
168
182
  }
169
183
 
170
184
  return (self.#value as any)[prop];
@@ -172,6 +186,14 @@ export class McpServerOAuthConfig<OAuthConfig extends {}> {
172
186
  }
173
187
  ) as any as OAuthConfig;
174
188
  }
189
+
190
+ private setValue(value: McpServerOAuthValue) {
191
+ this.#value = value;
192
+ }
193
+
194
+ private registered() {
195
+ this.#isRegistered = true;
196
+ }
175
197
  }
176
198
 
177
199
  export let createOAuth = <Config extends {}>(
@@ -190,7 +212,16 @@ export let setOAuthConfigValue = <Config extends {}>(
190
212
  value: McpServerOAuthValue
191
213
  ) => {
192
214
  let self = configValue['__config__'] as McpServerOAuthConfig<Config>;
193
- self.setValue(value);
215
+ let impl = McpServerOAuthConfig.getImplementation(self);
216
+
217
+ impl.setValue(value);
218
+ impl.registered();
219
+ };
220
+
221
+ export let registerOAuthConfig = <Config extends {}>(configValue: any) => {
222
+ let self = configValue['__config__'] as McpServerOAuthConfig<Config>;
223
+ let impl = McpServerOAuthConfig.getImplementation(self);
224
+ impl.registered();
194
225
  };
195
226
 
196
227
  export let getOAuthConfigSchema = <Config extends {}>(configValue: any) => {
package/src/config.ts CHANGED
@@ -1,19 +1,36 @@
1
1
  import z from 'zod';
2
2
 
3
+ export let configs = new Set<McpServerConfig<any>>();
4
+
3
5
  export class McpServerConfig<Config extends {}> {
4
6
  #value: Config | null = null;
7
+ #isRegistered = false;
5
8
 
6
- private constructor(public readonly schema: z.ZodType<Config>) {}
9
+ private constructor(public readonly schema: z.ZodType<Config>) {
10
+ configs.add(this);
11
+ }
7
12
 
8
13
  static create<Config extends {}>(schema: z.ZodType<Config>) {
9
14
  return new McpServerConfig(schema);
10
15
  }
11
16
 
17
+ static assertRegistered(config: McpServerConfig<any>) {
18
+ if (!config.#isRegistered) {
19
+ throw new Error(
20
+ 'MCP Server config is not registered with `createMcpServer`. Please pass your config as `config` when creating the server.'
21
+ );
22
+ }
23
+ }
24
+
12
25
  setValue(value: unknown) {
13
26
  let parsed = this.schema.parse(value);
14
27
  this.#value = parsed;
15
28
  }
16
29
 
30
+ registered() {
31
+ this.#isRegistered = true;
32
+ }
33
+
17
34
  value(): Config {
18
35
  let self = this;
19
36
 
@@ -27,8 +44,10 @@ export class McpServerConfig<Config extends {}> {
27
44
  return self;
28
45
  }
29
46
 
30
- if (self.#value === null) {
31
- throw new Error('MCP Server config value not set');
47
+ if (self.#value === null || !self.#isRegistered) {
48
+ throw new Error(
49
+ 'MCP Server config is not registered with `createMcpServer`. Please pass your config as `config` when creating the server.'
50
+ );
32
51
  }
33
52
 
34
53
  return (self.#value as any)[prop];
@@ -47,6 +66,12 @@ export let config = <Config extends {}>(schema: z.ZodType<Config>) => createConf
47
66
  export let setConfigValue = <Config extends {}>(configValue: any, value: Config) => {
48
67
  let self = configValue['__config__'] as McpServerConfig<Config>;
49
68
  self.setValue(value);
69
+ self.registered();
70
+ };
71
+
72
+ export let registerConfig = <Config extends {}>(configValue: any) => {
73
+ let self = configValue['__config__'] as McpServerConfig<Config>;
74
+ self.registered();
50
75
  };
51
76
 
52
77
  export let getConfigSchema = <Config extends {}>(configValue: any) => {
package/src/instance.ts CHANGED
@@ -5,15 +5,24 @@ import {
5
5
  import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
6
6
  import { JSONRPCMessage } from '@modelcontextprotocol/sdk/types.js';
7
7
  import {
8
+ authConfigs,
8
9
  getOAuthConfigImplementation,
9
10
  getOAuthConfigSchema,
10
11
  McpServerOAuthCallbackHandlerParams,
12
+ McpServerOAuthConfig,
11
13
  McpServerOAuthTokenRefreshHandlerParams,
12
14
  McpServerOAuthUrlHandlerParams,
15
+ registerOAuthConfig,
13
16
  setOAuthConfigValue
14
17
  } from './auth';
15
18
  import { ClientOpts, handleMcpMessages } from './client';
16
- import { getConfigSchema, setConfigValue } from './config';
19
+ import {
20
+ configs,
21
+ getConfigSchema,
22
+ McpServerConfig,
23
+ registerConfig,
24
+ setConfigValue
25
+ } from './config';
17
26
 
18
27
  export type McpServerInstanceServer = CreateMcpServerOpts | { server: McpServer };
19
28
  let getServer = (instance: McpServerInstanceServer) => {
@@ -33,6 +42,12 @@ export class McpServerInstance {
33
42
  #server: McpServer;
34
43
 
35
44
  private constructor(private instance: McpServerInstanceOpts) {
45
+ if (instance.config) registerConfig(instance.config);
46
+ if (instance.authConfig) registerOAuthConfig(instance.authConfig);
47
+
48
+ for (let ac of authConfigs) McpServerOAuthConfig.assertRegistered(ac);
49
+ for (let co of configs) McpServerConfig.assertRegistered(co);
50
+
36
51
  this.#server = getServer(instance);
37
52
  }
38
53