@metorial/mcp-server 1.0.0-rc.1 → 1.0.0-rc.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.cjs CHANGED
@@ -30,6 +30,7 @@ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: tru
30
30
  // src/index.ts
31
31
  var index_exports = {};
32
32
  __export(index_exports, {
33
+ McpTool: () => import_mcp2.McpTool,
33
34
  auth: () => auth,
34
35
  clientAdapter: () => clientAdapter,
35
36
  config: () => config,
@@ -116,6 +117,26 @@ var getAuthConfigImplementation = (configValue) => {
116
117
  let self = configValue["__config__"];
117
118
  return McpServerAuthConfig.getImplementation(self);
118
119
  };
120
+ var setAuthConfigValue = (configValue, value) => {
121
+ let self = configValue["__config__"];
122
+ self.setValue(value);
123
+ };
124
+ var getAuthConfigSchema = (configValue) => {
125
+ let self = configValue["__config__"];
126
+ return self.schema.toJSONSchema({
127
+ unrepresentable: "any",
128
+ override: (ctx) => {
129
+ let def = ctx.zodSchema._zod.def;
130
+ if (def.type === "date") {
131
+ ctx.jsonSchema.type = "string";
132
+ ctx.jsonSchema.format = "date-time";
133
+ }
134
+ if (def.type === "bigint") {
135
+ ctx.jsonSchema.type = "number";
136
+ }
137
+ }
138
+ });
139
+ };
119
140
 
120
141
  // src/client.ts
121
142
  var import_mcp_transport_memory = require("@metorial/mcp-transport-memory");
@@ -234,6 +255,7 @@ var McpServerInstance = class _McpServerInstance {
234
255
  configSchema: this.instance.config ? getConfigSchema(this.instance.config) : null,
235
256
  oauth: this.instance.authConfig ? {
236
257
  status: "enabled",
258
+ authConfig: getAuthConfigSchema(this.instance.authConfig),
237
259
  hasTokenRefresh: !!getAuthConfigImplementation(this.instance.authConfig).tokenRefreshHandler
238
260
  } : {
239
261
  status: "disabled"
@@ -241,7 +263,12 @@ var McpServerInstance = class _McpServerInstance {
241
263
  };
242
264
  }
243
265
  handleMcpMessages(opts) {
244
- setConfigValue(this.instance.config, opts.config);
266
+ if (this.instance.config) {
267
+ setConfigValue(this.instance.config, opts.config);
268
+ }
269
+ if (opts.authConfig && this.instance.authConfig) {
270
+ setAuthConfigValue(this.instance.authConfig, opts.authConfig);
271
+ }
245
272
  return handleMcpMessages(this.#server, opts.client, opts.message);
246
273
  }
247
274
  getOauthAuthorizationUrl(d) {
@@ -306,11 +333,24 @@ var oauthTokenRefreshMessage = import_zod3.default.object({
306
333
  clientSecret: import_zod3.default.string()
307
334
  })
308
335
  });
336
+ var handleMcpMessage = import_zod3.default.object({
337
+ type: import_zod3.default.literal("metorial-mcp.handle-mcp-message"),
338
+ params: import_zod3.default.object({
339
+ authConfig: import_zod3.default.optional(import_zod3.default.record(import_zod3.default.string(), import_zod3.default.any())),
340
+ config: import_zod3.default.record(import_zod3.default.string(), import_zod3.default.any()),
341
+ client: import_zod3.default.object({
342
+ client: import_zod3.default.record(import_zod3.default.string(), import_zod3.default.any()),
343
+ capabilities: import_zod3.default.record(import_zod3.default.string(), import_zod3.default.any())
344
+ }),
345
+ messages: import_zod3.default.array(import_zod3.default.any())
346
+ })
347
+ });
309
348
  var allMessages = import_zod3.default.union([
310
349
  discoverMessage,
311
350
  authUrlMessage,
312
351
  oauthCallbackMessage,
313
- oauthTokenRefreshMessage
352
+ oauthTokenRefreshMessage,
353
+ handleMcpMessage
314
354
  ]);
315
355
  var serverAdapter = async (instance, messages) => Promise.all(
316
356
  messages.map(async (message) => {
@@ -328,6 +368,14 @@ var serverAdapter = async (instance, messages) => Promise.all(
328
368
  case "metorial-mcp.handle-oauth-token-refresh": {
329
369
  return instance.handleOauthTokenRefresh(parsed.params);
330
370
  }
371
+ case "metorial-mcp.handle-mcp-message": {
372
+ return instance.handleMcpMessages({
373
+ config: parsed.params.config || {},
374
+ authConfig: parsed.params.authConfig || {},
375
+ client: parsed.params.client,
376
+ message: parsed.params.messages
377
+ });
378
+ }
331
379
  }
332
380
  throw new Error(`Unknown message type: ${message.type}`);
333
381
  })
@@ -384,8 +432,12 @@ var clientAdapter = (transport) => {
384
432
  }
385
433
  };
386
434
  };
435
+
436
+ // src/index.ts
437
+ var import_mcp2 = require("@metorial/mcp");
387
438
  // Annotate the CommonJS export names for ESM import in node:
388
439
  0 && (module.exports = {
440
+ McpTool,
389
441
  auth,
390
442
  clientAdapter,
391
443
  config,
@@ -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 auth,\n createAuth,\n type McpServerAuthCallbackHandler,\n type McpServerAuthCallbackHandlerParams,\n type McpServerAuthCallbackHandlerResult,\n type McpServerAuthConfig,\n type McpServerAuthTokenRefreshHandler,\n type McpServerAuthTokenRefreshHandlerParams,\n type McpServerAuthTokenRefreshHandlerResult,\n type McpServerAuthUrlHandler,\n type McpServerAuthUrlHandlerInternal,\n type McpServerAuthUrlHandlerParams,\n type McpServerAuthUrlHandlerResult,\n type McpServerAuthValue\n} from './auth';\n\nexport { config, createConfig, type McpServerConfig } from './config';\n","import {\n createMcpServer as createMcpServerInternal,\n CreateMcpServerOpts\n} from '@metorial/mcp';\nimport { McpServer } from '@modelcontextprotocol/sdk/server/mcp';\nimport { JSONRPCMessage } from '@modelcontextprotocol/sdk/types';\nimport {\n getAuthConfigImplementation,\n McpServerAuthCallbackHandlerParams,\n McpServerAuthTokenRefreshHandlerParams,\n McpServerAuthUrlHandlerParams\n} from './auth';\nimport { ClientOpts, handleMcpMessages } from './client';\nimport { getConfigSchema, setConfigValue } from './config';\n\nexport type McpServerInstanceServer = CreateMcpServerOpts | { server: McpServer };\nlet getServer = (instance: McpServerInstanceServer) => {\n if ('server' in instance) {\n return instance.server;\n } else {\n return createMcpServerInternal(instance);\n }\n};\n\nexport type McpServerInstanceOpts = McpServerInstanceServer & {\n config?: any;\n authConfig?: any;\n};\n\nexport class McpServerInstance {\n #server: McpServer;\n\n private constructor(private instance: McpServerInstanceOpts) {\n this.#server = getServer(instance);\n }\n\n static create(instance: McpServerInstanceOpts) {\n return new McpServerInstance(instance);\n }\n\n discover() {\n return {\n configSchema: this.instance.config ? getConfigSchema(this.instance.config) : null,\n oauth: this.instance.authConfig\n ? {\n status: 'enabled' as const,\n hasTokenRefresh: !!getAuthConfigImplementation(this.instance.authConfig)\n .tokenRefreshHandler\n }\n : {\n status: 'disabled' as const\n }\n };\n }\n\n handleMcpMessages(opts: { config: any; client: ClientOpts; message: JSONRPCMessage[] }) {\n setConfigValue(this.instance.config, opts.config);\n\n return handleMcpMessages(this.#server, opts.client, opts.message);\n }\n\n getOauthAuthorizationUrl(d: McpServerAuthUrlHandlerParams<any>) {\n if (!this.instance.authConfig) return null;\n let impl = getAuthConfigImplementation(this.instance.authConfig);\n\n return impl.getAuthUrlHandler(d);\n }\n\n handleOauthCallback(d: McpServerAuthCallbackHandlerParams<any>) {\n if (!this.instance.authConfig) return null;\n let impl = getAuthConfigImplementation(this.instance.authConfig);\n\n return impl.callbackHandler(d);\n }\n\n handleOauthTokenRefresh(d: McpServerAuthTokenRefreshHandlerParams<any>) {\n if (!this.instance.authConfig) return null;\n let impl = getAuthConfigImplementation(this.instance.authConfig);\n\n if (!impl.tokenRefreshHandler) {\n return null;\n }\n\n return impl.tokenRefreshHandler(d);\n }\n}\n\nexport let createMcpServer = (instance: McpServerInstanceOpts) => {\n return McpServerInstance.create(instance);\n};\n","import z from 'zod';\n\nexport type McpServerAuthUrlHandlerParams<AuthConfig extends {}> = {\n authConfig: AuthConfig;\n clientId: string;\n clientSecret: string;\n state: string;\n redirectUri: string;\n};\n\nexport type McpServerAuthUrlHandlerResult = {\n authorizationUrl: string;\n authState?: Record<string, string> | null;\n};\n\nexport type McpServerAuthUrlHandlerInternal = <AuthConfig extends {}>(\n d: McpServerAuthUrlHandlerParams<AuthConfig>\n) => Promise<McpServerAuthUrlHandlerResult>;\n\nexport type McpServerAuthUrlHandler = <AuthConfig extends {}>(\n d: McpServerAuthUrlHandlerParams<AuthConfig>\n) => Promise<string | McpServerAuthUrlHandlerResult>;\n\nexport type McpServerAuthCallbackHandlerParams<AuthConfig extends {}> = {\n authConfig: AuthConfig;\n authState: Record<string, string>;\n clientId: string;\n clientSecret: string;\n code: string;\n state: string;\n redirectUri: string;\n callbackUrl: string;\n authorizationUrl: string;\n};\n\nexport type McpServerAuthCallbackHandlerResult = {\n accessToken: string;\n refreshToken?: string;\n expiresIn?: number;\n scope?: string;\n tokenType?: string;\n [key: string]: any;\n};\n\nexport type McpServerAuthCallbackHandler = <AuthConfig extends {}>(\n d: McpServerAuthCallbackHandlerParams<AuthConfig>\n) => Promise<McpServerAuthCallbackHandlerResult>;\n\nexport type McpServerAuthTokenRefreshHandlerParams<AuthConfig extends {}> = {\n authConfig: AuthConfig;\n authState: Record<string, string>;\n refreshToken: string;\n clientId: string;\n clientSecret: string;\n};\n\nexport type McpServerAuthTokenRefreshHandlerResult = {\n accessToken: string;\n refreshToken?: string;\n expiresIn?: number;\n scope?: string;\n tokenType?: string;\n [key: string]: any;\n};\n\nexport type McpServerAuthTokenRefreshHandler = <AuthConfig extends {}>(\n d: McpServerAuthTokenRefreshHandlerParams<AuthConfig>\n) => Promise<McpServerAuthTokenRefreshHandlerResult>;\n\nexport type McpServerAuthValue = {\n accessToken: string;\n expiresIn?: number;\n scope?: string;\n tokenType?: string;\n [key: string]: any;\n};\n\nexport class McpServerAuthConfig<AuthConfig extends {}> {\n #value: McpServerAuthValue | null = null;\n\n #getAuthUrlHandler?: McpServerAuthUrlHandlerInternal;\n #callbackHandler?: McpServerAuthCallbackHandler;\n #tokenRefreshHandler?: McpServerAuthTokenRefreshHandler;\n\n private constructor(private readonly schema: z.ZodType<AuthConfig>) {}\n\n static create<AuthConfig extends {}>(schema?: z.ZodType<AuthConfig>) {\n return new McpServerAuthConfig(schema ?? (z.object({}) as z.ZodType<AuthConfig>));\n }\n\n static getImplementation(config: McpServerAuthConfig<any>) {\n if (!config.#getAuthUrlHandler || !config.#callbackHandler) {\n throw new Error('MCP Server auth config is missing required handlers');\n }\n\n return {\n getAuthUrlHandler: config.#getAuthUrlHandler,\n callbackHandler: config.#callbackHandler,\n tokenRefreshHandler: config.#tokenRefreshHandler\n };\n }\n\n setValue(value: McpServerAuthValue) {\n this.#value = value;\n }\n\n getAuthorizationUrl(cb: McpServerAuthUrlHandler) {\n this.#getAuthUrlHandler = async d => {\n let res = await cb(d);\n if (typeof res == 'string') {\n return { authorizationUrl: res };\n }\n return res;\n };\n return this;\n }\n\n handleCallback(cb: McpServerAuthCallbackHandler) {\n this.#callbackHandler = cb;\n return this;\n }\n\n refreshToken(cb: McpServerAuthTokenRefreshHandler) {\n this.#tokenRefreshHandler = cb;\n return this;\n }\n\n build(): AuthConfig {\n if (!this.#getAuthUrlHandler || !this.#callbackHandler) {\n throw new Error('MCP Server auth config is missing required handlers');\n }\n\n let self = this;\n\n // Proxy for getting the config values\n // or throwing an error if not set\n return new Proxy(\n {},\n {\n get: (target, prop, receiver) => {\n if (prop == '__config__') {\n return self;\n }\n\n if (self.#value === null) {\n throw new Error('MCP Server auth config value not set');\n }\n\n return (self.#value as any)[prop];\n }\n }\n ) as any as AuthConfig;\n }\n}\n\nexport let createAuth = <Config extends {}>(schema?: z.ZodType<Config>) => {\n return McpServerAuthConfig.create(schema);\n};\n\nexport let auth = <Config extends {}>(schema?: z.ZodType<Config>) => createAuth(schema);\n\nexport let getAuthConfigImplementation = <Config extends {}>(configValue: any) => {\n let self = configValue['__config__'] as McpServerAuthConfig<Config>;\n return McpServerAuthConfig.getImplementation(self);\n};\n","import { createInMemoryTransport } from '@metorial/mcp-transport-memory';\nimport { Client } from '@modelcontextprotocol/sdk/client/index.js';\nimport { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\nimport {\n ClientCapabilities,\n JSONRPCMessage,\n Notification\n} from '@modelcontextprotocol/sdk/types.js';\nimport z from 'zod';\n\nexport interface ClientOpts {\n client: {\n name: string;\n version: string;\n };\n capabilities: ClientCapabilities;\n}\n\nexport let getClient = async (\n server: McpServer,\n notificationListener: (notification: Notification) => Promise<void>,\n opts: ClientOpts\n) => {\n let transport = createInMemoryTransport();\n await server.connect(transport.server);\n\n let client = new Client(opts.client);\n\n client.registerCapabilities(opts.capabilities);\n client.fallbackNotificationHandler = notificationListener;\n\n await client.connect(transport.client);\n\n return client;\n};\n\nexport let handleMcpMessages = async (\n server: McpServer,\n opts: ClientOpts,\n messages: JSONRPCMessage[]\n) => {\n let responses: JSONRPCMessage[] = [];\n\n let client = await getClient(\n server,\n async notification => {\n responses.push(notification as JSONRPCMessage);\n },\n opts\n );\n\n let error: Error | null = null;\n\n for (let message of messages) {\n try {\n if ('id' in message) {\n let res = await client.request(message as any, z.any());\n responses.push(res);\n } else {\n await client.notification(message as any);\n }\n } catch (err) {\n error = err as Error;\n break;\n }\n }\n\n return { messages: responses, error };\n};\n","import z from 'zod';\n\nexport class McpServerConfig<Config extends {}> {\n #value: Config | null = null;\n\n private constructor(public readonly schema: z.ZodType<Config>) {}\n\n static create<Config extends {}>(schema: z.ZodType<Config>) {\n return new McpServerConfig(schema);\n }\n\n setValue(value: unknown) {\n let parsed = this.schema.parse(value);\n this.#value = parsed;\n }\n\n value(): Config {\n let self = this;\n\n // Proxy for getting the config values\n // or throwing an error if not set\n return new Proxy(\n {},\n {\n get: (target, prop, receiver) => {\n if (prop == '__config__') {\n return self;\n }\n\n if (self.#value === null) {\n throw new Error('MCP Server config value not set');\n }\n\n return (self.#value as any)[prop];\n }\n }\n ) as any as Config;\n }\n}\n\nexport let createConfig = <Config extends {}>(schema: z.ZodType<Config>) => {\n return McpServerConfig.create(schema).value();\n};\n\nexport let config = <Config extends {}>(schema: z.ZodType<Config>) => createConfig(schema);\n\nexport let setConfigValue = <Config extends {}>(configValue: any, value: Config) => {\n let self = configValue['__config__'] as McpServerConfig<Config>;\n self.setValue(value);\n};\n\nexport let getConfigSchema = <Config extends {}>(configValue: any) => {\n let self = configValue['__config__'] as McpServerConfig<Config>;\n return self.schema.toJSONSchema({\n unrepresentable: 'any',\n override: ctx => {\n let def = ctx.zodSchema._zod.def;\n\n if (def.type === 'date') {\n ctx.jsonSchema.type = 'string';\n ctx.jsonSchema.format = 'date-time';\n }\n if (def.type === 'bigint') {\n ctx.jsonSchema.type = 'number';\n }\n }\n });\n};\n","import z from 'zod';\nimport { McpServerInstance } from './instance';\n\nlet discoverMessage = z.object({\n type: z.literal('metorial-mcp.discover')\n});\ntype DiscoverMessage = z.infer<typeof discoverMessage>;\n\nlet authUrlMessage = z.object({\n type: z.literal('metorial-mcp.get-oauth-authorization-url'),\n params: z.object({\n authConfig: z.record(z.string(), z.any()),\n clientId: z.string(),\n clientSecret: z.string(),\n state: z.string(),\n redirectUri: z.string()\n })\n});\ntype AuthUrlMessage = z.infer<typeof authUrlMessage>;\n\nlet oauthCallbackMessage = z.object({\n type: z.literal('metorial-mcp.handle-oauth-callback'),\n params: z.object({\n authConfig: z.record(z.string(), z.any()),\n authState: z.record(z.string(), z.string()),\n clientId: z.string(),\n clientSecret: z.string(),\n code: z.string(),\n state: z.string(),\n redirectUri: z.string(),\n callbackUrl: z.string(),\n authorizationUrl: z.string()\n })\n});\ntype OauthCallbackMessage = z.infer<typeof oauthCallbackMessage>;\n\nlet oauthTokenRefreshMessage = z.object({\n type: z.literal('metorial-mcp.handle-oauth-token-refresh'),\n params: z.object({\n authConfig: z.record(z.string(), z.any()),\n authState: z.record(z.string(), z.string()),\n refreshToken: z.string(),\n clientId: z.string(),\n clientSecret: z.string()\n })\n});\ntype OauthTokenRefreshMessage = z.infer<typeof oauthTokenRefreshMessage>;\n\nlet allMessages = z.union([\n discoverMessage,\n authUrlMessage,\n oauthCallbackMessage,\n oauthTokenRefreshMessage\n]);\n\nexport type McpServerInstanceMessage =\n | DiscoverMessage\n | AuthUrlMessage\n | OauthCallbackMessage\n | OauthTokenRefreshMessage;\n\nexport let serverAdapter = async (\n instance: McpServerInstance,\n messages: McpServerInstanceMessage[]\n) =>\n Promise.all(\n messages.map(async message => {\n let parsed = allMessages.parse(message);\n\n switch (parsed.type) {\n case 'metorial-mcp.discover': {\n return instance.discover();\n }\n case 'metorial-mcp.get-oauth-authorization-url': {\n return instance.getOauthAuthorizationUrl(parsed.params);\n }\n case 'metorial-mcp.handle-oauth-callback': {\n return instance.handleOauthCallback(parsed.params);\n }\n case 'metorial-mcp.handle-oauth-token-refresh': {\n return instance.handleOauthTokenRefresh(parsed.params);\n }\n }\n\n throw new Error(`Unknown message type: ${(message as any).type}`);\n })\n );\n\nexport type McpServerInstanceAdapterResponses = Awaited<ReturnType<typeof serverAdapter>>;\n\nexport let clientAdapter = (\n transport: (\n messages: McpServerInstanceMessage[]\n ) => Promise<McpServerInstanceAdapterResponses>\n) => {\n let queue: {\n msg: McpServerInstanceMessage;\n resolve: (res: any) => void;\n reject: (err: any) => void;\n }[] = [];\n let isSent = { current: false };\n let isSending = { current: false };\n\n let send = async (message: McpServerInstanceMessage) => {\n let promise = new Promise<any>((resolve, reject) => {\n queue.push({ msg: message, resolve, reject });\n });\n\n if (!isSending.current) {\n isSending.current = true;\n\n setTimeout(async () => {\n isSent.current = true;\n\n try {\n let res = await transport(queue.map(q => q.msg));\n res.forEach((r, i) => {\n queue[i].resolve(r);\n });\n } catch (err) {\n queue.forEach(q => {\n q.reject(err);\n });\n } finally {\n queue = [];\n }\n }, 2);\n }\n\n return promise;\n };\n\n return {\n discover: async () => {\n return send({ type: 'metorial-mcp.discover' }) as Promise<\n Awaited<ReturnType<McpServerInstance['discover']>>\n >;\n },\n\n getOauthAuthorizationUrl: async (\n d: Parameters<McpServerInstance['getOauthAuthorizationUrl']>[0]\n ) => {\n return send({\n type: 'metorial-mcp.get-oauth-authorization-url',\n params: d\n }) as Promise<Awaited<ReturnType<McpServerInstance['getOauthAuthorizationUrl']>>>;\n },\n\n handleOauthCallback: async (\n d: Parameters<McpServerInstance['handleOauthCallback']>[0]\n ) => {\n return send({\n type: 'metorial-mcp.handle-oauth-callback',\n params: d\n }) as Promise<Awaited<ReturnType<McpServerInstance['handleOauthCallback']>>>;\n },\n\n handleOauthTokenRefresh: async (\n d: Parameters<McpServerInstance['handleOauthTokenRefresh']>[0]\n ) => {\n return send({\n type: 'metorial-mcp.handle-oauth-token-refresh',\n params: d\n }) as Promise<Awaited<ReturnType<McpServerInstance['handleOauthTokenRefresh']>>>;\n }\n };\n};\n"],"mappings":"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","names":["z","config","import_zod","z","createMcpServerInternal","import_zod","z"]}
1
+ {"version":3,"sources":["../src/index.ts","../src/instance.ts","../src/auth.ts","../src/client.ts","../src/config.ts","../src/adapter.ts"],"sourcesContent":["export {\n createMcpServer,\n type McpServerInstance,\n type McpServerInstanceOpts,\n type McpServerInstanceServer\n} from './instance';\n\nexport {\n clientAdapter,\n serverAdapter,\n type McpServerInstanceAdapterResponses,\n type McpServerInstanceMessage\n} from './adapter';\n\nexport {\n auth,\n createAuth,\n type McpServerAuthCallbackHandler,\n type McpServerAuthCallbackHandlerParams,\n type McpServerAuthCallbackHandlerResult,\n type McpServerAuthConfig,\n type McpServerAuthTokenRefreshHandler,\n type McpServerAuthTokenRefreshHandlerParams,\n type McpServerAuthTokenRefreshHandlerResult,\n type McpServerAuthUrlHandler,\n type McpServerAuthUrlHandlerInternal,\n type McpServerAuthUrlHandlerParams,\n type McpServerAuthUrlHandlerResult,\n type McpServerAuthValue\n} from './auth';\n\nexport { config, createConfig, type McpServerConfig } from './config';\n\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 getAuthConfigImplementation,\n getAuthConfigSchema,\n McpServerAuthCallbackHandlerParams,\n McpServerAuthTokenRefreshHandlerParams,\n McpServerAuthUrlHandlerParams,\n setAuthConfigValue\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: getAuthConfigSchema(this.instance.authConfig),\n hasTokenRefresh: !!getAuthConfigImplementation(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 setAuthConfigValue(this.instance.authConfig, opts.authConfig);\n }\n\n return handleMcpMessages(this.#server, opts.client, opts.message);\n }\n\n getOauthAuthorizationUrl(d: McpServerAuthUrlHandlerParams<any>) {\n if (!this.instance.authConfig) return null;\n let impl = getAuthConfigImplementation(this.instance.authConfig);\n\n return impl.getAuthUrlHandler(d);\n }\n\n handleOauthCallback(d: McpServerAuthCallbackHandlerParams<any>) {\n if (!this.instance.authConfig) return null;\n let impl = getAuthConfigImplementation(this.instance.authConfig);\n\n return impl.callbackHandler(d);\n }\n\n handleOauthTokenRefresh(d: McpServerAuthTokenRefreshHandlerParams<any>) {\n if (!this.instance.authConfig) return null;\n let impl = getAuthConfigImplementation(this.instance.authConfig);\n\n if (!impl.tokenRefreshHandler) {\n return null;\n }\n\n return impl.tokenRefreshHandler(d);\n }\n}\n\nexport let createMcpServer = (instance: McpServerInstanceOpts) => {\n return McpServerInstance.create(instance);\n};\n","import z from 'zod';\n\nexport type McpServerAuthUrlHandlerParams<AuthConfig extends {}> = {\n authConfig: AuthConfig;\n clientId: string;\n clientSecret: string;\n state: string;\n redirectUri: string;\n};\n\nexport type McpServerAuthUrlHandlerResult = {\n authorizationUrl: string;\n authState?: Record<string, string> | null;\n};\n\nexport type McpServerAuthUrlHandlerInternal = <AuthConfig extends {}>(\n d: McpServerAuthUrlHandlerParams<AuthConfig>\n) => Promise<McpServerAuthUrlHandlerResult>;\n\nexport type McpServerAuthUrlHandler = <AuthConfig extends {}>(\n d: McpServerAuthUrlHandlerParams<AuthConfig>\n) => Promise<string | McpServerAuthUrlHandlerResult>;\n\nexport type McpServerAuthCallbackHandlerParams<AuthConfig extends {}> = {\n authConfig: AuthConfig;\n authState: Record<string, string>;\n clientId: string;\n clientSecret: string;\n code: string;\n state: string;\n redirectUri: string;\n callbackUrl: string;\n authorizationUrl: string;\n};\n\nexport type McpServerAuthCallbackHandlerResult = {\n accessToken: string;\n refreshToken?: string;\n expiresIn?: number;\n scope?: string;\n tokenType?: string;\n [key: string]: any;\n};\n\nexport type McpServerAuthCallbackHandler = <AuthConfig extends {}>(\n d: McpServerAuthCallbackHandlerParams<AuthConfig>\n) => Promise<McpServerAuthCallbackHandlerResult>;\n\nexport type McpServerAuthTokenRefreshHandlerParams<AuthConfig extends {}> = {\n authConfig: AuthConfig;\n authState: Record<string, string>;\n refreshToken: string;\n clientId: string;\n clientSecret: string;\n};\n\nexport type McpServerAuthTokenRefreshHandlerResult = {\n accessToken: string;\n refreshToken?: string;\n expiresIn?: number;\n scope?: string;\n tokenType?: string;\n [key: string]: any;\n};\n\nexport type McpServerAuthTokenRefreshHandler = <AuthConfig extends {}>(\n d: McpServerAuthTokenRefreshHandlerParams<AuthConfig>\n) => Promise<McpServerAuthTokenRefreshHandlerResult>;\n\nexport type McpServerAuthValue = {\n accessToken: string;\n expiresIn?: number;\n scope?: string;\n tokenType?: string;\n [key: string]: any;\n};\n\nexport class McpServerAuthConfig<AuthConfig extends {}> {\n #value: McpServerAuthValue | null = null;\n\n #getAuthUrlHandler?: McpServerAuthUrlHandlerInternal;\n #callbackHandler?: McpServerAuthCallbackHandler;\n #tokenRefreshHandler?: McpServerAuthTokenRefreshHandler;\n\n private constructor(public readonly schema: z.ZodType<AuthConfig>) {}\n\n static create<AuthConfig extends {}>(schema?: z.ZodType<AuthConfig>) {\n return new McpServerAuthConfig(schema ?? (z.object({}) as z.ZodType<AuthConfig>));\n }\n\n static getImplementation(config: McpServerAuthConfig<any>) {\n if (!config.#getAuthUrlHandler || !config.#callbackHandler) {\n throw new Error('MCP Server auth config is missing required handlers');\n }\n\n return {\n getAuthUrlHandler: config.#getAuthUrlHandler,\n callbackHandler: config.#callbackHandler,\n tokenRefreshHandler: config.#tokenRefreshHandler\n };\n }\n\n setValue(value: McpServerAuthValue) {\n this.#value = value;\n }\n\n getAuthorizationUrl(cb: McpServerAuthUrlHandler) {\n this.#getAuthUrlHandler = async d => {\n let res = await cb(d);\n if (typeof res == 'string') {\n return { authorizationUrl: res };\n }\n return res;\n };\n return this;\n }\n\n handleCallback(cb: McpServerAuthCallbackHandler) {\n this.#callbackHandler = cb;\n return this;\n }\n\n refreshToken(cb: McpServerAuthTokenRefreshHandler) {\n this.#tokenRefreshHandler = cb;\n return this;\n }\n\n build(): AuthConfig {\n if (!this.#getAuthUrlHandler || !this.#callbackHandler) {\n throw new Error('MCP Server auth config is missing required handlers');\n }\n\n let self = this;\n\n // Proxy for getting the config values\n // or throwing an error if not set\n return new Proxy(\n {},\n {\n get: (target, prop, receiver) => {\n if (prop == '__config__') {\n return self;\n }\n\n if (self.#value === null) {\n throw new Error('MCP Server auth config value not set');\n }\n\n return (self.#value as any)[prop];\n }\n }\n ) as any as AuthConfig;\n }\n}\n\nexport let createAuth = <Config extends {}>(schema?: z.ZodType<Config>) => {\n return McpServerAuthConfig.create(schema);\n};\n\nexport let auth = <Config extends {}>(schema?: z.ZodType<Config>) => createAuth(schema);\n\nexport let getAuthConfigImplementation = <Config extends {}>(configValue: any) => {\n let self = configValue['__config__'] as McpServerAuthConfig<Config>;\n return McpServerAuthConfig.getImplementation(self);\n};\n\nexport let setAuthConfigValue = <Config extends {}>(\n configValue: any,\n value: McpServerAuthValue\n) => {\n let self = configValue['__config__'] as McpServerAuthConfig<Config>;\n self.setValue(value);\n};\n\nexport let getAuthConfigSchema = <Config extends {}>(configValue: any) => {\n let self = configValue['__config__'] as McpServerAuthConfig<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":["z","config","import_zod","z","createMcpServerInternal","import_zod","z","import_mcp"]}
package/dist/index.d.cts CHANGED
@@ -2,9 +2,10 @@ import * as z from 'zod';
2
2
  import z__default from 'zod';
3
3
  import * as zod_v4_core from 'zod/v4/core';
4
4
  import { CreateMcpServerOpts } from '@metorial/mcp';
5
- import { McpServer } from '@modelcontextprotocol/sdk/server/mcp';
6
- import { JSONRPCMessage } from '@modelcontextprotocol/sdk/types';
7
- import { ClientCapabilities } from '@modelcontextprotocol/sdk/types.js';
5
+ export { McpServerInfo, McpTool, McpToolAnnotations, McpToolHandlerOutput, McpToolHandlerOutputSync, McpToolImplementation, McpToolOpts } from '@metorial/mcp';
6
+ import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
7
+ import { ClientCapabilities, JSONRPCMessage } from '@modelcontextprotocol/sdk/types.js';
8
+ import * as _modelcontextprotocol_sdk_types from '@modelcontextprotocol/sdk/types';
8
9
 
9
10
  type McpServerAuthUrlHandlerParams<AuthConfig extends {}> = {
10
11
  authConfig: AuthConfig;
@@ -64,7 +65,7 @@ type McpServerAuthValue = {
64
65
  };
65
66
  declare class McpServerAuthConfig<AuthConfig extends {}> {
66
67
  #private;
67
- private readonly schema;
68
+ readonly schema: z__default.ZodType<AuthConfig>;
68
69
  private constructor();
69
70
  static create<AuthConfig extends {}>(schema?: z__default.ZodType<AuthConfig>): McpServerAuthConfig<AuthConfig>;
70
71
  static getImplementation(config: McpServerAuthConfig<any>): {
@@ -105,14 +106,17 @@ declare class McpServerInstance {
105
106
  configSchema: zod_v4_core.ZodStandardJSONSchemaPayload<z.ZodType<{}, unknown, zod_v4_core.$ZodTypeInternals<{}, unknown>>> | null;
106
107
  oauth: {
107
108
  status: "enabled";
109
+ authConfig: zod_v4_core.ZodStandardJSONSchemaPayload<z.ZodType<{}, unknown, zod_v4_core.$ZodTypeInternals<{}, unknown>>>;
108
110
  hasTokenRefresh: boolean;
109
111
  } | {
110
112
  status: "disabled";
113
+ authConfig?: undefined;
111
114
  hasTokenRefresh?: undefined;
112
115
  };
113
116
  };
114
117
  handleMcpMessages(opts: {
115
118
  config: any;
119
+ authConfig: any;
116
120
  client: ClientOpts;
117
121
  message: JSONRPCMessage[];
118
122
  }): Promise<{
@@ -166,14 +170,32 @@ declare let oauthTokenRefreshMessage: z__default.ZodObject<{
166
170
  }, z__default.core.$strip>;
167
171
  }, z__default.core.$strip>;
168
172
  type OauthTokenRefreshMessage = z__default.infer<typeof oauthTokenRefreshMessage>;
169
- type McpServerInstanceMessage = DiscoverMessage | AuthUrlMessage | OauthCallbackMessage | OauthTokenRefreshMessage;
173
+ declare let handleMcpMessage: z__default.ZodObject<{
174
+ type: z__default.ZodLiteral<"metorial-mcp.handle-mcp-message">;
175
+ params: z__default.ZodObject<{
176
+ authConfig: z__default.ZodOptional<z__default.ZodRecord<z__default.ZodString, z__default.ZodAny>>;
177
+ config: z__default.ZodRecord<z__default.ZodString, z__default.ZodAny>;
178
+ client: z__default.ZodObject<{
179
+ client: z__default.ZodRecord<z__default.ZodString, z__default.ZodAny>;
180
+ capabilities: z__default.ZodRecord<z__default.ZodString, z__default.ZodAny>;
181
+ }, z__default.core.$strip>;
182
+ messages: z__default.ZodArray<z__default.ZodAny>;
183
+ }, z__default.core.$strip>;
184
+ }, z__default.core.$strip>;
185
+ type HandleMcpMessage = z__default.infer<typeof handleMcpMessage>;
186
+ type McpServerInstanceMessage = DiscoverMessage | AuthUrlMessage | OauthCallbackMessage | OauthTokenRefreshMessage | HandleMcpMessage;
170
187
  declare let serverAdapter: (instance: McpServerInstance, messages: McpServerInstanceMessage[]) => Promise<(McpServerAuthUrlHandlerResult | McpServerAuthCallbackHandlerResult | {
188
+ messages: _modelcontextprotocol_sdk_types.JSONRPCMessage[];
189
+ error: Error | null;
190
+ } | {
171
191
  configSchema: z__default.core.ZodStandardJSONSchemaPayload<z__default.ZodType<{}, unknown, z__default.core.$ZodTypeInternals<{}, unknown>>> | null;
172
192
  oauth: {
173
193
  status: "enabled";
194
+ authConfig: z__default.core.ZodStandardJSONSchemaPayload<z__default.ZodType<{}, unknown, z__default.core.$ZodTypeInternals<{}, unknown>>>;
174
195
  hasTokenRefresh: boolean;
175
196
  } | {
176
197
  status: "disabled";
198
+ authConfig?: undefined;
177
199
  hasTokenRefresh?: undefined;
178
200
  };
179
201
  } | null)[]>;
@@ -183,9 +205,11 @@ declare let clientAdapter: (transport: (messages: McpServerInstanceMessage[]) =>
183
205
  configSchema: z__default.core.ZodStandardJSONSchemaPayload<z__default.ZodType<{}, unknown, z__default.core.$ZodTypeInternals<{}, unknown>>> | null;
184
206
  oauth: {
185
207
  status: "enabled";
208
+ authConfig: z__default.core.ZodStandardJSONSchemaPayload<z__default.ZodType<{}, unknown, z__default.core.$ZodTypeInternals<{}, unknown>>>;
186
209
  hasTokenRefresh: boolean;
187
210
  } | {
188
211
  status: "disabled";
212
+ authConfig?: undefined;
189
213
  hasTokenRefresh?: undefined;
190
214
  };
191
215
  }>;
package/dist/index.d.ts CHANGED
@@ -2,9 +2,10 @@ import * as z from 'zod';
2
2
  import z__default from 'zod';
3
3
  import * as zod_v4_core from 'zod/v4/core';
4
4
  import { CreateMcpServerOpts } from '@metorial/mcp';
5
- import { McpServer } from '@modelcontextprotocol/sdk/server/mcp';
6
- import { JSONRPCMessage } from '@modelcontextprotocol/sdk/types';
7
- import { ClientCapabilities } from '@modelcontextprotocol/sdk/types.js';
5
+ export { McpServerInfo, McpTool, McpToolAnnotations, McpToolHandlerOutput, McpToolHandlerOutputSync, McpToolImplementation, McpToolOpts } from '@metorial/mcp';
6
+ import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
7
+ import { ClientCapabilities, JSONRPCMessage } from '@modelcontextprotocol/sdk/types.js';
8
+ import * as _modelcontextprotocol_sdk_types from '@modelcontextprotocol/sdk/types';
8
9
 
9
10
  type McpServerAuthUrlHandlerParams<AuthConfig extends {}> = {
10
11
  authConfig: AuthConfig;
@@ -64,7 +65,7 @@ type McpServerAuthValue = {
64
65
  };
65
66
  declare class McpServerAuthConfig<AuthConfig extends {}> {
66
67
  #private;
67
- private readonly schema;
68
+ readonly schema: z__default.ZodType<AuthConfig>;
68
69
  private constructor();
69
70
  static create<AuthConfig extends {}>(schema?: z__default.ZodType<AuthConfig>): McpServerAuthConfig<AuthConfig>;
70
71
  static getImplementation(config: McpServerAuthConfig<any>): {
@@ -105,14 +106,17 @@ declare class McpServerInstance {
105
106
  configSchema: zod_v4_core.ZodStandardJSONSchemaPayload<z.ZodType<{}, unknown, zod_v4_core.$ZodTypeInternals<{}, unknown>>> | null;
106
107
  oauth: {
107
108
  status: "enabled";
109
+ authConfig: zod_v4_core.ZodStandardJSONSchemaPayload<z.ZodType<{}, unknown, zod_v4_core.$ZodTypeInternals<{}, unknown>>>;
108
110
  hasTokenRefresh: boolean;
109
111
  } | {
110
112
  status: "disabled";
113
+ authConfig?: undefined;
111
114
  hasTokenRefresh?: undefined;
112
115
  };
113
116
  };
114
117
  handleMcpMessages(opts: {
115
118
  config: any;
119
+ authConfig: any;
116
120
  client: ClientOpts;
117
121
  message: JSONRPCMessage[];
118
122
  }): Promise<{
@@ -166,14 +170,32 @@ declare let oauthTokenRefreshMessage: z__default.ZodObject<{
166
170
  }, z__default.core.$strip>;
167
171
  }, z__default.core.$strip>;
168
172
  type OauthTokenRefreshMessage = z__default.infer<typeof oauthTokenRefreshMessage>;
169
- type McpServerInstanceMessage = DiscoverMessage | AuthUrlMessage | OauthCallbackMessage | OauthTokenRefreshMessage;
173
+ declare let handleMcpMessage: z__default.ZodObject<{
174
+ type: z__default.ZodLiteral<"metorial-mcp.handle-mcp-message">;
175
+ params: z__default.ZodObject<{
176
+ authConfig: z__default.ZodOptional<z__default.ZodRecord<z__default.ZodString, z__default.ZodAny>>;
177
+ config: z__default.ZodRecord<z__default.ZodString, z__default.ZodAny>;
178
+ client: z__default.ZodObject<{
179
+ client: z__default.ZodRecord<z__default.ZodString, z__default.ZodAny>;
180
+ capabilities: z__default.ZodRecord<z__default.ZodString, z__default.ZodAny>;
181
+ }, z__default.core.$strip>;
182
+ messages: z__default.ZodArray<z__default.ZodAny>;
183
+ }, z__default.core.$strip>;
184
+ }, z__default.core.$strip>;
185
+ type HandleMcpMessage = z__default.infer<typeof handleMcpMessage>;
186
+ type McpServerInstanceMessage = DiscoverMessage | AuthUrlMessage | OauthCallbackMessage | OauthTokenRefreshMessage | HandleMcpMessage;
170
187
  declare let serverAdapter: (instance: McpServerInstance, messages: McpServerInstanceMessage[]) => Promise<(McpServerAuthUrlHandlerResult | McpServerAuthCallbackHandlerResult | {
188
+ messages: _modelcontextprotocol_sdk_types.JSONRPCMessage[];
189
+ error: Error | null;
190
+ } | {
171
191
  configSchema: z__default.core.ZodStandardJSONSchemaPayload<z__default.ZodType<{}, unknown, z__default.core.$ZodTypeInternals<{}, unknown>>> | null;
172
192
  oauth: {
173
193
  status: "enabled";
194
+ authConfig: z__default.core.ZodStandardJSONSchemaPayload<z__default.ZodType<{}, unknown, z__default.core.$ZodTypeInternals<{}, unknown>>>;
174
195
  hasTokenRefresh: boolean;
175
196
  } | {
176
197
  status: "disabled";
198
+ authConfig?: undefined;
177
199
  hasTokenRefresh?: undefined;
178
200
  };
179
201
  } | null)[]>;
@@ -183,9 +205,11 @@ declare let clientAdapter: (transport: (messages: McpServerInstanceMessage[]) =>
183
205
  configSchema: z__default.core.ZodStandardJSONSchemaPayload<z__default.ZodType<{}, unknown, z__default.core.$ZodTypeInternals<{}, unknown>>> | null;
184
206
  oauth: {
185
207
  status: "enabled";
208
+ authConfig: z__default.core.ZodStandardJSONSchemaPayload<z__default.ZodType<{}, unknown, z__default.core.$ZodTypeInternals<{}, unknown>>>;
186
209
  hasTokenRefresh: boolean;
187
210
  } | {
188
211
  status: "disabled";
212
+ authConfig?: undefined;
189
213
  hasTokenRefresh?: undefined;
190
214
  };
191
215
  }>;
package/dist/index.js CHANGED
@@ -76,6 +76,26 @@ var getAuthConfigImplementation = (configValue) => {
76
76
  let self = configValue["__config__"];
77
77
  return McpServerAuthConfig.getImplementation(self);
78
78
  };
79
+ var setAuthConfigValue = (configValue, value) => {
80
+ let self = configValue["__config__"];
81
+ self.setValue(value);
82
+ };
83
+ var getAuthConfigSchema = (configValue) => {
84
+ let self = configValue["__config__"];
85
+ return self.schema.toJSONSchema({
86
+ unrepresentable: "any",
87
+ override: (ctx) => {
88
+ let def = ctx.zodSchema._zod.def;
89
+ if (def.type === "date") {
90
+ ctx.jsonSchema.type = "string";
91
+ ctx.jsonSchema.format = "date-time";
92
+ }
93
+ if (def.type === "bigint") {
94
+ ctx.jsonSchema.type = "number";
95
+ }
96
+ }
97
+ });
98
+ };
79
99
 
80
100
  // src/client.ts
81
101
  import { createInMemoryTransport } from "@metorial/mcp-transport-memory";
@@ -194,6 +214,7 @@ var McpServerInstance = class _McpServerInstance {
194
214
  configSchema: this.instance.config ? getConfigSchema(this.instance.config) : null,
195
215
  oauth: this.instance.authConfig ? {
196
216
  status: "enabled",
217
+ authConfig: getAuthConfigSchema(this.instance.authConfig),
197
218
  hasTokenRefresh: !!getAuthConfigImplementation(this.instance.authConfig).tokenRefreshHandler
198
219
  } : {
199
220
  status: "disabled"
@@ -201,7 +222,12 @@ var McpServerInstance = class _McpServerInstance {
201
222
  };
202
223
  }
203
224
  handleMcpMessages(opts) {
204
- setConfigValue(this.instance.config, opts.config);
225
+ if (this.instance.config) {
226
+ setConfigValue(this.instance.config, opts.config);
227
+ }
228
+ if (opts.authConfig && this.instance.authConfig) {
229
+ setAuthConfigValue(this.instance.authConfig, opts.authConfig);
230
+ }
205
231
  return handleMcpMessages(this.#server, opts.client, opts.message);
206
232
  }
207
233
  getOauthAuthorizationUrl(d) {
@@ -266,11 +292,24 @@ var oauthTokenRefreshMessage = z3.object({
266
292
  clientSecret: z3.string()
267
293
  })
268
294
  });
295
+ var handleMcpMessage = z3.object({
296
+ type: z3.literal("metorial-mcp.handle-mcp-message"),
297
+ params: z3.object({
298
+ authConfig: z3.optional(z3.record(z3.string(), z3.any())),
299
+ config: z3.record(z3.string(), z3.any()),
300
+ client: z3.object({
301
+ client: z3.record(z3.string(), z3.any()),
302
+ capabilities: z3.record(z3.string(), z3.any())
303
+ }),
304
+ messages: z3.array(z3.any())
305
+ })
306
+ });
269
307
  var allMessages = z3.union([
270
308
  discoverMessage,
271
309
  authUrlMessage,
272
310
  oauthCallbackMessage,
273
- oauthTokenRefreshMessage
311
+ oauthTokenRefreshMessage,
312
+ handleMcpMessage
274
313
  ]);
275
314
  var serverAdapter = async (instance, messages) => Promise.all(
276
315
  messages.map(async (message) => {
@@ -288,6 +327,14 @@ var serverAdapter = async (instance, messages) => Promise.all(
288
327
  case "metorial-mcp.handle-oauth-token-refresh": {
289
328
  return instance.handleOauthTokenRefresh(parsed.params);
290
329
  }
330
+ case "metorial-mcp.handle-mcp-message": {
331
+ return instance.handleMcpMessages({
332
+ config: parsed.params.config || {},
333
+ authConfig: parsed.params.authConfig || {},
334
+ client: parsed.params.client,
335
+ message: parsed.params.messages
336
+ });
337
+ }
291
338
  }
292
339
  throw new Error(`Unknown message type: ${message.type}`);
293
340
  })
@@ -344,7 +391,13 @@ var clientAdapter = (transport) => {
344
391
  }
345
392
  };
346
393
  };
394
+
395
+ // src/index.ts
396
+ import {
397
+ McpTool
398
+ } from "@metorial/mcp";
347
399
  export {
400
+ McpTool,
348
401
  auth,
349
402
  clientAdapter,
350
403
  config,
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"],"sourcesContent":["import {\n createMcpServer as createMcpServerInternal,\n CreateMcpServerOpts\n} from '@metorial/mcp';\nimport { McpServer } from '@modelcontextprotocol/sdk/server/mcp';\nimport { JSONRPCMessage } from '@modelcontextprotocol/sdk/types';\nimport {\n getAuthConfigImplementation,\n McpServerAuthCallbackHandlerParams,\n McpServerAuthTokenRefreshHandlerParams,\n McpServerAuthUrlHandlerParams\n} from './auth';\nimport { ClientOpts, handleMcpMessages } from './client';\nimport { getConfigSchema, setConfigValue } from './config';\n\nexport type McpServerInstanceServer = CreateMcpServerOpts | { server: McpServer };\nlet getServer = (instance: McpServerInstanceServer) => {\n if ('server' in instance) {\n return instance.server;\n } else {\n return createMcpServerInternal(instance);\n }\n};\n\nexport type McpServerInstanceOpts = McpServerInstanceServer & {\n config?: any;\n authConfig?: any;\n};\n\nexport class McpServerInstance {\n #server: McpServer;\n\n private constructor(private instance: McpServerInstanceOpts) {\n this.#server = getServer(instance);\n }\n\n static create(instance: McpServerInstanceOpts) {\n return new McpServerInstance(instance);\n }\n\n discover() {\n return {\n configSchema: this.instance.config ? getConfigSchema(this.instance.config) : null,\n oauth: this.instance.authConfig\n ? {\n status: 'enabled' as const,\n hasTokenRefresh: !!getAuthConfigImplementation(this.instance.authConfig)\n .tokenRefreshHandler\n }\n : {\n status: 'disabled' as const\n }\n };\n }\n\n handleMcpMessages(opts: { config: any; client: ClientOpts; message: JSONRPCMessage[] }) {\n setConfigValue(this.instance.config, opts.config);\n\n return handleMcpMessages(this.#server, opts.client, opts.message);\n }\n\n getOauthAuthorizationUrl(d: McpServerAuthUrlHandlerParams<any>) {\n if (!this.instance.authConfig) return null;\n let impl = getAuthConfigImplementation(this.instance.authConfig);\n\n return impl.getAuthUrlHandler(d);\n }\n\n handleOauthCallback(d: McpServerAuthCallbackHandlerParams<any>) {\n if (!this.instance.authConfig) return null;\n let impl = getAuthConfigImplementation(this.instance.authConfig);\n\n return impl.callbackHandler(d);\n }\n\n handleOauthTokenRefresh(d: McpServerAuthTokenRefreshHandlerParams<any>) {\n if (!this.instance.authConfig) return null;\n let impl = getAuthConfigImplementation(this.instance.authConfig);\n\n if (!impl.tokenRefreshHandler) {\n return null;\n }\n\n return impl.tokenRefreshHandler(d);\n }\n}\n\nexport let createMcpServer = (instance: McpServerInstanceOpts) => {\n return McpServerInstance.create(instance);\n};\n","import z from 'zod';\n\nexport type McpServerAuthUrlHandlerParams<AuthConfig extends {}> = {\n authConfig: AuthConfig;\n clientId: string;\n clientSecret: string;\n state: string;\n redirectUri: string;\n};\n\nexport type McpServerAuthUrlHandlerResult = {\n authorizationUrl: string;\n authState?: Record<string, string> | null;\n};\n\nexport type McpServerAuthUrlHandlerInternal = <AuthConfig extends {}>(\n d: McpServerAuthUrlHandlerParams<AuthConfig>\n) => Promise<McpServerAuthUrlHandlerResult>;\n\nexport type McpServerAuthUrlHandler = <AuthConfig extends {}>(\n d: McpServerAuthUrlHandlerParams<AuthConfig>\n) => Promise<string | McpServerAuthUrlHandlerResult>;\n\nexport type McpServerAuthCallbackHandlerParams<AuthConfig extends {}> = {\n authConfig: AuthConfig;\n authState: Record<string, string>;\n clientId: string;\n clientSecret: string;\n code: string;\n state: string;\n redirectUri: string;\n callbackUrl: string;\n authorizationUrl: string;\n};\n\nexport type McpServerAuthCallbackHandlerResult = {\n accessToken: string;\n refreshToken?: string;\n expiresIn?: number;\n scope?: string;\n tokenType?: string;\n [key: string]: any;\n};\n\nexport type McpServerAuthCallbackHandler = <AuthConfig extends {}>(\n d: McpServerAuthCallbackHandlerParams<AuthConfig>\n) => Promise<McpServerAuthCallbackHandlerResult>;\n\nexport type McpServerAuthTokenRefreshHandlerParams<AuthConfig extends {}> = {\n authConfig: AuthConfig;\n authState: Record<string, string>;\n refreshToken: string;\n clientId: string;\n clientSecret: string;\n};\n\nexport type McpServerAuthTokenRefreshHandlerResult = {\n accessToken: string;\n refreshToken?: string;\n expiresIn?: number;\n scope?: string;\n tokenType?: string;\n [key: string]: any;\n};\n\nexport type McpServerAuthTokenRefreshHandler = <AuthConfig extends {}>(\n d: McpServerAuthTokenRefreshHandlerParams<AuthConfig>\n) => Promise<McpServerAuthTokenRefreshHandlerResult>;\n\nexport type McpServerAuthValue = {\n accessToken: string;\n expiresIn?: number;\n scope?: string;\n tokenType?: string;\n [key: string]: any;\n};\n\nexport class McpServerAuthConfig<AuthConfig extends {}> {\n #value: McpServerAuthValue | null = null;\n\n #getAuthUrlHandler?: McpServerAuthUrlHandlerInternal;\n #callbackHandler?: McpServerAuthCallbackHandler;\n #tokenRefreshHandler?: McpServerAuthTokenRefreshHandler;\n\n private constructor(private readonly schema: z.ZodType<AuthConfig>) {}\n\n static create<AuthConfig extends {}>(schema?: z.ZodType<AuthConfig>) {\n return new McpServerAuthConfig(schema ?? (z.object({}) as z.ZodType<AuthConfig>));\n }\n\n static getImplementation(config: McpServerAuthConfig<any>) {\n if (!config.#getAuthUrlHandler || !config.#callbackHandler) {\n throw new Error('MCP Server auth config is missing required handlers');\n }\n\n return {\n getAuthUrlHandler: config.#getAuthUrlHandler,\n callbackHandler: config.#callbackHandler,\n tokenRefreshHandler: config.#tokenRefreshHandler\n };\n }\n\n setValue(value: McpServerAuthValue) {\n this.#value = value;\n }\n\n getAuthorizationUrl(cb: McpServerAuthUrlHandler) {\n this.#getAuthUrlHandler = async d => {\n let res = await cb(d);\n if (typeof res == 'string') {\n return { authorizationUrl: res };\n }\n return res;\n };\n return this;\n }\n\n handleCallback(cb: McpServerAuthCallbackHandler) {\n this.#callbackHandler = cb;\n return this;\n }\n\n refreshToken(cb: McpServerAuthTokenRefreshHandler) {\n this.#tokenRefreshHandler = cb;\n return this;\n }\n\n build(): AuthConfig {\n if (!this.#getAuthUrlHandler || !this.#callbackHandler) {\n throw new Error('MCP Server auth config is missing required handlers');\n }\n\n let self = this;\n\n // Proxy for getting the config values\n // or throwing an error if not set\n return new Proxy(\n {},\n {\n get: (target, prop, receiver) => {\n if (prop == '__config__') {\n return self;\n }\n\n if (self.#value === null) {\n throw new Error('MCP Server auth config value not set');\n }\n\n return (self.#value as any)[prop];\n }\n }\n ) as any as AuthConfig;\n }\n}\n\nexport let createAuth = <Config extends {}>(schema?: z.ZodType<Config>) => {\n return McpServerAuthConfig.create(schema);\n};\n\nexport let auth = <Config extends {}>(schema?: z.ZodType<Config>) => createAuth(schema);\n\nexport let getAuthConfigImplementation = <Config extends {}>(configValue: any) => {\n let self = configValue['__config__'] as McpServerAuthConfig<Config>;\n return McpServerAuthConfig.getImplementation(self);\n};\n","import { createInMemoryTransport } from '@metorial/mcp-transport-memory';\nimport { Client } from '@modelcontextprotocol/sdk/client/index.js';\nimport { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\nimport {\n ClientCapabilities,\n JSONRPCMessage,\n Notification\n} from '@modelcontextprotocol/sdk/types.js';\nimport z from 'zod';\n\nexport interface ClientOpts {\n client: {\n name: string;\n version: string;\n };\n capabilities: ClientCapabilities;\n}\n\nexport let getClient = async (\n server: McpServer,\n notificationListener: (notification: Notification) => Promise<void>,\n opts: ClientOpts\n) => {\n let transport = createInMemoryTransport();\n await server.connect(transport.server);\n\n let client = new Client(opts.client);\n\n client.registerCapabilities(opts.capabilities);\n client.fallbackNotificationHandler = notificationListener;\n\n await client.connect(transport.client);\n\n return client;\n};\n\nexport let handleMcpMessages = async (\n server: McpServer,\n opts: ClientOpts,\n messages: JSONRPCMessage[]\n) => {\n let responses: JSONRPCMessage[] = [];\n\n let client = await getClient(\n server,\n async notification => {\n responses.push(notification as JSONRPCMessage);\n },\n opts\n );\n\n let error: Error | null = null;\n\n for (let message of messages) {\n try {\n if ('id' in message) {\n let res = await client.request(message as any, z.any());\n responses.push(res);\n } else {\n await client.notification(message as any);\n }\n } catch (err) {\n error = err as Error;\n break;\n }\n }\n\n return { messages: responses, error };\n};\n","import z from 'zod';\n\nexport class McpServerConfig<Config extends {}> {\n #value: Config | null = null;\n\n private constructor(public readonly schema: z.ZodType<Config>) {}\n\n static create<Config extends {}>(schema: z.ZodType<Config>) {\n return new McpServerConfig(schema);\n }\n\n setValue(value: unknown) {\n let parsed = this.schema.parse(value);\n this.#value = parsed;\n }\n\n value(): Config {\n let self = this;\n\n // Proxy for getting the config values\n // or throwing an error if not set\n return new Proxy(\n {},\n {\n get: (target, prop, receiver) => {\n if (prop == '__config__') {\n return self;\n }\n\n if (self.#value === null) {\n throw new Error('MCP Server config value not set');\n }\n\n return (self.#value as any)[prop];\n }\n }\n ) as any as Config;\n }\n}\n\nexport let createConfig = <Config extends {}>(schema: z.ZodType<Config>) => {\n return McpServerConfig.create(schema).value();\n};\n\nexport let config = <Config extends {}>(schema: z.ZodType<Config>) => createConfig(schema);\n\nexport let setConfigValue = <Config extends {}>(configValue: any, value: Config) => {\n let self = configValue['__config__'] as McpServerConfig<Config>;\n self.setValue(value);\n};\n\nexport let getConfigSchema = <Config extends {}>(configValue: any) => {\n let self = configValue['__config__'] as McpServerConfig<Config>;\n return self.schema.toJSONSchema({\n unrepresentable: 'any',\n override: ctx => {\n let def = ctx.zodSchema._zod.def;\n\n if (def.type === 'date') {\n ctx.jsonSchema.type = 'string';\n ctx.jsonSchema.format = 'date-time';\n }\n if (def.type === 'bigint') {\n ctx.jsonSchema.type = 'number';\n }\n }\n });\n};\n","import z from 'zod';\nimport { McpServerInstance } from './instance';\n\nlet discoverMessage = z.object({\n type: z.literal('metorial-mcp.discover')\n});\ntype DiscoverMessage = z.infer<typeof discoverMessage>;\n\nlet authUrlMessage = z.object({\n type: z.literal('metorial-mcp.get-oauth-authorization-url'),\n params: z.object({\n authConfig: z.record(z.string(), z.any()),\n clientId: z.string(),\n clientSecret: z.string(),\n state: z.string(),\n redirectUri: z.string()\n })\n});\ntype AuthUrlMessage = z.infer<typeof authUrlMessage>;\n\nlet oauthCallbackMessage = z.object({\n type: z.literal('metorial-mcp.handle-oauth-callback'),\n params: z.object({\n authConfig: z.record(z.string(), z.any()),\n authState: z.record(z.string(), z.string()),\n clientId: z.string(),\n clientSecret: z.string(),\n code: z.string(),\n state: z.string(),\n redirectUri: z.string(),\n callbackUrl: z.string(),\n authorizationUrl: z.string()\n })\n});\ntype OauthCallbackMessage = z.infer<typeof oauthCallbackMessage>;\n\nlet oauthTokenRefreshMessage = z.object({\n type: z.literal('metorial-mcp.handle-oauth-token-refresh'),\n params: z.object({\n authConfig: z.record(z.string(), z.any()),\n authState: z.record(z.string(), z.string()),\n refreshToken: z.string(),\n clientId: z.string(),\n clientSecret: z.string()\n })\n});\ntype OauthTokenRefreshMessage = z.infer<typeof oauthTokenRefreshMessage>;\n\nlet allMessages = z.union([\n discoverMessage,\n authUrlMessage,\n oauthCallbackMessage,\n oauthTokenRefreshMessage\n]);\n\nexport type McpServerInstanceMessage =\n | DiscoverMessage\n | AuthUrlMessage\n | OauthCallbackMessage\n | OauthTokenRefreshMessage;\n\nexport let serverAdapter = async (\n instance: McpServerInstance,\n messages: McpServerInstanceMessage[]\n) =>\n Promise.all(\n messages.map(async message => {\n let parsed = allMessages.parse(message);\n\n switch (parsed.type) {\n case 'metorial-mcp.discover': {\n return instance.discover();\n }\n case 'metorial-mcp.get-oauth-authorization-url': {\n return instance.getOauthAuthorizationUrl(parsed.params);\n }\n case 'metorial-mcp.handle-oauth-callback': {\n return instance.handleOauthCallback(parsed.params);\n }\n case 'metorial-mcp.handle-oauth-token-refresh': {\n return instance.handleOauthTokenRefresh(parsed.params);\n }\n }\n\n throw new Error(`Unknown message type: ${(message as any).type}`);\n })\n );\n\nexport type McpServerInstanceAdapterResponses = Awaited<ReturnType<typeof serverAdapter>>;\n\nexport let clientAdapter = (\n transport: (\n messages: McpServerInstanceMessage[]\n ) => Promise<McpServerInstanceAdapterResponses>\n) => {\n let queue: {\n msg: McpServerInstanceMessage;\n resolve: (res: any) => void;\n reject: (err: any) => void;\n }[] = [];\n let isSent = { current: false };\n let isSending = { current: false };\n\n let send = async (message: McpServerInstanceMessage) => {\n let promise = new Promise<any>((resolve, reject) => {\n queue.push({ msg: message, resolve, reject });\n });\n\n if (!isSending.current) {\n isSending.current = true;\n\n setTimeout(async () => {\n isSent.current = true;\n\n try {\n let res = await transport(queue.map(q => q.msg));\n res.forEach((r, i) => {\n queue[i].resolve(r);\n });\n } catch (err) {\n queue.forEach(q => {\n q.reject(err);\n });\n } finally {\n queue = [];\n }\n }, 2);\n }\n\n return promise;\n };\n\n return {\n discover: async () => {\n return send({ type: 'metorial-mcp.discover' }) as Promise<\n Awaited<ReturnType<McpServerInstance['discover']>>\n >;\n },\n\n getOauthAuthorizationUrl: async (\n d: Parameters<McpServerInstance['getOauthAuthorizationUrl']>[0]\n ) => {\n return send({\n type: 'metorial-mcp.get-oauth-authorization-url',\n params: d\n }) as Promise<Awaited<ReturnType<McpServerInstance['getOauthAuthorizationUrl']>>>;\n },\n\n handleOauthCallback: async (\n d: Parameters<McpServerInstance['handleOauthCallback']>[0]\n ) => {\n return send({\n type: 'metorial-mcp.handle-oauth-callback',\n params: d\n }) as Promise<Awaited<ReturnType<McpServerInstance['handleOauthCallback']>>>;\n },\n\n handleOauthTokenRefresh: async (\n d: Parameters<McpServerInstance['handleOauthTokenRefresh']>[0]\n ) => {\n return send({\n type: 'metorial-mcp.handle-oauth-token-refresh',\n params: d\n }) as Promise<Awaited<ReturnType<McpServerInstance['handleOauthTokenRefresh']>>>;\n }\n };\n};\n"],"mappings":"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","names":["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 getAuthConfigImplementation,\n getAuthConfigSchema,\n McpServerAuthCallbackHandlerParams,\n McpServerAuthTokenRefreshHandlerParams,\n McpServerAuthUrlHandlerParams,\n setAuthConfigValue\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: getAuthConfigSchema(this.instance.authConfig),\n hasTokenRefresh: !!getAuthConfigImplementation(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 setAuthConfigValue(this.instance.authConfig, opts.authConfig);\n }\n\n return handleMcpMessages(this.#server, opts.client, opts.message);\n }\n\n getOauthAuthorizationUrl(d: McpServerAuthUrlHandlerParams<any>) {\n if (!this.instance.authConfig) return null;\n let impl = getAuthConfigImplementation(this.instance.authConfig);\n\n return impl.getAuthUrlHandler(d);\n }\n\n handleOauthCallback(d: McpServerAuthCallbackHandlerParams<any>) {\n if (!this.instance.authConfig) return null;\n let impl = getAuthConfigImplementation(this.instance.authConfig);\n\n return impl.callbackHandler(d);\n }\n\n handleOauthTokenRefresh(d: McpServerAuthTokenRefreshHandlerParams<any>) {\n if (!this.instance.authConfig) return null;\n let impl = getAuthConfigImplementation(this.instance.authConfig);\n\n if (!impl.tokenRefreshHandler) {\n return null;\n }\n\n return impl.tokenRefreshHandler(d);\n }\n}\n\nexport let createMcpServer = (instance: McpServerInstanceOpts) => {\n return McpServerInstance.create(instance);\n};\n","import z from 'zod';\n\nexport type McpServerAuthUrlHandlerParams<AuthConfig extends {}> = {\n authConfig: AuthConfig;\n clientId: string;\n clientSecret: string;\n state: string;\n redirectUri: string;\n};\n\nexport type McpServerAuthUrlHandlerResult = {\n authorizationUrl: string;\n authState?: Record<string, string> | null;\n};\n\nexport type McpServerAuthUrlHandlerInternal = <AuthConfig extends {}>(\n d: McpServerAuthUrlHandlerParams<AuthConfig>\n) => Promise<McpServerAuthUrlHandlerResult>;\n\nexport type McpServerAuthUrlHandler = <AuthConfig extends {}>(\n d: McpServerAuthUrlHandlerParams<AuthConfig>\n) => Promise<string | McpServerAuthUrlHandlerResult>;\n\nexport type McpServerAuthCallbackHandlerParams<AuthConfig extends {}> = {\n authConfig: AuthConfig;\n authState: Record<string, string>;\n clientId: string;\n clientSecret: string;\n code: string;\n state: string;\n redirectUri: string;\n callbackUrl: string;\n authorizationUrl: string;\n};\n\nexport type McpServerAuthCallbackHandlerResult = {\n accessToken: string;\n refreshToken?: string;\n expiresIn?: number;\n scope?: string;\n tokenType?: string;\n [key: string]: any;\n};\n\nexport type McpServerAuthCallbackHandler = <AuthConfig extends {}>(\n d: McpServerAuthCallbackHandlerParams<AuthConfig>\n) => Promise<McpServerAuthCallbackHandlerResult>;\n\nexport type McpServerAuthTokenRefreshHandlerParams<AuthConfig extends {}> = {\n authConfig: AuthConfig;\n authState: Record<string, string>;\n refreshToken: string;\n clientId: string;\n clientSecret: string;\n};\n\nexport type McpServerAuthTokenRefreshHandlerResult = {\n accessToken: string;\n refreshToken?: string;\n expiresIn?: number;\n scope?: string;\n tokenType?: string;\n [key: string]: any;\n};\n\nexport type McpServerAuthTokenRefreshHandler = <AuthConfig extends {}>(\n d: McpServerAuthTokenRefreshHandlerParams<AuthConfig>\n) => Promise<McpServerAuthTokenRefreshHandlerResult>;\n\nexport type McpServerAuthValue = {\n accessToken: string;\n expiresIn?: number;\n scope?: string;\n tokenType?: string;\n [key: string]: any;\n};\n\nexport class McpServerAuthConfig<AuthConfig extends {}> {\n #value: McpServerAuthValue | null = null;\n\n #getAuthUrlHandler?: McpServerAuthUrlHandlerInternal;\n #callbackHandler?: McpServerAuthCallbackHandler;\n #tokenRefreshHandler?: McpServerAuthTokenRefreshHandler;\n\n private constructor(public readonly schema: z.ZodType<AuthConfig>) {}\n\n static create<AuthConfig extends {}>(schema?: z.ZodType<AuthConfig>) {\n return new McpServerAuthConfig(schema ?? (z.object({}) as z.ZodType<AuthConfig>));\n }\n\n static getImplementation(config: McpServerAuthConfig<any>) {\n if (!config.#getAuthUrlHandler || !config.#callbackHandler) {\n throw new Error('MCP Server auth config is missing required handlers');\n }\n\n return {\n getAuthUrlHandler: config.#getAuthUrlHandler,\n callbackHandler: config.#callbackHandler,\n tokenRefreshHandler: config.#tokenRefreshHandler\n };\n }\n\n setValue(value: McpServerAuthValue) {\n this.#value = value;\n }\n\n getAuthorizationUrl(cb: McpServerAuthUrlHandler) {\n this.#getAuthUrlHandler = async d => {\n let res = await cb(d);\n if (typeof res == 'string') {\n return { authorizationUrl: res };\n }\n return res;\n };\n return this;\n }\n\n handleCallback(cb: McpServerAuthCallbackHandler) {\n this.#callbackHandler = cb;\n return this;\n }\n\n refreshToken(cb: McpServerAuthTokenRefreshHandler) {\n this.#tokenRefreshHandler = cb;\n return this;\n }\n\n build(): AuthConfig {\n if (!this.#getAuthUrlHandler || !this.#callbackHandler) {\n throw new Error('MCP Server auth config is missing required handlers');\n }\n\n let self = this;\n\n // Proxy for getting the config values\n // or throwing an error if not set\n return new Proxy(\n {},\n {\n get: (target, prop, receiver) => {\n if (prop == '__config__') {\n return self;\n }\n\n if (self.#value === null) {\n throw new Error('MCP Server auth config value not set');\n }\n\n return (self.#value as any)[prop];\n }\n }\n ) as any as AuthConfig;\n }\n}\n\nexport let createAuth = <Config extends {}>(schema?: z.ZodType<Config>) => {\n return McpServerAuthConfig.create(schema);\n};\n\nexport let auth = <Config extends {}>(schema?: z.ZodType<Config>) => createAuth(schema);\n\nexport let getAuthConfigImplementation = <Config extends {}>(configValue: any) => {\n let self = configValue['__config__'] as McpServerAuthConfig<Config>;\n return McpServerAuthConfig.getImplementation(self);\n};\n\nexport let setAuthConfigValue = <Config extends {}>(\n configValue: any,\n value: McpServerAuthValue\n) => {\n let self = configValue['__config__'] as McpServerAuthConfig<Config>;\n self.setValue(value);\n};\n\nexport let getAuthConfigSchema = <Config extends {}>(configValue: any) => {\n let self = configValue['__config__'] as McpServerAuthConfig<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 auth,\n createAuth,\n type McpServerAuthCallbackHandler,\n type McpServerAuthCallbackHandlerParams,\n type McpServerAuthCallbackHandlerResult,\n type McpServerAuthConfig,\n type McpServerAuthTokenRefreshHandler,\n type McpServerAuthTokenRefreshHandlerParams,\n type McpServerAuthTokenRefreshHandlerResult,\n type McpServerAuthUrlHandler,\n type McpServerAuthUrlHandlerInternal,\n type McpServerAuthUrlHandlerParams,\n type McpServerAuthUrlHandlerResult,\n type McpServerAuthValue\n} from './auth';\n\nexport { config, createConfig, type McpServerConfig } from './config';\n\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"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@metorial/mcp-server",
3
- "version": "1.0.0-rc.1",
3
+ "version": "1.0.0-rc.2",
4
4
  "publishConfig": {
5
5
  "access": "public"
6
6
  },
package/src/adapter.ts CHANGED
@@ -46,18 +46,34 @@ let oauthTokenRefreshMessage = z.object({
46
46
  });
47
47
  type OauthTokenRefreshMessage = z.infer<typeof oauthTokenRefreshMessage>;
48
48
 
49
+ let handleMcpMessage = z.object({
50
+ type: z.literal('metorial-mcp.handle-mcp-message'),
51
+ params: z.object({
52
+ authConfig: z.optional(z.record(z.string(), z.any())),
53
+ config: z.record(z.string(), z.any()),
54
+ client: z.object({
55
+ client: z.record(z.string(), z.any()),
56
+ capabilities: z.record(z.string(), z.any())
57
+ }),
58
+ messages: z.array(z.any())
59
+ })
60
+ });
61
+ type HandleMcpMessage = z.infer<typeof handleMcpMessage>;
62
+
49
63
  let allMessages = z.union([
50
64
  discoverMessage,
51
65
  authUrlMessage,
52
66
  oauthCallbackMessage,
53
- oauthTokenRefreshMessage
67
+ oauthTokenRefreshMessage,
68
+ handleMcpMessage
54
69
  ]);
55
70
 
56
71
  export type McpServerInstanceMessage =
57
72
  | DiscoverMessage
58
73
  | AuthUrlMessage
59
74
  | OauthCallbackMessage
60
- | OauthTokenRefreshMessage;
75
+ | OauthTokenRefreshMessage
76
+ | HandleMcpMessage;
61
77
 
62
78
  export let serverAdapter = async (
63
79
  instance: McpServerInstance,
@@ -80,6 +96,14 @@ export let serverAdapter = async (
80
96
  case 'metorial-mcp.handle-oauth-token-refresh': {
81
97
  return instance.handleOauthTokenRefresh(parsed.params);
82
98
  }
99
+ case 'metorial-mcp.handle-mcp-message': {
100
+ return instance.handleMcpMessages({
101
+ config: parsed.params.config || {},
102
+ authConfig: parsed.params.authConfig || {},
103
+ client: parsed.params.client as any,
104
+ message: parsed.params.messages
105
+ });
106
+ }
83
107
  }
84
108
 
85
109
  throw new Error(`Unknown message type: ${(message as any).type}`);
package/src/auth.ts CHANGED
@@ -82,7 +82,7 @@ export class McpServerAuthConfig<AuthConfig extends {}> {
82
82
  #callbackHandler?: McpServerAuthCallbackHandler;
83
83
  #tokenRefreshHandler?: McpServerAuthTokenRefreshHandler;
84
84
 
85
- private constructor(private readonly schema: z.ZodType<AuthConfig>) {}
85
+ private constructor(public readonly schema: z.ZodType<AuthConfig>) {}
86
86
 
87
87
  static create<AuthConfig extends {}>(schema?: z.ZodType<AuthConfig>) {
88
88
  return new McpServerAuthConfig(schema ?? (z.object({}) as z.ZodType<AuthConfig>));
@@ -163,3 +163,29 @@ export let getAuthConfigImplementation = <Config extends {}>(configValue: any) =
163
163
  let self = configValue['__config__'] as McpServerAuthConfig<Config>;
164
164
  return McpServerAuthConfig.getImplementation(self);
165
165
  };
166
+
167
+ export let setAuthConfigValue = <Config extends {}>(
168
+ configValue: any,
169
+ value: McpServerAuthValue
170
+ ) => {
171
+ let self = configValue['__config__'] as McpServerAuthConfig<Config>;
172
+ self.setValue(value);
173
+ };
174
+
175
+ export let getAuthConfigSchema = <Config extends {}>(configValue: any) => {
176
+ let self = configValue['__config__'] as McpServerAuthConfig<Config>;
177
+ return self.schema.toJSONSchema({
178
+ unrepresentable: 'any',
179
+ override: ctx => {
180
+ let def = ctx.zodSchema._zod.def;
181
+
182
+ if (def.type === 'date') {
183
+ ctx.jsonSchema.type = 'string';
184
+ ctx.jsonSchema.format = 'date-time';
185
+ }
186
+ if (def.type === 'bigint') {
187
+ ctx.jsonSchema.type = 'number';
188
+ }
189
+ }
190
+ });
191
+ };
package/src/index.ts CHANGED
@@ -30,3 +30,13 @@ export {
30
30
  } from './auth';
31
31
 
32
32
  export { config, createConfig, type McpServerConfig } from './config';
33
+
34
+ export {
35
+ McpTool,
36
+ type McpServerInfo,
37
+ type McpToolAnnotations,
38
+ type McpToolHandlerOutput,
39
+ type McpToolHandlerOutputSync,
40
+ type McpToolImplementation,
41
+ type McpToolOpts
42
+ } from '@metorial/mcp';
package/src/instance.ts CHANGED
@@ -2,13 +2,15 @@ import {
2
2
  createMcpServer as createMcpServerInternal,
3
3
  CreateMcpServerOpts
4
4
  } from '@metorial/mcp';
5
- import { McpServer } from '@modelcontextprotocol/sdk/server/mcp';
6
- import { JSONRPCMessage } from '@modelcontextprotocol/sdk/types';
5
+ import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
6
+ import { JSONRPCMessage } from '@modelcontextprotocol/sdk/types.js';
7
7
  import {
8
8
  getAuthConfigImplementation,
9
+ getAuthConfigSchema,
9
10
  McpServerAuthCallbackHandlerParams,
10
11
  McpServerAuthTokenRefreshHandlerParams,
11
- McpServerAuthUrlHandlerParams
12
+ McpServerAuthUrlHandlerParams,
13
+ setAuthConfigValue
12
14
  } from './auth';
13
15
  import { ClientOpts, handleMcpMessages } from './client';
14
16
  import { getConfigSchema, setConfigValue } from './config';
@@ -44,6 +46,7 @@ export class McpServerInstance {
44
46
  oauth: this.instance.authConfig
45
47
  ? {
46
48
  status: 'enabled' as const,
49
+ authConfig: getAuthConfigSchema(this.instance.authConfig),
47
50
  hasTokenRefresh: !!getAuthConfigImplementation(this.instance.authConfig)
48
51
  .tokenRefreshHandler
49
52
  }
@@ -53,8 +56,18 @@ export class McpServerInstance {
53
56
  };
54
57
  }
55
58
 
56
- handleMcpMessages(opts: { config: any; client: ClientOpts; message: JSONRPCMessage[] }) {
57
- setConfigValue(this.instance.config, opts.config);
59
+ handleMcpMessages(opts: {
60
+ config: any;
61
+ authConfig: any;
62
+ client: ClientOpts;
63
+ message: JSONRPCMessage[];
64
+ }) {
65
+ if (this.instance.config) {
66
+ setConfigValue(this.instance.config, opts.config);
67
+ }
68
+ if (opts.authConfig && this.instance.authConfig) {
69
+ setAuthConfigValue(this.instance.authConfig, opts.authConfig);
70
+ }
58
71
 
59
72
  return handleMcpMessages(this.#server, opts.client, opts.message);
60
73
  }