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

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
@@ -186,16 +186,23 @@ var handleMcpMessages = async (server, opts, messages) => {
186
186
  let client = await getClient(
187
187
  server,
188
188
  async (notification) => {
189
- responses.push(notification);
189
+ responses.push({
190
+ ...notification,
191
+ jsonrpc: "2.0"
192
+ });
190
193
  },
191
194
  opts
192
195
  );
193
196
  let error = null;
194
197
  for (let message of messages) {
195
198
  try {
196
- if ("id" in message) {
199
+ if ("id" in message && message.id !== void 0) {
197
200
  let res = await client.request(message, import_zod2.default.any());
198
- responses.push(res);
201
+ responses.push({
202
+ id: message.id,
203
+ jsonrpc: "2.0",
204
+ result: res
205
+ });
199
206
  } else {
200
207
  await client.notification(message);
201
208
  }
@@ -304,8 +311,24 @@ var McpServerInstance = class _McpServerInstance {
304
311
  static create(instance) {
305
312
  return new _McpServerInstance(instance);
306
313
  }
307
- discover() {
314
+ async discover() {
315
+ let client = await getClient(this.#server, async (notification) => {
316
+ }, {
317
+ client: {
318
+ name: "Metorial Discovery",
319
+ version: "1.0.0"
320
+ },
321
+ capabilities: {}
322
+ });
323
+ let info = client.getServerVersion();
324
+ let capabilities = client.getServerCapabilities();
325
+ let instructions = client.getInstructions();
308
326
  return {
327
+ server: {
328
+ info,
329
+ capabilities,
330
+ instructions
331
+ },
309
332
  configSchema: this.instance.config ? getConfigSchema(this.instance.config) : null,
310
333
  oauth: this.instance.authConfig ? {
311
334
  status: "enabled",
@@ -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 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"]}
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, getClient, 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 async discover() {\n let client = await getClient(this.#server, async notification => {}, {\n client: {\n name: 'Metorial Discovery',\n version: '1.0.0'\n },\n capabilities: {}\n });\n\n let info = client.getServerVersion();\n let capabilities = client.getServerCapabilities();\n let instructions = client.getInstructions();\n\n return {\n server: {\n info,\n capabilities,\n instructions\n },\n\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({\n ...notification,\n jsonrpc: '2.0'\n });\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 && message.id !== undefined) {\n let res = await client.request(message as any, z.any());\n responses.push({\n id: message.id,\n jsonrpc: '2.0',\n result: res\n });\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
@@ -111,7 +111,52 @@ declare class McpServerInstance {
111
111
  private instance;
112
112
  private constructor();
113
113
  static create(instance: McpServerInstanceOpts): McpServerInstance;
114
- discover(): {
114
+ discover(): Promise<{
115
+ server: {
116
+ info: {
117
+ version: string;
118
+ name: string;
119
+ websiteUrl?: string | undefined;
120
+ description?: string | undefined;
121
+ icons?: {
122
+ src: string;
123
+ mimeType?: string | undefined;
124
+ sizes?: string[] | undefined;
125
+ theme?: "light" | "dark" | undefined;
126
+ }[] | undefined;
127
+ title?: string | undefined;
128
+ } | undefined;
129
+ capabilities: {
130
+ experimental?: {
131
+ [x: string]: object;
132
+ } | undefined;
133
+ logging?: object | undefined;
134
+ completions?: object | undefined;
135
+ prompts?: {
136
+ listChanged?: boolean | undefined;
137
+ } | undefined;
138
+ resources?: {
139
+ subscribe?: boolean | undefined;
140
+ listChanged?: boolean | undefined;
141
+ } | undefined;
142
+ tools?: {
143
+ listChanged?: boolean | undefined;
144
+ } | undefined;
145
+ tasks?: {
146
+ [x: string]: unknown;
147
+ list?: object | undefined;
148
+ cancel?: object | undefined;
149
+ requests?: {
150
+ [x: string]: unknown;
151
+ tools?: {
152
+ [x: string]: unknown;
153
+ call?: object | undefined;
154
+ } | undefined;
155
+ } | undefined;
156
+ } | undefined;
157
+ } | undefined;
158
+ instructions: string | undefined;
159
+ };
115
160
  configSchema: zod_v4_core.ZodStandardJSONSchemaPayload<z.ZodType<{}, unknown, zod_v4_core.$ZodTypeInternals<{}, unknown>>> | null;
116
161
  oauth: {
117
162
  status: "enabled";
@@ -122,7 +167,7 @@ declare class McpServerInstance {
122
167
  authConfig?: undefined;
123
168
  hasTokenRefresh?: undefined;
124
169
  };
125
- };
170
+ }>;
126
171
  handleMcpMessages(opts: {
127
172
  config: any;
128
173
  authConfig: any;
@@ -197,6 +242,51 @@ declare let serverAdapter: (instance: McpServerInstance, messages: McpServerInst
197
242
  messages: _modelcontextprotocol_sdk_types.JSONRPCMessage[];
198
243
  error: Error | null;
199
244
  } | {
245
+ server: {
246
+ info: {
247
+ version: string;
248
+ name: string;
249
+ websiteUrl?: string | undefined;
250
+ description?: string | undefined;
251
+ icons?: {
252
+ src: string;
253
+ mimeType?: string | undefined;
254
+ sizes?: string[] | undefined;
255
+ theme?: "light" | "dark" | undefined;
256
+ }[] | undefined;
257
+ title?: string | undefined;
258
+ } | undefined;
259
+ capabilities: {
260
+ experimental?: {
261
+ [x: string]: object;
262
+ } | undefined;
263
+ logging?: object | undefined;
264
+ completions?: object | undefined;
265
+ prompts?: {
266
+ listChanged?: boolean | undefined;
267
+ } | undefined;
268
+ resources?: {
269
+ subscribe?: boolean | undefined;
270
+ listChanged?: boolean | undefined;
271
+ } | undefined;
272
+ tools?: {
273
+ listChanged?: boolean | undefined;
274
+ } | undefined;
275
+ tasks?: {
276
+ [x: string]: unknown;
277
+ list?: object | undefined;
278
+ cancel?: object | undefined;
279
+ requests?: {
280
+ [x: string]: unknown;
281
+ tools?: {
282
+ [x: string]: unknown;
283
+ call?: object | undefined;
284
+ } | undefined;
285
+ } | undefined;
286
+ } | undefined;
287
+ } | undefined;
288
+ instructions: string | undefined;
289
+ };
200
290
  configSchema: z__default.core.ZodStandardJSONSchemaPayload<z__default.ZodType<{}, unknown, z__default.core.$ZodTypeInternals<{}, unknown>>> | null;
201
291
  oauth: {
202
292
  status: "enabled";
@@ -211,6 +301,51 @@ declare let serverAdapter: (instance: McpServerInstance, messages: McpServerInst
211
301
  type McpServerInstanceAdapterResponses = Awaited<ReturnType<typeof serverAdapter>>;
212
302
  declare let clientAdapter: (transport: (messages: McpServerInstanceMessage[]) => Promise<McpServerInstanceAdapterResponses>) => {
213
303
  discover: () => Promise<{
304
+ server: {
305
+ info: {
306
+ version: string;
307
+ name: string;
308
+ websiteUrl?: string | undefined;
309
+ description?: string | undefined;
310
+ icons?: {
311
+ src: string;
312
+ mimeType?: string | undefined;
313
+ sizes?: string[] | undefined;
314
+ theme?: "light" | "dark" | undefined;
315
+ }[] | undefined;
316
+ title?: string | undefined;
317
+ } | undefined;
318
+ capabilities: {
319
+ experimental?: {
320
+ [x: string]: object;
321
+ } | undefined;
322
+ logging?: object | undefined;
323
+ completions?: object | undefined;
324
+ prompts?: {
325
+ listChanged?: boolean | undefined;
326
+ } | undefined;
327
+ resources?: {
328
+ subscribe?: boolean | undefined;
329
+ listChanged?: boolean | undefined;
330
+ } | undefined;
331
+ tools?: {
332
+ listChanged?: boolean | undefined;
333
+ } | undefined;
334
+ tasks?: {
335
+ [x: string]: unknown;
336
+ list?: object | undefined;
337
+ cancel?: object | undefined;
338
+ requests?: {
339
+ [x: string]: unknown;
340
+ tools?: {
341
+ [x: string]: unknown;
342
+ call?: object | undefined;
343
+ } | undefined;
344
+ } | undefined;
345
+ } | undefined;
346
+ } | undefined;
347
+ instructions: string | undefined;
348
+ };
214
349
  configSchema: z__default.core.ZodStandardJSONSchemaPayload<z__default.ZodType<{}, unknown, z__default.core.$ZodTypeInternals<{}, unknown>>> | null;
215
350
  oauth: {
216
351
  status: "enabled";
package/dist/index.d.ts CHANGED
@@ -111,7 +111,52 @@ declare class McpServerInstance {
111
111
  private instance;
112
112
  private constructor();
113
113
  static create(instance: McpServerInstanceOpts): McpServerInstance;
114
- discover(): {
114
+ discover(): Promise<{
115
+ server: {
116
+ info: {
117
+ version: string;
118
+ name: string;
119
+ websiteUrl?: string | undefined;
120
+ description?: string | undefined;
121
+ icons?: {
122
+ src: string;
123
+ mimeType?: string | undefined;
124
+ sizes?: string[] | undefined;
125
+ theme?: "light" | "dark" | undefined;
126
+ }[] | undefined;
127
+ title?: string | undefined;
128
+ } | undefined;
129
+ capabilities: {
130
+ experimental?: {
131
+ [x: string]: object;
132
+ } | undefined;
133
+ logging?: object | undefined;
134
+ completions?: object | undefined;
135
+ prompts?: {
136
+ listChanged?: boolean | undefined;
137
+ } | undefined;
138
+ resources?: {
139
+ subscribe?: boolean | undefined;
140
+ listChanged?: boolean | undefined;
141
+ } | undefined;
142
+ tools?: {
143
+ listChanged?: boolean | undefined;
144
+ } | undefined;
145
+ tasks?: {
146
+ [x: string]: unknown;
147
+ list?: object | undefined;
148
+ cancel?: object | undefined;
149
+ requests?: {
150
+ [x: string]: unknown;
151
+ tools?: {
152
+ [x: string]: unknown;
153
+ call?: object | undefined;
154
+ } | undefined;
155
+ } | undefined;
156
+ } | undefined;
157
+ } | undefined;
158
+ instructions: string | undefined;
159
+ };
115
160
  configSchema: zod_v4_core.ZodStandardJSONSchemaPayload<z.ZodType<{}, unknown, zod_v4_core.$ZodTypeInternals<{}, unknown>>> | null;
116
161
  oauth: {
117
162
  status: "enabled";
@@ -122,7 +167,7 @@ declare class McpServerInstance {
122
167
  authConfig?: undefined;
123
168
  hasTokenRefresh?: undefined;
124
169
  };
125
- };
170
+ }>;
126
171
  handleMcpMessages(opts: {
127
172
  config: any;
128
173
  authConfig: any;
@@ -197,6 +242,51 @@ declare let serverAdapter: (instance: McpServerInstance, messages: McpServerInst
197
242
  messages: _modelcontextprotocol_sdk_types.JSONRPCMessage[];
198
243
  error: Error | null;
199
244
  } | {
245
+ server: {
246
+ info: {
247
+ version: string;
248
+ name: string;
249
+ websiteUrl?: string | undefined;
250
+ description?: string | undefined;
251
+ icons?: {
252
+ src: string;
253
+ mimeType?: string | undefined;
254
+ sizes?: string[] | undefined;
255
+ theme?: "light" | "dark" | undefined;
256
+ }[] | undefined;
257
+ title?: string | undefined;
258
+ } | undefined;
259
+ capabilities: {
260
+ experimental?: {
261
+ [x: string]: object;
262
+ } | undefined;
263
+ logging?: object | undefined;
264
+ completions?: object | undefined;
265
+ prompts?: {
266
+ listChanged?: boolean | undefined;
267
+ } | undefined;
268
+ resources?: {
269
+ subscribe?: boolean | undefined;
270
+ listChanged?: boolean | undefined;
271
+ } | undefined;
272
+ tools?: {
273
+ listChanged?: boolean | undefined;
274
+ } | undefined;
275
+ tasks?: {
276
+ [x: string]: unknown;
277
+ list?: object | undefined;
278
+ cancel?: object | undefined;
279
+ requests?: {
280
+ [x: string]: unknown;
281
+ tools?: {
282
+ [x: string]: unknown;
283
+ call?: object | undefined;
284
+ } | undefined;
285
+ } | undefined;
286
+ } | undefined;
287
+ } | undefined;
288
+ instructions: string | undefined;
289
+ };
200
290
  configSchema: z__default.core.ZodStandardJSONSchemaPayload<z__default.ZodType<{}, unknown, z__default.core.$ZodTypeInternals<{}, unknown>>> | null;
201
291
  oauth: {
202
292
  status: "enabled";
@@ -211,6 +301,51 @@ declare let serverAdapter: (instance: McpServerInstance, messages: McpServerInst
211
301
  type McpServerInstanceAdapterResponses = Awaited<ReturnType<typeof serverAdapter>>;
212
302
  declare let clientAdapter: (transport: (messages: McpServerInstanceMessage[]) => Promise<McpServerInstanceAdapterResponses>) => {
213
303
  discover: () => Promise<{
304
+ server: {
305
+ info: {
306
+ version: string;
307
+ name: string;
308
+ websiteUrl?: string | undefined;
309
+ description?: string | undefined;
310
+ icons?: {
311
+ src: string;
312
+ mimeType?: string | undefined;
313
+ sizes?: string[] | undefined;
314
+ theme?: "light" | "dark" | undefined;
315
+ }[] | undefined;
316
+ title?: string | undefined;
317
+ } | undefined;
318
+ capabilities: {
319
+ experimental?: {
320
+ [x: string]: object;
321
+ } | undefined;
322
+ logging?: object | undefined;
323
+ completions?: object | undefined;
324
+ prompts?: {
325
+ listChanged?: boolean | undefined;
326
+ } | undefined;
327
+ resources?: {
328
+ subscribe?: boolean | undefined;
329
+ listChanged?: boolean | undefined;
330
+ } | undefined;
331
+ tools?: {
332
+ listChanged?: boolean | undefined;
333
+ } | undefined;
334
+ tasks?: {
335
+ [x: string]: unknown;
336
+ list?: object | undefined;
337
+ cancel?: object | undefined;
338
+ requests?: {
339
+ [x: string]: unknown;
340
+ tools?: {
341
+ [x: string]: unknown;
342
+ call?: object | undefined;
343
+ } | undefined;
344
+ } | undefined;
345
+ } | undefined;
346
+ } | undefined;
347
+ instructions: string | undefined;
348
+ };
214
349
  configSchema: z__default.core.ZodStandardJSONSchemaPayload<z__default.ZodType<{}, unknown, z__default.core.$ZodTypeInternals<{}, unknown>>> | null;
215
350
  oauth: {
216
351
  status: "enabled";
package/dist/index.js CHANGED
@@ -145,16 +145,23 @@ var handleMcpMessages = async (server, opts, messages) => {
145
145
  let client = await getClient(
146
146
  server,
147
147
  async (notification) => {
148
- responses.push(notification);
148
+ responses.push({
149
+ ...notification,
150
+ jsonrpc: "2.0"
151
+ });
149
152
  },
150
153
  opts
151
154
  );
152
155
  let error = null;
153
156
  for (let message of messages) {
154
157
  try {
155
- if ("id" in message) {
158
+ if ("id" in message && message.id !== void 0) {
156
159
  let res = await client.request(message, z2.any());
157
- responses.push(res);
160
+ responses.push({
161
+ id: message.id,
162
+ jsonrpc: "2.0",
163
+ result: res
164
+ });
158
165
  } else {
159
166
  await client.notification(message);
160
167
  }
@@ -263,8 +270,24 @@ var McpServerInstance = class _McpServerInstance {
263
270
  static create(instance) {
264
271
  return new _McpServerInstance(instance);
265
272
  }
266
- discover() {
273
+ async discover() {
274
+ let client = await getClient(this.#server, async (notification) => {
275
+ }, {
276
+ client: {
277
+ name: "Metorial Discovery",
278
+ version: "1.0.0"
279
+ },
280
+ capabilities: {}
281
+ });
282
+ let info = client.getServerVersion();
283
+ let capabilities = client.getServerCapabilities();
284
+ let instructions = client.getInstructions();
267
285
  return {
286
+ server: {
287
+ info,
288
+ capabilities,
289
+ instructions
290
+ },
268
291
  configSchema: this.instance.config ? getConfigSchema(this.instance.config) : null,
269
292
  oauth: this.instance.authConfig ? {
270
293
  status: "enabled",
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 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":"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","names":["config","z","config","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, getClient, 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 async discover() {\n let client = await getClient(this.#server, async notification => {}, {\n client: {\n name: 'Metorial Discovery',\n version: '1.0.0'\n },\n capabilities: {}\n });\n\n let info = client.getServerVersion();\n let capabilities = client.getServerCapabilities();\n let instructions = client.getInstructions();\n\n return {\n server: {\n info,\n capabilities,\n instructions\n },\n\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({\n ...notification,\n jsonrpc: '2.0'\n });\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 && message.id !== undefined) {\n let res = await client.request(message as any, z.any());\n responses.push({\n id: message.id,\n jsonrpc: '2.0',\n result: res\n });\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":"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","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.6",
3
+ "version": "1.0.0-rc.8",
4
4
  "publishConfig": {
5
5
  "access": "public"
6
6
  },
package/src/client.ts CHANGED
@@ -44,7 +44,10 @@ export let handleMcpMessages = async (
44
44
  let client = await getClient(
45
45
  server,
46
46
  async notification => {
47
- responses.push(notification as JSONRPCMessage);
47
+ responses.push({
48
+ ...notification,
49
+ jsonrpc: '2.0'
50
+ });
48
51
  },
49
52
  opts
50
53
  );
@@ -53,9 +56,13 @@ export let handleMcpMessages = async (
53
56
 
54
57
  for (let message of messages) {
55
58
  try {
56
- if ('id' in message) {
59
+ if ('id' in message && message.id !== undefined) {
57
60
  let res = await client.request(message as any, z.any());
58
- responses.push(res);
61
+ responses.push({
62
+ id: message.id,
63
+ jsonrpc: '2.0',
64
+ result: res
65
+ });
59
66
  } else {
60
67
  await client.notification(message as any);
61
68
  }
package/src/instance.ts CHANGED
@@ -15,7 +15,7 @@ import {
15
15
  registerOAuthConfig,
16
16
  setOAuthConfigValue
17
17
  } from './auth';
18
- import { ClientOpts, handleMcpMessages } from './client';
18
+ import { ClientOpts, getClient, handleMcpMessages } from './client';
19
19
  import {
20
20
  configs,
21
21
  getConfigSchema,
@@ -55,8 +55,26 @@ export class McpServerInstance {
55
55
  return new McpServerInstance(instance);
56
56
  }
57
57
 
58
- discover() {
58
+ async discover() {
59
+ let client = await getClient(this.#server, async notification => {}, {
60
+ client: {
61
+ name: 'Metorial Discovery',
62
+ version: '1.0.0'
63
+ },
64
+ capabilities: {}
65
+ });
66
+
67
+ let info = client.getServerVersion();
68
+ let capabilities = client.getServerCapabilities();
69
+ let instructions = client.getInstructions();
70
+
59
71
  return {
72
+ server: {
73
+ info,
74
+ capabilities,
75
+ instructions
76
+ },
77
+
60
78
  configSchema: this.instance.config ? getConfigSchema(this.instance.config) : null,
61
79
  oauth: this.instance.authConfig
62
80
  ? {