@metorial/mcp-server 1.0.0-rc.1

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