@mcp-z/mcp-gmail 1.0.5 → 1.0.7
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/README.md +1 -0
- package/dist/cjs/lib/create-store.js +29 -2
- package/dist/cjs/lib/create-store.js.map +1 -1
- package/dist/cjs/setup/http.js +15 -9
- package/dist/cjs/setup/http.js.map +1 -1
- package/dist/cjs/setup/runtime.d.cts +1 -1
- package/dist/cjs/setup/runtime.d.ts +1 -1
- package/dist/cjs/setup/runtime.js +14 -7
- package/dist/cjs/setup/runtime.js.map +1 -1
- package/dist/cjs/setup/stdio.js +6 -2
- package/dist/cjs/setup/stdio.js.map +1 -1
- package/dist/esm/lib/create-store.js +26 -1
- package/dist/esm/lib/create-store.js.map +1 -1
- package/dist/esm/setup/http.js +12 -8
- package/dist/esm/setup/http.js.map +1 -1
- package/dist/esm/setup/runtime.d.ts +1 -1
- package/dist/esm/setup/runtime.js +15 -7
- package/dist/esm/setup/runtime.js.map +1 -1
- package/dist/esm/setup/stdio.js +3 -1
- package/dist/esm/setup/stdio.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -142,19 +142,46 @@ function _ts_generator(thisArg, body) {
|
|
|
142
142
|
};
|
|
143
143
|
}
|
|
144
144
|
}
|
|
145
|
+
function parseDefaultTtl(uri) {
|
|
146
|
+
try {
|
|
147
|
+
var url = new URL(uri);
|
|
148
|
+
var ttlParam = url.searchParams.get('ttl');
|
|
149
|
+
var ttlSecondsParam = url.searchParams.get('ttlSeconds');
|
|
150
|
+
var ttlMs = ttlSecondsParam ? Number(ttlSecondsParam) * 1000 : ttlParam ? Number(ttlParam) : undefined;
|
|
151
|
+
url.searchParams.delete('ttl');
|
|
152
|
+
url.searchParams.delete('ttlSeconds');
|
|
153
|
+
return Number.isFinite(ttlMs) && ttlMs > 0 ? {
|
|
154
|
+
uri: url.toString(),
|
|
155
|
+
ttl: ttlMs
|
|
156
|
+
} : {
|
|
157
|
+
uri: url.toString()
|
|
158
|
+
};
|
|
159
|
+
} catch (unused) {
|
|
160
|
+
return {
|
|
161
|
+
uri: uri
|
|
162
|
+
};
|
|
163
|
+
}
|
|
164
|
+
}
|
|
145
165
|
function createStore(uri) {
|
|
146
166
|
return _async_to_generator(function() {
|
|
147
|
-
var store;
|
|
167
|
+
var _parseDefaultTtl, parsedUri, defaultTtl, store, originalSet;
|
|
148
168
|
return _ts_generator(this, function(_state) {
|
|
149
169
|
switch(_state.label){
|
|
150
170
|
case 0:
|
|
171
|
+
_parseDefaultTtl = parseDefaultTtl(uri), parsedUri = _parseDefaultTtl.uri, defaultTtl = _parseDefaultTtl.ttl;
|
|
151
172
|
return [
|
|
152
173
|
4,
|
|
153
|
-
(0, _keyvregistry.default)(
|
|
174
|
+
(0, _keyvregistry.default)(parsedUri)
|
|
154
175
|
];
|
|
155
176
|
case 1:
|
|
156
177
|
store = _state.sent();
|
|
157
178
|
if (!store) throw new Error("Failed to create store for URI: ".concat(uri));
|
|
179
|
+
if (defaultTtl !== undefined) {
|
|
180
|
+
originalSet = store.set.bind(store);
|
|
181
|
+
store.set = function(key, value, ttl) {
|
|
182
|
+
return originalSet(key, value, ttl !== null && ttl !== void 0 ? ttl : defaultTtl);
|
|
183
|
+
};
|
|
184
|
+
}
|
|
158
185
|
return [
|
|
159
186
|
2,
|
|
160
187
|
store
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["/Users/kevin/Dev/Projects/mcp-z/mcp-gmail/src/lib/create-store.ts"],"sourcesContent":["import type Keyv from 'keyv';\nimport keyvRegistry from 'keyv-registry';\n\nexport default async function createStore<T>(uri: string): Promise<Keyv<T>> {\n const store = await keyvRegistry<T>(
|
|
1
|
+
{"version":3,"sources":["/Users/kevin/Dev/Projects/mcp-z/mcp-gmail/src/lib/create-store.ts"],"sourcesContent":["import type Keyv from 'keyv';\nimport keyvRegistry from 'keyv-registry';\n\nfunction parseDefaultTtl(uri: string): { uri: string; ttl?: number } {\n try {\n const url = new URL(uri);\n const ttlParam = url.searchParams.get('ttl');\n const ttlSecondsParam = url.searchParams.get('ttlSeconds');\n const ttlMs = ttlSecondsParam ? Number(ttlSecondsParam) * 1000 : ttlParam ? Number(ttlParam) : undefined;\n url.searchParams.delete('ttl');\n url.searchParams.delete('ttlSeconds');\n return Number.isFinite(ttlMs) && (ttlMs as number) > 0 ? { uri: url.toString(), ttl: ttlMs } : { uri: url.toString() };\n } catch {\n return { uri };\n }\n}\n\nexport default async function createStore<T>(uri: string): Promise<Keyv<T>> {\n const { uri: parsedUri, ttl: defaultTtl } = parseDefaultTtl(uri);\n const store = await keyvRegistry<T>(parsedUri);\n if (!store) throw new Error(`Failed to create store for URI: ${uri}`);\n if (defaultTtl !== undefined) {\n const originalSet = store.set.bind(store);\n store.set = ((key, value, ttl) => originalSet(key, value, ttl ?? defaultTtl)) as typeof store.set;\n }\n return store;\n}\n"],"names":["createStore","parseDefaultTtl","uri","url","URL","ttlParam","searchParams","get","ttlSecondsParam","ttlMs","Number","undefined","delete","isFinite","toString","ttl","parsedUri","defaultTtl","store","originalSet","keyvRegistry","Error","set","bind","key","value"],"mappings":";;;;+BAiBA;;;eAA8BA;;;mEAhBL;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEzB,SAASC,gBAAgBC,GAAW;IAClC,IAAI;QACF,IAAMC,MAAM,IAAIC,IAAIF;QACpB,IAAMG,WAAWF,IAAIG,YAAY,CAACC,GAAG,CAAC;QACtC,IAAMC,kBAAkBL,IAAIG,YAAY,CAACC,GAAG,CAAC;QAC7C,IAAME,QAAQD,kBAAkBE,OAAOF,mBAAmB,OAAOH,WAAWK,OAAOL,YAAYM;QAC/FR,IAAIG,YAAY,CAACM,MAAM,CAAC;QACxBT,IAAIG,YAAY,CAACM,MAAM,CAAC;QACxB,OAAOF,OAAOG,QAAQ,CAACJ,UAAU,AAACA,QAAmB,IAAI;YAAEP,KAAKC,IAAIW,QAAQ;YAAIC,KAAKN;QAAM,IAAI;YAAEP,KAAKC,IAAIW,QAAQ;QAAG;IACvH,EAAE,eAAM;QACN,OAAO;YAAEZ,KAAAA;QAAI;IACf;AACF;AAEe,SAAeF,YAAeE,GAAW;;YACVD,kBAA/Be,WAAgBC,YACvBC,OAGEC;;;;oBAJoClB,mBAAAA,gBAAgBC,MAA/Cc,YAA+Bf,iBAApCC,KAAqBe,aAAehB,iBAApBc;oBACV;;wBAAMK,IAAAA,qBAAY,EAAIJ;;;oBAA9BE,QAAQ;oBACd,IAAI,CAACA,OAAO,MAAM,IAAIG,MAAM,AAAC,mCAAsC,OAAJnB;oBAC/D,IAAIe,eAAeN,WAAW;wBACtBQ,cAAcD,MAAMI,GAAG,CAACC,IAAI,CAACL;wBACnCA,MAAMI,GAAG,GAAI,SAACE,KAAKC,OAAOV;mCAAQI,YAAYK,KAAKC,OAAOV,gBAAAA,iBAAAA,MAAOE;;oBACnE;oBACA;;wBAAOC;;;;IACT"}
|
package/dist/cjs/setup/http.js
CHANGED
|
@@ -173,7 +173,7 @@ function _ts_generator(thisArg, body) {
|
|
|
173
173
|
}
|
|
174
174
|
function createHTTPServer(config, overrides) {
|
|
175
175
|
return _async_to_generator(function() {
|
|
176
|
-
var runtime, modules, layers, composed, logger, port, tools, prompts, mcpServer, app, fileRouter, _ref, close, httpServer;
|
|
176
|
+
var runtime, modules, layers, composed, logger, port, tools, filteredTools, prompts, mcpServer, app, fileRouter, _ref, close, httpServer;
|
|
177
177
|
return _ts_generator(this, function(_state) {
|
|
178
178
|
switch(_state.label){
|
|
179
179
|
case 0:
|
|
@@ -192,12 +192,16 @@ function createHTTPServer(config, overrides) {
|
|
|
192
192
|
port = config.transport.port;
|
|
193
193
|
if (!port) throw new Error('Port is required for HTTP transport');
|
|
194
194
|
tools = _to_consumable_array(composed.tools).concat(_to_consumable_array(runtime.deps.oauthAdapters.accountTools));
|
|
195
|
+
filteredTools = config.auth === 'dcr' ? tools.filter(function(tool) {
|
|
196
|
+
return tool.name !== 'messages-export-csv';
|
|
197
|
+
}) // No file storage in DCR (public cloud responsibility)
|
|
198
|
+
: tools;
|
|
195
199
|
prompts = _to_consumable_array(composed.prompts).concat(_to_consumable_array(runtime.deps.oauthAdapters.accountPrompts));
|
|
196
200
|
mcpServer = new _mcp.McpServer({
|
|
197
201
|
name: config.name,
|
|
198
202
|
version: config.version
|
|
199
203
|
});
|
|
200
|
-
(0, _server.registerTools)(mcpServer,
|
|
204
|
+
(0, _server.registerTools)(mcpServer, filteredTools);
|
|
201
205
|
(0, _server.registerResources)(mcpServer, composed.resources);
|
|
202
206
|
(0, _server.registerPrompts)(mcpServer, prompts);
|
|
203
207
|
app = (0, _express.default)();
|
|
@@ -209,13 +213,15 @@ function createHTTPServer(config, overrides) {
|
|
|
209
213
|
app.use('/', runtime.deps.oauthAdapters.loopbackRouter);
|
|
210
214
|
logger.info('Mounted loopback OAuth callback router');
|
|
211
215
|
}
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
216
|
+
if (config.auth !== 'dcr') {
|
|
217
|
+
fileRouter = (0, _server.createFileServingRouter)({
|
|
218
|
+
resourceStoreUri: config.resourceStoreUri
|
|
219
|
+
}, {
|
|
220
|
+
contentType: 'text/csv',
|
|
221
|
+
contentDisposition: 'attachment'
|
|
222
|
+
});
|
|
223
|
+
app.use('/files', fileRouter);
|
|
224
|
+
}
|
|
219
225
|
if (runtime.deps.oauthAdapters.dcrRouter) {
|
|
220
226
|
app.use('/', runtime.deps.oauthAdapters.dcrRouter);
|
|
221
227
|
logger.info('Mounted DCR router with OAuth endpoints');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["/Users/kevin/Dev/Projects/mcp-z/mcp-gmail/src/setup/http.ts"],"sourcesContent":["import { composeMiddleware, connectHttp, createFileServingRouter, registerPrompts, registerResources, registerTools } from '@mcp-z/server';\nimport { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\nimport cors from 'cors';\nimport express from 'express';\nimport type { RuntimeOverrides, ServerConfig } from '../types.ts';\nimport { createDefaultRuntime } from './runtime.ts';\n\nexport async function createHTTPServer(config: ServerConfig, overrides?: RuntimeOverrides) {\n const runtime = await createDefaultRuntime(config, overrides);\n const modules = runtime.createDomainModules();\n const layers = runtime.middlewareFactories.map((factory) => factory(runtime.deps));\n const composed = composeMiddleware(modules, layers);\n const logger = runtime.deps.logger;\n const port = config.transport.port;\n if (!port) throw new Error('Port is required for HTTP transport');\n\n const tools = [...composed.tools, ...runtime.deps.oauthAdapters.accountTools];\n const prompts = [...composed.prompts, ...runtime.deps.oauthAdapters.accountPrompts];\n\n const mcpServer = new McpServer({ name: config.name, version: config.version });\n registerTools(mcpServer,
|
|
1
|
+
{"version":3,"sources":["/Users/kevin/Dev/Projects/mcp-z/mcp-gmail/src/setup/http.ts"],"sourcesContent":["import { composeMiddleware, connectHttp, createFileServingRouter, registerPrompts, registerResources, registerTools } from '@mcp-z/server';\nimport { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\nimport cors from 'cors';\nimport express from 'express';\nimport type { RuntimeOverrides, ServerConfig } from '../types.ts';\nimport { createDefaultRuntime } from './runtime.ts';\n\nexport async function createHTTPServer(config: ServerConfig, overrides?: RuntimeOverrides) {\n const runtime = await createDefaultRuntime(config, overrides);\n const modules = runtime.createDomainModules();\n const layers = runtime.middlewareFactories.map((factory) => factory(runtime.deps));\n const composed = composeMiddleware(modules, layers);\n const logger = runtime.deps.logger;\n const port = config.transport.port;\n if (!port) throw new Error('Port is required for HTTP transport');\n\n const tools = [...composed.tools, ...runtime.deps.oauthAdapters.accountTools];\n const filteredTools =\n config.auth === 'dcr'\n ? tools.filter((tool) => tool.name !== 'messages-export-csv') // No file storage in DCR (public cloud responsibility)\n : tools;\n const prompts = [...composed.prompts, ...runtime.deps.oauthAdapters.accountPrompts];\n\n const mcpServer = new McpServer({ name: config.name, version: config.version });\n registerTools(mcpServer, filteredTools);\n registerResources(mcpServer, composed.resources);\n registerPrompts(mcpServer, prompts);\n\n const app = express();\n app.use(cors());\n app.use(express.json({ limit: '10mb' }));\n\n if (runtime.deps.oauthAdapters.loopbackRouter) {\n app.use('/', runtime.deps.oauthAdapters.loopbackRouter);\n logger.info('Mounted loopback OAuth callback router');\n }\n\n if (config.auth !== 'dcr') {\n const fileRouter = createFileServingRouter({ resourceStoreUri: config.resourceStoreUri }, { contentType: 'text/csv', contentDisposition: 'attachment' });\n app.use('/files', fileRouter);\n }\n\n if (runtime.deps.oauthAdapters.dcrRouter) {\n app.use('/', runtime.deps.oauthAdapters.dcrRouter);\n logger.info('Mounted DCR router with OAuth endpoints');\n }\n\n logger.info(`Starting ${config.name} MCP server (http)`);\n const { close, httpServer } = await connectHttp(mcpServer, { logger, app, port });\n logger.info('http transport ready');\n\n return {\n httpServer,\n mcpServer,\n logger,\n close: async () => {\n await close();\n await runtime.close();\n },\n };\n}\n"],"names":["createHTTPServer","config","overrides","runtime","modules","layers","composed","logger","port","tools","filteredTools","prompts","mcpServer","app","fileRouter","close","httpServer","createDefaultRuntime","createDomainModules","middlewareFactories","map","factory","deps","composeMiddleware","transport","Error","oauthAdapters","accountTools","auth","filter","tool","name","accountPrompts","McpServer","version","registerTools","registerResources","resources","registerPrompts","express","use","cors","json","limit","loopbackRouter","info","createFileServingRouter","resourceStoreUri","contentType","contentDisposition","dcrRouter","connectHttp"],"mappings":"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"}
|
|
@@ -8,5 +8,5 @@ export declare function createDcrStore(baseDir: string, required: boolean): Prom
|
|
|
8
8
|
export declare function createAuthLayer(authMiddleware: OAuthAdapters['middleware']): MiddlewareLayer;
|
|
9
9
|
export declare function createLoggingLayer(logger: Logger): MiddlewareLayer;
|
|
10
10
|
export declare function createStorageLayer(storageContext: StorageContext): MiddlewareLayer;
|
|
11
|
-
export declare function
|
|
11
|
+
export declare function validateStorageConfig(config: ServerConfig, logger: Logger): void;
|
|
12
12
|
export declare function createDefaultRuntime(config: ServerConfig, overrides?: RuntimeOverrides): Promise<CommonRuntime>;
|
|
@@ -8,5 +8,5 @@ export declare function createDcrStore(baseDir: string, required: boolean): Prom
|
|
|
8
8
|
export declare function createAuthLayer(authMiddleware: OAuthAdapters['middleware']): MiddlewareLayer;
|
|
9
9
|
export declare function createLoggingLayer(logger: Logger): MiddlewareLayer;
|
|
10
10
|
export declare function createStorageLayer(storageContext: StorageContext): MiddlewareLayer;
|
|
11
|
-
export declare function
|
|
11
|
+
export declare function validateStorageConfig(config: ServerConfig, logger: Logger): void;
|
|
12
12
|
export declare function createDefaultRuntime(config: ServerConfig, overrides?: RuntimeOverrides): Promise<CommonRuntime>;
|
|
@@ -9,9 +9,6 @@ function _export(target, all) {
|
|
|
9
9
|
});
|
|
10
10
|
}
|
|
11
11
|
_export(exports, {
|
|
12
|
-
get assertStorageConfig () {
|
|
13
|
-
return assertStorageConfig;
|
|
14
|
-
},
|
|
15
12
|
get createAuthLayer () {
|
|
16
13
|
return createAuthLayer;
|
|
17
14
|
},
|
|
@@ -32,6 +29,9 @@ _export(exports, {
|
|
|
32
29
|
},
|
|
33
30
|
get createTokenStore () {
|
|
34
31
|
return createTokenStore;
|
|
32
|
+
},
|
|
33
|
+
get validateStorageConfig () {
|
|
34
|
+
return validateStorageConfig;
|
|
35
35
|
}
|
|
36
36
|
});
|
|
37
37
|
var _oauth = require("@mcp-z/oauth");
|
|
@@ -390,7 +390,13 @@ function createStorageLayer(storageContext) {
|
|
|
390
390
|
}
|
|
391
391
|
};
|
|
392
392
|
}
|
|
393
|
-
function
|
|
393
|
+
function validateStorageConfig(config, logger) {
|
|
394
|
+
if (config.auth === 'dcr') {
|
|
395
|
+
if (config.resourceStoreUri) {
|
|
396
|
+
logger.warn('DCR mode does not support file storage; resourceStoreUri will be ignored.');
|
|
397
|
+
}
|
|
398
|
+
return;
|
|
399
|
+
}
|
|
394
400
|
if (!config.resourceStoreUri) {
|
|
395
401
|
throw new Error('gmail-messages-export-csv: Server configuration missing resourceStoreUri.');
|
|
396
402
|
}
|
|
@@ -405,8 +411,8 @@ function createDefaultRuntime(config, overrides) {
|
|
|
405
411
|
switch(_state.label){
|
|
406
412
|
case 0:
|
|
407
413
|
if (config.auth === 'dcr' && config.transport.type !== 'http') throw new Error('DCR mode requires an HTTP transport');
|
|
408
|
-
assertStorageConfig(config);
|
|
409
414
|
logger = createLogger(config);
|
|
415
|
+
validateStorageConfig(config, logger);
|
|
410
416
|
return [
|
|
411
417
|
4,
|
|
412
418
|
createTokenStore(config.baseDir)
|
|
@@ -456,7 +462,8 @@ function createDefaultRuntime(config, overrides) {
|
|
|
456
462
|
},
|
|
457
463
|
function() {
|
|
458
464
|
return createLoggingLayer(logger);
|
|
459
|
-
}
|
|
465
|
+
}
|
|
466
|
+
].concat(_to_consumable_array(config.auth === 'dcr' ? [] : [
|
|
460
467
|
function() {
|
|
461
468
|
return createStorageLayer({
|
|
462
469
|
resourceStoreUri: config.resourceStoreUri,
|
|
@@ -464,7 +471,7 @@ function createDefaultRuntime(config, overrides) {
|
|
|
464
471
|
transport: config.transport
|
|
465
472
|
});
|
|
466
473
|
}
|
|
467
|
-
];
|
|
474
|
+
]));
|
|
468
475
|
return [
|
|
469
476
|
2,
|
|
470
477
|
{
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["/Users/kevin/Dev/Projects/mcp-z/mcp-gmail/src/setup/runtime.ts"],"sourcesContent":["import { sanitizeForLoggingFormatter } from '@mcp-z/oauth';\nimport type { CachedToken } from '@mcp-z/oauth-google';\nimport type { Logger, MiddlewareLayer } from '@mcp-z/server';\nimport { createLoggingMiddleware } from '@mcp-z/server';\nimport * as fs from 'fs';\nimport * as path from 'path';\nimport pino from 'pino';\nimport createStore from '../lib/create-store.ts';\nimport * as mcp from '../mcp/index.ts';\nimport type { CommonRuntime, RuntimeDeps, RuntimeOverrides, ServerConfig, StorageContext } from '../types.ts';\nimport { createOAuthAdapters, type OAuthAdapters } from './oauth-google.ts';\n\nexport function createLogger(config: ServerConfig): Logger {\n const hasStdio = config.transport.type === 'stdio';\n const logsPath = path.join(config.baseDir, 'logs', `${config.name}.log`);\n if (hasStdio) fs.mkdirSync(path.dirname(logsPath), { recursive: true });\n return pino({ level: config.logLevel ?? 'info', formatters: sanitizeForLoggingFormatter() }, hasStdio ? pino.destination({ dest: logsPath, sync: false }) : pino.destination(1));\n}\n\nexport async function createTokenStore(baseDir: string) {\n const tokenStoreUri = process.env.TOKEN_STORE_URI || `file://${path.join(baseDir, 'tokens.json')}`;\n return createStore<CachedToken>(tokenStoreUri);\n}\n\nexport async function createDcrStore(baseDir: string, required: boolean) {\n if (!required) return undefined;\n const dcrStoreUri = process.env.DCR_STORE_URI || `file://${path.join(baseDir, 'dcr.json')}`;\n return createStore<unknown>(dcrStoreUri);\n}\n\nexport function createAuthLayer(authMiddleware: OAuthAdapters['middleware']): MiddlewareLayer {\n return {\n withTool: authMiddleware.withToolAuth,\n withResource: authMiddleware.withResourceAuth,\n withPrompt: authMiddleware.withPromptAuth,\n };\n}\n\nexport function createLoggingLayer(logger: Logger): MiddlewareLayer {\n const logging = createLoggingMiddleware({ logger });\n return {\n withTool: logging.withToolLogging,\n withResource: logging.withResourceLogging,\n withPrompt: logging.withPromptLogging,\n };\n}\n\nexport function createStorageLayer(storageContext: StorageContext): MiddlewareLayer {\n const wrapAtPosition = <T extends { name: string; handler: unknown; [key: string]: unknown }>(module: T, extraPosition: number): T => {\n const originalHandler = module.handler as (...args: unknown[]) => Promise<unknown>;\n\n const wrappedHandler = async (...allArgs: unknown[]) => {\n const extra = allArgs[extraPosition];\n (extra as { storageContext?: StorageContext }).storageContext = storageContext;\n return await originalHandler(...allArgs);\n };\n\n return {\n ...module,\n handler: wrappedHandler,\n } as T;\n };\n\n return {\n withTool: <T extends { name: string; config: unknown; handler: unknown }>(module: T): T => wrapAtPosition(module, 1) as T,\n };\n}\n\nexport function assertStorageConfig(config: ServerConfig) {\n if (!config.resourceStoreUri) {\n throw new Error('gmail-messages-export-csv: Server configuration missing resourceStoreUri.');\n }\n if (config.transport.type === 'http' && !config.baseUrl && !config.transport.port) {\n throw new Error('gmail-messages-export-csv: HTTP transport requires either baseUrl in server config or port in transport config. This is a server configuration error - please provide --base-url or --port.');\n }\n}\n\nexport async function createDefaultRuntime(config: ServerConfig, overrides?: RuntimeOverrides): Promise<CommonRuntime> {\n if (config.auth === 'dcr' && config.transport.type !== 'http') throw new Error('DCR mode requires an HTTP transport');\n\n assertStorageConfig(config);\n const logger = createLogger(config);\n const tokenStore = await createTokenStore(config.baseDir);\n const baseUrl = config.baseUrl ?? (config.transport.type === 'http' && config.transport.port ? `http://localhost:${config.transport.port}` : undefined);\n const dcrStore = await createDcrStore(config.baseDir, config.auth === 'dcr');\n const oauthAdapters = await createOAuthAdapters(config, { logger, tokenStore, dcrStore }, baseUrl);\n const deps: RuntimeDeps = { config, logger, tokenStore, oauthAdapters, baseUrl };\n const createDomainModules =\n overrides?.createDomainModules ??\n (() => ({\n tools: Object.values(mcp.toolFactories).map((factory) => factory()),\n resources: Object.values(mcp.resourceFactories).map((factory) => factory()),\n prompts: Object.values(mcp.promptFactories).map((factory) => factory()),\n }));\n const middlewareFactories = overrides?.middlewareFactories ?? [() => createAuthLayer(oauthAdapters.middleware), () => createLoggingLayer(logger), () => createStorageLayer({ resourceStoreUri: config.resourceStoreUri, baseUrl: config.baseUrl, transport: config.transport })];\n\n return {\n deps,\n middlewareFactories,\n createDomainModules,\n close: async () => {},\n };\n}\n"],"names":["assertStorageConfig","createAuthLayer","createDcrStore","createDefaultRuntime","createLogger","createLoggingLayer","createStorageLayer","createTokenStore","config","hasStdio","transport","type","logsPath","path","join","baseDir","name","fs","mkdirSync","dirname","recursive","pino","level","logLevel","formatters","sanitizeForLoggingFormatter","destination","dest","sync","tokenStoreUri","process","env","TOKEN_STORE_URI","createStore","required","dcrStoreUri","undefined","DCR_STORE_URI","authMiddleware","withTool","withToolAuth","withResource","withResourceAuth","withPrompt","withPromptAuth","logger","logging","createLoggingMiddleware","withToolLogging","withResourceLogging","withPromptLogging","storageContext","wrapAtPosition","module","extraPosition","originalHandler","handler","wrappedHandler","allArgs","extra","resourceStoreUri","Error","baseUrl","port","overrides","tokenStore","dcrStore","oauthAdapters","deps","createDomainModules","middlewareFactories","auth","createOAuthAdapters","tools","Object","values","mcp","toolFactories","map","factory","resources","resourceFactories","prompts","promptFactories","middleware","close"],"mappings":";;;;;;;;;;;QAoEgBA;eAAAA;;QAtCAC;eAAAA;;QANMC;eAAAA;;QAqDAC;eAAAA;;QAjENC;eAAAA;;QA0BAC;eAAAA;;QASAC;eAAAA;;QA5BMC;eAAAA;;;qBAnBsB;sBAGJ;0DACpB;4DACE;2DACL;oEACO;+DACH;6BAEmC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEjD,SAASH,aAAaI,MAAoB;QAI1BA;IAHrB,IAAMC,WAAWD,OAAOE,SAAS,CAACC,IAAI,KAAK;IAC3C,IAAMC,WAAWC,MAAKC,IAAI,CAACN,OAAOO,OAAO,EAAE,QAAQ,AAAC,GAAc,OAAZP,OAAOQ,IAAI,EAAC;IAClE,IAAIP,UAAUQ,IAAGC,SAAS,CAACL,MAAKM,OAAO,CAACP,WAAW;QAAEQ,WAAW;IAAK;IACrE,OAAOC,IAAAA,aAAI,EAAC;QAAEC,KAAK,GAAEd,mBAAAA,OAAOe,QAAQ,cAAff,8BAAAA,mBAAmB;QAAQgB,YAAYC,IAAAA,kCAA2B;IAAG,GAAGhB,WAAWY,aAAI,CAACK,WAAW,CAAC;QAAEC,MAAMf;QAAUgB,MAAM;IAAM,KAAKP,aAAI,CAACK,WAAW,CAAC;AAC/K;AAEO,SAAenB,iBAAiBQ,OAAe;;YAC9Cc;;YAAAA,gBAAgBC,QAAQC,GAAG,CAACC,eAAe,IAAI,AAAC,UAA2C,OAAlCnB,MAAKC,IAAI,CAACC,SAAS;YAClF;;gBAAOkB,IAAAA,sBAAW,EAAcJ;;;IAClC;;AAEO,SAAe3B,eAAea,OAAe,EAAEmB,QAAiB;;YAE/DC;;YADN,IAAI,CAACD,UAAU;;gBAAOE;;YAChBD,cAAcL,QAAQC,GAAG,CAACM,aAAa,IAAI,AAAC,UAAwC,OAA/BxB,MAAKC,IAAI,CAACC,SAAS;YAC9E;;gBAAOkB,IAAAA,sBAAW,EAAUE;;;IAC9B;;AAEO,SAASlC,gBAAgBqC,cAA2C;IACzE,OAAO;QACLC,UAAUD,eAAeE,YAAY;QACrCC,cAAcH,eAAeI,gBAAgB;QAC7CC,YAAYL,eAAeM,cAAc;IAC3C;AACF;AAEO,SAASvC,mBAAmBwC,MAAc;IAC/C,IAAMC,UAAUC,IAAAA,+BAAuB,EAAC;QAAEF,QAAAA;IAAO;IACjD,OAAO;QACLN,UAAUO,QAAQE,eAAe;QACjCP,cAAcK,QAAQG,mBAAmB;QACzCN,YAAYG,QAAQI,iBAAiB;IACvC;AACF;AAEO,SAAS5C,mBAAmB6C,cAA8B;IAC/D,IAAMC,iBAAiB,SAAuEC,QAAWC;QACvG,IAAMC,kBAAkBF,OAAOG,OAAO;QAEtC,IAAMC,iBAAiB;6CAAUC;gBAAAA;;;oBACzBC;;;;4BAAAA,QAAQD,OAAO,CAACJ,cAAc;4BACnCK,MAA8CR,cAAc,GAAGA;4BACzD;;gCAAMI,sBAAAA,KAAAA,GAAgB,qBAAGG;;;4BAAhC;;gCAAO;;;;YACT;;QAEA,OAAO,wCACFL;YACHG,SAASC;;IAEb;IAEA,OAAO;QACLlB,UAAU,SAAgEc;mBAAiBD,eAAeC,QAAQ;;IACpH;AACF;AAEO,SAASrD,oBAAoBQ,MAAoB;IACtD,IAAI,CAACA,OAAOoD,gBAAgB,EAAE;QAC5B,MAAM,IAAIC,MAAM;IAClB;IACA,IAAIrD,OAAOE,SAAS,CAACC,IAAI,KAAK,UAAU,CAACH,OAAOsD,OAAO,IAAI,CAACtD,OAAOE,SAAS,CAACqD,IAAI,EAAE;QACjF,MAAM,IAAIF,MAAM;IAClB;AACF;AAEO,SAAe1D,qBAAqBK,MAAoB,EAAEwD,SAA4B;;YAM3ExD,8BAFVqC,QACAoB,YACAH,SACAI,UACAC,eACAC,MACAC,qBAOAC;;;;oBAhBN,IAAI9D,OAAO+D,IAAI,KAAK,SAAS/D,OAAOE,SAAS,CAACC,IAAI,KAAK,QAAQ,MAAM,IAAIkD,MAAM;oBAE/E7D,oBAAoBQ;oBACdqC,SAASzC,aAAaI;oBACT;;wBAAMD,iBAAiBC,OAAOO,OAAO;;;oBAAlDkD,aAAa;oBACbH,WAAUtD,kBAAAA,OAAOsD,OAAO,cAAdtD,6BAAAA,kBAAmBA,OAAOE,SAAS,CAACC,IAAI,KAAK,UAAUH,OAAOE,SAAS,CAACqD,IAAI,GAAG,AAAC,oBAAyC,OAAtBvD,OAAOE,SAAS,CAACqD,IAAI,IAAK3B;oBAC5H;;wBAAMlC,eAAeM,OAAOO,OAAO,EAAEP,OAAO+D,IAAI,KAAK;;;oBAAhEL,WAAW;oBACK;;wBAAMM,IAAAA,kCAAmB,EAAChE,QAAQ;4BAAEqC,QAAAA;4BAAQoB,YAAAA;4BAAYC,UAAAA;wBAAS,GAAGJ;;;oBAApFK,gBAAgB;oBAChBC,OAAoB;wBAAE5D,QAAAA;wBAAQqC,QAAAA;wBAAQoB,YAAAA;wBAAYE,eAAAA;wBAAeL,SAAAA;oBAAQ;oBACzEO,8BACJL,sBAAAA,gCAAAA,UAAWK,mBAAmB,uCAC7B;+BAAO;4BACNI,OAAOC,OAAOC,MAAM,CAACC,SAAIC,aAAa,EAAEC,GAAG,CAAC,SAACC;uCAAYA;;4BACzDC,WAAWN,OAAOC,MAAM,CAACC,SAAIK,iBAAiB,EAAEH,GAAG,CAAC,SAACC;uCAAYA;;4BACjEG,SAASR,OAAOC,MAAM,CAACC,SAAIO,eAAe,EAAEL,GAAG,CAAC,SAACC;uCAAYA;;wBAC/D;;oBACIT,+BAAsBN,sBAAAA,gCAAAA,UAAWM,mBAAmB;wBAAK;mCAAMrE,gBAAgBkE,cAAciB,UAAU;;wBAAG;mCAAM/E,mBAAmBwC;;wBAAS;mCAAMvC,mBAAmB;gCAAEsD,kBAAkBpD,OAAOoD,gBAAgB;gCAAEE,SAAStD,OAAOsD,OAAO;gCAAEpD,WAAWF,OAAOE,SAAS;4BAAC;;;oBAE7Q;;wBAAO;4BACL0D,MAAAA;4BACAE,qBAAAA;4BACAD,qBAAAA;4BACAgB,OAAO;;;;;;;gCAAa;;wBACtB;;;;IACF"}
|
|
1
|
+
{"version":3,"sources":["/Users/kevin/Dev/Projects/mcp-z/mcp-gmail/src/setup/runtime.ts"],"sourcesContent":["import { sanitizeForLoggingFormatter } from '@mcp-z/oauth';\nimport type { CachedToken } from '@mcp-z/oauth-google';\nimport type { Logger, MiddlewareLayer } from '@mcp-z/server';\nimport { createLoggingMiddleware } from '@mcp-z/server';\nimport * as fs from 'fs';\nimport * as path from 'path';\nimport pino from 'pino';\nimport createStore from '../lib/create-store.ts';\nimport * as mcp from '../mcp/index.ts';\nimport type { CommonRuntime, RuntimeDeps, RuntimeOverrides, ServerConfig, StorageContext } from '../types.ts';\nimport { createOAuthAdapters, type OAuthAdapters } from './oauth-google.ts';\n\nexport function createLogger(config: ServerConfig): Logger {\n const hasStdio = config.transport.type === 'stdio';\n const logsPath = path.join(config.baseDir, 'logs', `${config.name}.log`);\n if (hasStdio) fs.mkdirSync(path.dirname(logsPath), { recursive: true });\n return pino({ level: config.logLevel ?? 'info', formatters: sanitizeForLoggingFormatter() }, hasStdio ? pino.destination({ dest: logsPath, sync: false }) : pino.destination(1));\n}\n\nexport async function createTokenStore(baseDir: string) {\n const tokenStoreUri = process.env.TOKEN_STORE_URI || `file://${path.join(baseDir, 'tokens.json')}`;\n return createStore<CachedToken>(tokenStoreUri);\n}\n\nexport async function createDcrStore(baseDir: string, required: boolean) {\n if (!required) return undefined;\n const dcrStoreUri = process.env.DCR_STORE_URI || `file://${path.join(baseDir, 'dcr.json')}`;\n return createStore<unknown>(dcrStoreUri);\n}\n\nexport function createAuthLayer(authMiddleware: OAuthAdapters['middleware']): MiddlewareLayer {\n return {\n withTool: authMiddleware.withToolAuth,\n withResource: authMiddleware.withResourceAuth,\n withPrompt: authMiddleware.withPromptAuth,\n };\n}\n\nexport function createLoggingLayer(logger: Logger): MiddlewareLayer {\n const logging = createLoggingMiddleware({ logger });\n return {\n withTool: logging.withToolLogging,\n withResource: logging.withResourceLogging,\n withPrompt: logging.withPromptLogging,\n };\n}\n\nexport function createStorageLayer(storageContext: StorageContext): MiddlewareLayer {\n const wrapAtPosition = <T extends { name: string; handler: unknown; [key: string]: unknown }>(module: T, extraPosition: number): T => {\n const originalHandler = module.handler as (...args: unknown[]) => Promise<unknown>;\n\n const wrappedHandler = async (...allArgs: unknown[]) => {\n const extra = allArgs[extraPosition];\n (extra as { storageContext?: StorageContext }).storageContext = storageContext;\n return await originalHandler(...allArgs);\n };\n\n return {\n ...module,\n handler: wrappedHandler,\n } as T;\n };\n\n return {\n withTool: <T extends { name: string; config: unknown; handler: unknown }>(module: T): T => wrapAtPosition(module, 1) as T,\n };\n}\n\nexport function validateStorageConfig(config: ServerConfig, logger: Logger) {\n if (config.auth === 'dcr') {\n if (config.resourceStoreUri) {\n logger.warn('DCR mode does not support file storage; resourceStoreUri will be ignored.');\n }\n return;\n }\n if (!config.resourceStoreUri) {\n throw new Error('gmail-messages-export-csv: Server configuration missing resourceStoreUri.');\n }\n if (config.transport.type === 'http' && !config.baseUrl && !config.transport.port) {\n throw new Error('gmail-messages-export-csv: HTTP transport requires either baseUrl in server config or port in transport config. This is a server configuration error - please provide --base-url or --port.');\n }\n}\n\nexport async function createDefaultRuntime(config: ServerConfig, overrides?: RuntimeOverrides): Promise<CommonRuntime> {\n if (config.auth === 'dcr' && config.transport.type !== 'http') throw new Error('DCR mode requires an HTTP transport');\n\n const logger = createLogger(config);\n validateStorageConfig(config, logger);\n const tokenStore = await createTokenStore(config.baseDir);\n const baseUrl = config.baseUrl ?? (config.transport.type === 'http' && config.transport.port ? `http://localhost:${config.transport.port}` : undefined);\n const dcrStore = await createDcrStore(config.baseDir, config.auth === 'dcr');\n const oauthAdapters = await createOAuthAdapters(config, { logger, tokenStore, dcrStore }, baseUrl);\n const deps: RuntimeDeps = { config, logger, tokenStore, oauthAdapters, baseUrl };\n const createDomainModules =\n overrides?.createDomainModules ??\n (() => ({\n tools: Object.values(mcp.toolFactories).map((factory) => factory()),\n resources: Object.values(mcp.resourceFactories).map((factory) => factory()),\n prompts: Object.values(mcp.promptFactories).map((factory) => factory()),\n }));\n const middlewareFactories = overrides?.middlewareFactories ?? [() => createAuthLayer(oauthAdapters.middleware), () => createLoggingLayer(logger), ...(config.auth === 'dcr' ? [] : [() => createStorageLayer({ resourceStoreUri: config.resourceStoreUri, baseUrl: config.baseUrl, transport: config.transport })])];\n\n return {\n deps,\n middlewareFactories,\n createDomainModules,\n close: async () => {},\n };\n}\n"],"names":["createAuthLayer","createDcrStore","createDefaultRuntime","createLogger","createLoggingLayer","createStorageLayer","createTokenStore","validateStorageConfig","config","hasStdio","transport","type","logsPath","path","join","baseDir","name","fs","mkdirSync","dirname","recursive","pino","level","logLevel","formatters","sanitizeForLoggingFormatter","destination","dest","sync","tokenStoreUri","process","env","TOKEN_STORE_URI","createStore","required","dcrStoreUri","undefined","DCR_STORE_URI","authMiddleware","withTool","withToolAuth","withResource","withResourceAuth","withPrompt","withPromptAuth","logger","logging","createLoggingMiddleware","withToolLogging","withResourceLogging","withPromptLogging","storageContext","wrapAtPosition","module","extraPosition","originalHandler","handler","wrappedHandler","allArgs","extra","auth","resourceStoreUri","warn","Error","baseUrl","port","overrides","tokenStore","dcrStore","oauthAdapters","deps","createDomainModules","middlewareFactories","createOAuthAdapters","tools","Object","values","mcp","toolFactories","map","factory","resources","resourceFactories","prompts","promptFactories","middleware","close"],"mappings":"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"}
|
package/dist/cjs/setup/stdio.js
CHANGED
|
@@ -166,7 +166,7 @@ function _ts_generator(thisArg, body) {
|
|
|
166
166
|
}
|
|
167
167
|
function createStdioServer(config, overrides) {
|
|
168
168
|
return _async_to_generator(function() {
|
|
169
|
-
var runtime, modules, layers, composed, logger, tools, prompts, mcpServer, close;
|
|
169
|
+
var runtime, modules, layers, composed, logger, tools, filteredTools, prompts, mcpServer, close;
|
|
170
170
|
return _ts_generator(this, function(_state) {
|
|
171
171
|
switch(_state.label){
|
|
172
172
|
case 0:
|
|
@@ -183,12 +183,16 @@ function createStdioServer(config, overrides) {
|
|
|
183
183
|
composed = (0, _server.composeMiddleware)(modules, layers);
|
|
184
184
|
logger = runtime.deps.logger;
|
|
185
185
|
tools = _to_consumable_array(composed.tools).concat(_to_consumable_array(runtime.deps.oauthAdapters.accountTools));
|
|
186
|
+
filteredTools = config.auth === 'dcr' ? tools.filter(function(tool) {
|
|
187
|
+
return tool.name !== 'messages-export-csv';
|
|
188
|
+
}) // No file storage in DCR (public cloud responsibility)
|
|
189
|
+
: tools;
|
|
186
190
|
prompts = _to_consumable_array(composed.prompts).concat(_to_consumable_array(runtime.deps.oauthAdapters.accountPrompts));
|
|
187
191
|
mcpServer = new _mcp.McpServer({
|
|
188
192
|
name: config.name,
|
|
189
193
|
version: config.version
|
|
190
194
|
});
|
|
191
|
-
(0, _server.registerTools)(mcpServer,
|
|
195
|
+
(0, _server.registerTools)(mcpServer, filteredTools);
|
|
192
196
|
(0, _server.registerResources)(mcpServer, composed.resources);
|
|
193
197
|
(0, _server.registerPrompts)(mcpServer, prompts);
|
|
194
198
|
logger.info("Starting ".concat(config.name, " MCP server (stdio)"));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["/Users/kevin/Dev/Projects/mcp-z/mcp-gmail/src/setup/stdio.ts"],"sourcesContent":["import { composeMiddleware, connectStdio, registerPrompts, registerResources, registerTools } from '@mcp-z/server';\nimport { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\nimport type { RuntimeOverrides, ServerConfig } from '../types.ts';\nimport { createDefaultRuntime } from './runtime.ts';\n\nexport async function createStdioServer(config: ServerConfig, overrides?: RuntimeOverrides) {\n const runtime = await createDefaultRuntime(config, overrides);\n const modules = runtime.createDomainModules();\n const layers = runtime.middlewareFactories.map((factory) => factory(runtime.deps));\n const composed = composeMiddleware(modules, layers);\n const logger = runtime.deps.logger;\n\n const tools = [...composed.tools, ...runtime.deps.oauthAdapters.accountTools];\n const prompts = [...composed.prompts, ...runtime.deps.oauthAdapters.accountPrompts];\n\n const mcpServer = new McpServer({ name: config.name, version: config.version });\n registerTools(mcpServer,
|
|
1
|
+
{"version":3,"sources":["/Users/kevin/Dev/Projects/mcp-z/mcp-gmail/src/setup/stdio.ts"],"sourcesContent":["import { composeMiddleware, connectStdio, registerPrompts, registerResources, registerTools } from '@mcp-z/server';\nimport { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\nimport type { RuntimeOverrides, ServerConfig } from '../types.ts';\nimport { createDefaultRuntime } from './runtime.ts';\n\nexport async function createStdioServer(config: ServerConfig, overrides?: RuntimeOverrides) {\n const runtime = await createDefaultRuntime(config, overrides);\n const modules = runtime.createDomainModules();\n const layers = runtime.middlewareFactories.map((factory) => factory(runtime.deps));\n const composed = composeMiddleware(modules, layers);\n const logger = runtime.deps.logger;\n\n const tools = [...composed.tools, ...runtime.deps.oauthAdapters.accountTools];\n const filteredTools =\n config.auth === 'dcr'\n ? tools.filter((tool) => tool.name !== 'messages-export-csv') // No file storage in DCR (public cloud responsibility)\n : tools;\n const prompts = [...composed.prompts, ...runtime.deps.oauthAdapters.accountPrompts];\n\n const mcpServer = new McpServer({ name: config.name, version: config.version });\n registerTools(mcpServer, filteredTools);\n registerResources(mcpServer, composed.resources);\n registerPrompts(mcpServer, prompts);\n\n logger.info(`Starting ${config.name} MCP server (stdio)`);\n const { close } = await connectStdio(mcpServer, { logger });\n logger.info('stdio transport ready');\n\n return {\n mcpServer,\n logger,\n close: async () => {\n await close();\n await runtime.close();\n },\n };\n}\n"],"names":["createStdioServer","config","overrides","runtime","modules","layers","composed","logger","tools","filteredTools","prompts","mcpServer","close","createDefaultRuntime","createDomainModules","middlewareFactories","map","factory","deps","composeMiddleware","oauthAdapters","accountTools","auth","filter","tool","name","accountPrompts","McpServer","version","registerTools","registerResources","resources","registerPrompts","info","connectStdio"],"mappings":";;;;+BAKsBA;;;eAAAA;;;sBAL6E;mBACzE;yBAEW;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAE9B,SAAeA,kBAAkBC,MAAoB,EAAEC,SAA4B;;YAClFC,SACAC,SACAC,QACAC,UACAC,QAEAC,OACAC,eAIAC,SAEAC,WAMEC;;;;oBAnBQ;;wBAAMC,IAAAA,+BAAoB,EAACZ,QAAQC;;;oBAA7CC,UAAU;oBACVC,UAAUD,QAAQW,mBAAmB;oBACrCT,SAASF,QAAQY,mBAAmB,CAACC,GAAG,CAAC,SAACC;+BAAYA,QAAQd,QAAQe,IAAI;;oBAC1EZ,WAAWa,IAAAA,yBAAiB,EAACf,SAASC;oBACtCE,SAASJ,QAAQe,IAAI,CAACX,MAAM;oBAE5BC,QAAQ,AAAC,qBAAGF,SAASE,KAAK,SAAE,qBAAGL,QAAQe,IAAI,CAACE,aAAa,CAACC,YAAY;oBACtEZ,gBACJR,OAAOqB,IAAI,KAAK,QACZd,MAAMe,MAAM,CAAC,SAACC;+BAASA,KAAKC,IAAI,KAAK;uBAAuB,uDAAuD;uBACnHjB;oBACAE,UAAU,AAAC,qBAAGJ,SAASI,OAAO,SAAE,qBAAGP,QAAQe,IAAI,CAACE,aAAa,CAACM,cAAc;oBAE5Ef,YAAY,IAAIgB,cAAS,CAAC;wBAAEF,MAAMxB,OAAOwB,IAAI;wBAAEG,SAAS3B,OAAO2B,OAAO;oBAAC;oBAC7EC,IAAAA,qBAAa,EAAClB,WAAWF;oBACzBqB,IAAAA,yBAAiB,EAACnB,WAAWL,SAASyB,SAAS;oBAC/CC,IAAAA,uBAAe,EAACrB,WAAWD;oBAE3BH,OAAO0B,IAAI,CAAC,AAAC,YAAuB,OAAZhC,OAAOwB,IAAI,EAAC;oBAClB;;wBAAMS,IAAAA,oBAAY,EAACvB,WAAW;4BAAEJ,QAAAA;wBAAO;;;oBAAjDK,QAAU,cAAVA;oBACRL,OAAO0B,IAAI,CAAC;oBAEZ;;wBAAO;4BACLtB,WAAAA;4BACAJ,QAAAA;4BACAK,OAAO;;;;;gDACL;;oDAAMA;;;gDAAN;gDACA;;oDAAMT,QAAQS,KAAK;;;gDAAnB;;;;;;gCACF;;wBACF;;;;IACF"}
|
|
@@ -1,6 +1,31 @@
|
|
|
1
1
|
import keyvRegistry from 'keyv-registry';
|
|
2
|
+
function parseDefaultTtl(uri) {
|
|
3
|
+
try {
|
|
4
|
+
const url = new URL(uri);
|
|
5
|
+
const ttlParam = url.searchParams.get('ttl');
|
|
6
|
+
const ttlSecondsParam = url.searchParams.get('ttlSeconds');
|
|
7
|
+
const ttlMs = ttlSecondsParam ? Number(ttlSecondsParam) * 1000 : ttlParam ? Number(ttlParam) : undefined;
|
|
8
|
+
url.searchParams.delete('ttl');
|
|
9
|
+
url.searchParams.delete('ttlSeconds');
|
|
10
|
+
return Number.isFinite(ttlMs) && ttlMs > 0 ? {
|
|
11
|
+
uri: url.toString(),
|
|
12
|
+
ttl: ttlMs
|
|
13
|
+
} : {
|
|
14
|
+
uri: url.toString()
|
|
15
|
+
};
|
|
16
|
+
} catch {
|
|
17
|
+
return {
|
|
18
|
+
uri
|
|
19
|
+
};
|
|
20
|
+
}
|
|
21
|
+
}
|
|
2
22
|
export default async function createStore(uri) {
|
|
3
|
-
const
|
|
23
|
+
const { uri: parsedUri, ttl: defaultTtl } = parseDefaultTtl(uri);
|
|
24
|
+
const store = await keyvRegistry(parsedUri);
|
|
4
25
|
if (!store) throw new Error(`Failed to create store for URI: ${uri}`);
|
|
26
|
+
if (defaultTtl !== undefined) {
|
|
27
|
+
const originalSet = store.set.bind(store);
|
|
28
|
+
store.set = (key, value, ttl)=>originalSet(key, value, ttl !== null && ttl !== void 0 ? ttl : defaultTtl);
|
|
29
|
+
}
|
|
5
30
|
return store;
|
|
6
31
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["/Users/kevin/Dev/Projects/mcp-z/mcp-gmail/src/lib/create-store.ts"],"sourcesContent":["import type Keyv from 'keyv';\nimport keyvRegistry from 'keyv-registry';\n\nexport default async function createStore<T>(uri: string): Promise<Keyv<T>> {\n const store = await keyvRegistry<T>(
|
|
1
|
+
{"version":3,"sources":["/Users/kevin/Dev/Projects/mcp-z/mcp-gmail/src/lib/create-store.ts"],"sourcesContent":["import type Keyv from 'keyv';\nimport keyvRegistry from 'keyv-registry';\n\nfunction parseDefaultTtl(uri: string): { uri: string; ttl?: number } {\n try {\n const url = new URL(uri);\n const ttlParam = url.searchParams.get('ttl');\n const ttlSecondsParam = url.searchParams.get('ttlSeconds');\n const ttlMs = ttlSecondsParam ? Number(ttlSecondsParam) * 1000 : ttlParam ? Number(ttlParam) : undefined;\n url.searchParams.delete('ttl');\n url.searchParams.delete('ttlSeconds');\n return Number.isFinite(ttlMs) && (ttlMs as number) > 0 ? { uri: url.toString(), ttl: ttlMs } : { uri: url.toString() };\n } catch {\n return { uri };\n }\n}\n\nexport default async function createStore<T>(uri: string): Promise<Keyv<T>> {\n const { uri: parsedUri, ttl: defaultTtl } = parseDefaultTtl(uri);\n const store = await keyvRegistry<T>(parsedUri);\n if (!store) throw new Error(`Failed to create store for URI: ${uri}`);\n if (defaultTtl !== undefined) {\n const originalSet = store.set.bind(store);\n store.set = ((key, value, ttl) => originalSet(key, value, ttl ?? defaultTtl)) as typeof store.set;\n }\n return store;\n}\n"],"names":["keyvRegistry","parseDefaultTtl","uri","url","URL","ttlParam","searchParams","get","ttlSecondsParam","ttlMs","Number","undefined","delete","isFinite","toString","ttl","createStore","parsedUri","defaultTtl","store","Error","originalSet","set","bind","key","value"],"mappings":"AACA,OAAOA,kBAAkB,gBAAgB;AAEzC,SAASC,gBAAgBC,GAAW;IAClC,IAAI;QACF,MAAMC,MAAM,IAAIC,IAAIF;QACpB,MAAMG,WAAWF,IAAIG,YAAY,CAACC,GAAG,CAAC;QACtC,MAAMC,kBAAkBL,IAAIG,YAAY,CAACC,GAAG,CAAC;QAC7C,MAAME,QAAQD,kBAAkBE,OAAOF,mBAAmB,OAAOH,WAAWK,OAAOL,YAAYM;QAC/FR,IAAIG,YAAY,CAACM,MAAM,CAAC;QACxBT,IAAIG,YAAY,CAACM,MAAM,CAAC;QACxB,OAAOF,OAAOG,QAAQ,CAACJ,UAAU,AAACA,QAAmB,IAAI;YAAEP,KAAKC,IAAIW,QAAQ;YAAIC,KAAKN;QAAM,IAAI;YAAEP,KAAKC,IAAIW,QAAQ;QAAG;IACvH,EAAE,OAAM;QACN,OAAO;YAAEZ;QAAI;IACf;AACF;AAEA,eAAe,eAAec,YAAed,GAAW;IACtD,MAAM,EAAEA,KAAKe,SAAS,EAAEF,KAAKG,UAAU,EAAE,GAAGjB,gBAAgBC;IAC5D,MAAMiB,QAAQ,MAAMnB,aAAgBiB;IACpC,IAAI,CAACE,OAAO,MAAM,IAAIC,MAAM,CAAC,gCAAgC,EAAElB,KAAK;IACpE,IAAIgB,eAAeP,WAAW;QAC5B,MAAMU,cAAcF,MAAMG,GAAG,CAACC,IAAI,CAACJ;QACnCA,MAAMG,GAAG,GAAI,CAACE,KAAKC,OAAOV,MAAQM,YAAYG,KAAKC,OAAOV,gBAAAA,iBAAAA,MAAOG;IACnE;IACA,OAAOC;AACT"}
|
package/dist/esm/setup/http.js
CHANGED
|
@@ -15,6 +15,8 @@ export async function createHTTPServer(config, overrides) {
|
|
|
15
15
|
...composed.tools,
|
|
16
16
|
...runtime.deps.oauthAdapters.accountTools
|
|
17
17
|
];
|
|
18
|
+
const filteredTools = config.auth === 'dcr' ? tools.filter((tool)=>tool.name !== 'messages-export-csv') // No file storage in DCR (public cloud responsibility)
|
|
19
|
+
: tools;
|
|
18
20
|
const prompts = [
|
|
19
21
|
...composed.prompts,
|
|
20
22
|
...runtime.deps.oauthAdapters.accountPrompts
|
|
@@ -23,7 +25,7 @@ export async function createHTTPServer(config, overrides) {
|
|
|
23
25
|
name: config.name,
|
|
24
26
|
version: config.version
|
|
25
27
|
});
|
|
26
|
-
registerTools(mcpServer,
|
|
28
|
+
registerTools(mcpServer, filteredTools);
|
|
27
29
|
registerResources(mcpServer, composed.resources);
|
|
28
30
|
registerPrompts(mcpServer, prompts);
|
|
29
31
|
const app = express();
|
|
@@ -35,13 +37,15 @@ export async function createHTTPServer(config, overrides) {
|
|
|
35
37
|
app.use('/', runtime.deps.oauthAdapters.loopbackRouter);
|
|
36
38
|
logger.info('Mounted loopback OAuth callback router');
|
|
37
39
|
}
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
40
|
+
if (config.auth !== 'dcr') {
|
|
41
|
+
const fileRouter = createFileServingRouter({
|
|
42
|
+
resourceStoreUri: config.resourceStoreUri
|
|
43
|
+
}, {
|
|
44
|
+
contentType: 'text/csv',
|
|
45
|
+
contentDisposition: 'attachment'
|
|
46
|
+
});
|
|
47
|
+
app.use('/files', fileRouter);
|
|
48
|
+
}
|
|
45
49
|
if (runtime.deps.oauthAdapters.dcrRouter) {
|
|
46
50
|
app.use('/', runtime.deps.oauthAdapters.dcrRouter);
|
|
47
51
|
logger.info('Mounted DCR router with OAuth endpoints');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["/Users/kevin/Dev/Projects/mcp-z/mcp-gmail/src/setup/http.ts"],"sourcesContent":["import { composeMiddleware, connectHttp, createFileServingRouter, registerPrompts, registerResources, registerTools } from '@mcp-z/server';\nimport { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\nimport cors from 'cors';\nimport express from 'express';\nimport type { RuntimeOverrides, ServerConfig } from '../types.ts';\nimport { createDefaultRuntime } from './runtime.ts';\n\nexport async function createHTTPServer(config: ServerConfig, overrides?: RuntimeOverrides) {\n const runtime = await createDefaultRuntime(config, overrides);\n const modules = runtime.createDomainModules();\n const layers = runtime.middlewareFactories.map((factory) => factory(runtime.deps));\n const composed = composeMiddleware(modules, layers);\n const logger = runtime.deps.logger;\n const port = config.transport.port;\n if (!port) throw new Error('Port is required for HTTP transport');\n\n const tools = [...composed.tools, ...runtime.deps.oauthAdapters.accountTools];\n const prompts = [...composed.prompts, ...runtime.deps.oauthAdapters.accountPrompts];\n\n const mcpServer = new McpServer({ name: config.name, version: config.version });\n registerTools(mcpServer,
|
|
1
|
+
{"version":3,"sources":["/Users/kevin/Dev/Projects/mcp-z/mcp-gmail/src/setup/http.ts"],"sourcesContent":["import { composeMiddleware, connectHttp, createFileServingRouter, registerPrompts, registerResources, registerTools } from '@mcp-z/server';\nimport { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\nimport cors from 'cors';\nimport express from 'express';\nimport type { RuntimeOverrides, ServerConfig } from '../types.ts';\nimport { createDefaultRuntime } from './runtime.ts';\n\nexport async function createHTTPServer(config: ServerConfig, overrides?: RuntimeOverrides) {\n const runtime = await createDefaultRuntime(config, overrides);\n const modules = runtime.createDomainModules();\n const layers = runtime.middlewareFactories.map((factory) => factory(runtime.deps));\n const composed = composeMiddleware(modules, layers);\n const logger = runtime.deps.logger;\n const port = config.transport.port;\n if (!port) throw new Error('Port is required for HTTP transport');\n\n const tools = [...composed.tools, ...runtime.deps.oauthAdapters.accountTools];\n const filteredTools =\n config.auth === 'dcr'\n ? tools.filter((tool) => tool.name !== 'messages-export-csv') // No file storage in DCR (public cloud responsibility)\n : tools;\n const prompts = [...composed.prompts, ...runtime.deps.oauthAdapters.accountPrompts];\n\n const mcpServer = new McpServer({ name: config.name, version: config.version });\n registerTools(mcpServer, filteredTools);\n registerResources(mcpServer, composed.resources);\n registerPrompts(mcpServer, prompts);\n\n const app = express();\n app.use(cors());\n app.use(express.json({ limit: '10mb' }));\n\n if (runtime.deps.oauthAdapters.loopbackRouter) {\n app.use('/', runtime.deps.oauthAdapters.loopbackRouter);\n logger.info('Mounted loopback OAuth callback router');\n }\n\n if (config.auth !== 'dcr') {\n const fileRouter = createFileServingRouter({ resourceStoreUri: config.resourceStoreUri }, { contentType: 'text/csv', contentDisposition: 'attachment' });\n app.use('/files', fileRouter);\n }\n\n if (runtime.deps.oauthAdapters.dcrRouter) {\n app.use('/', runtime.deps.oauthAdapters.dcrRouter);\n logger.info('Mounted DCR router with OAuth endpoints');\n }\n\n logger.info(`Starting ${config.name} MCP server (http)`);\n const { close, httpServer } = await connectHttp(mcpServer, { logger, app, port });\n logger.info('http transport ready');\n\n return {\n httpServer,\n mcpServer,\n logger,\n close: async () => {\n await close();\n await runtime.close();\n },\n };\n}\n"],"names":["composeMiddleware","connectHttp","createFileServingRouter","registerPrompts","registerResources","registerTools","McpServer","cors","express","createDefaultRuntime","createHTTPServer","config","overrides","runtime","modules","createDomainModules","layers","middlewareFactories","map","factory","deps","composed","logger","port","transport","Error","tools","oauthAdapters","accountTools","filteredTools","auth","filter","tool","name","prompts","accountPrompts","mcpServer","version","resources","app","use","json","limit","loopbackRouter","info","fileRouter","resourceStoreUri","contentType","contentDisposition","dcrRouter","close","httpServer"],"mappings":"AAAA,SAASA,iBAAiB,EAAEC,WAAW,EAAEC,uBAAuB,EAAEC,eAAe,EAAEC,iBAAiB,EAAEC,aAAa,QAAQ,gBAAgB;AAC3I,SAASC,SAAS,QAAQ,0CAA0C;AACpE,OAAOC,UAAU,OAAO;AACxB,OAAOC,aAAa,UAAU;AAE9B,SAASC,oBAAoB,QAAQ,eAAe;AAEpD,OAAO,eAAeC,iBAAiBC,MAAoB,EAAEC,SAA4B;IACvF,MAAMC,UAAU,MAAMJ,qBAAqBE,QAAQC;IACnD,MAAME,UAAUD,QAAQE,mBAAmB;IAC3C,MAAMC,SAASH,QAAQI,mBAAmB,CAACC,GAAG,CAAC,CAACC,UAAYA,QAAQN,QAAQO,IAAI;IAChF,MAAMC,WAAWrB,kBAAkBc,SAASE;IAC5C,MAAMM,SAAST,QAAQO,IAAI,CAACE,MAAM;IAClC,MAAMC,OAAOZ,OAAOa,SAAS,CAACD,IAAI;IAClC,IAAI,CAACA,MAAM,MAAM,IAAIE,MAAM;IAE3B,MAAMC,QAAQ;WAAIL,SAASK,KAAK;WAAKb,QAAQO,IAAI,CAACO,aAAa,CAACC,YAAY;KAAC;IAC7E,MAAMC,gBACJlB,OAAOmB,IAAI,KAAK,QACZJ,MAAMK,MAAM,CAAC,CAACC,OAASA,KAAKC,IAAI,KAAK,uBAAuB,uDAAuD;OACnHP;IACN,MAAMQ,UAAU;WAAIb,SAASa,OAAO;WAAKrB,QAAQO,IAAI,CAACO,aAAa,CAACQ,cAAc;KAAC;IAEnF,MAAMC,YAAY,IAAI9B,UAAU;QAAE2B,MAAMtB,OAAOsB,IAAI;QAAEI,SAAS1B,OAAO0B,OAAO;IAAC;IAC7EhC,cAAc+B,WAAWP;IACzBzB,kBAAkBgC,WAAWf,SAASiB,SAAS;IAC/CnC,gBAAgBiC,WAAWF;IAE3B,MAAMK,MAAM/B;IACZ+B,IAAIC,GAAG,CAACjC;IACRgC,IAAIC,GAAG,CAAChC,QAAQiC,IAAI,CAAC;QAAEC,OAAO;IAAO;IAErC,IAAI7B,QAAQO,IAAI,CAACO,aAAa,CAACgB,cAAc,EAAE;QAC7CJ,IAAIC,GAAG,CAAC,KAAK3B,QAAQO,IAAI,CAACO,aAAa,CAACgB,cAAc;QACtDrB,OAAOsB,IAAI,CAAC;IACd;IAEA,IAAIjC,OAAOmB,IAAI,KAAK,OAAO;QACzB,MAAMe,aAAa3C,wBAAwB;YAAE4C,kBAAkBnC,OAAOmC,gBAAgB;QAAC,GAAG;YAAEC,aAAa;YAAYC,oBAAoB;QAAa;QACtJT,IAAIC,GAAG,CAAC,UAAUK;IACpB;IAEA,IAAIhC,QAAQO,IAAI,CAACO,aAAa,CAACsB,SAAS,EAAE;QACxCV,IAAIC,GAAG,CAAC,KAAK3B,QAAQO,IAAI,CAACO,aAAa,CAACsB,SAAS;QACjD3B,OAAOsB,IAAI,CAAC;IACd;IAEAtB,OAAOsB,IAAI,CAAC,CAAC,SAAS,EAAEjC,OAAOsB,IAAI,CAAC,kBAAkB,CAAC;IACvD,MAAM,EAAEiB,KAAK,EAAEC,UAAU,EAAE,GAAG,MAAMlD,YAAYmC,WAAW;QAAEd;QAAQiB;QAAKhB;IAAK;IAC/ED,OAAOsB,IAAI,CAAC;IAEZ,OAAO;QACLO;QACAf;QACAd;QACA4B,OAAO;YACL,MAAMA;YACN,MAAMrC,QAAQqC,KAAK;QACrB;IACF;AACF"}
|
|
@@ -8,5 +8,5 @@ export declare function createDcrStore(baseDir: string, required: boolean): Prom
|
|
|
8
8
|
export declare function createAuthLayer(authMiddleware: OAuthAdapters['middleware']): MiddlewareLayer;
|
|
9
9
|
export declare function createLoggingLayer(logger: Logger): MiddlewareLayer;
|
|
10
10
|
export declare function createStorageLayer(storageContext: StorageContext): MiddlewareLayer;
|
|
11
|
-
export declare function
|
|
11
|
+
export declare function validateStorageConfig(config: ServerConfig, logger: Logger): void;
|
|
12
12
|
export declare function createDefaultRuntime(config: ServerConfig, overrides?: RuntimeOverrides): Promise<CommonRuntime>;
|
|
@@ -64,7 +64,13 @@ export function createStorageLayer(storageContext) {
|
|
|
64
64
|
withTool: (module)=>wrapAtPosition(module, 1)
|
|
65
65
|
};
|
|
66
66
|
}
|
|
67
|
-
export function
|
|
67
|
+
export function validateStorageConfig(config, logger) {
|
|
68
|
+
if (config.auth === 'dcr') {
|
|
69
|
+
if (config.resourceStoreUri) {
|
|
70
|
+
logger.warn('DCR mode does not support file storage; resourceStoreUri will be ignored.');
|
|
71
|
+
}
|
|
72
|
+
return;
|
|
73
|
+
}
|
|
68
74
|
if (!config.resourceStoreUri) {
|
|
69
75
|
throw new Error('gmail-messages-export-csv: Server configuration missing resourceStoreUri.');
|
|
70
76
|
}
|
|
@@ -75,8 +81,8 @@ export function assertStorageConfig(config) {
|
|
|
75
81
|
export async function createDefaultRuntime(config, overrides) {
|
|
76
82
|
var _config_baseUrl, _ref, _ref1;
|
|
77
83
|
if (config.auth === 'dcr' && config.transport.type !== 'http') throw new Error('DCR mode requires an HTTP transport');
|
|
78
|
-
assertStorageConfig(config);
|
|
79
84
|
const logger = createLogger(config);
|
|
85
|
+
validateStorageConfig(config, logger);
|
|
80
86
|
const tokenStore = await createTokenStore(config.baseDir);
|
|
81
87
|
const baseUrl = (_config_baseUrl = config.baseUrl) !== null && _config_baseUrl !== void 0 ? _config_baseUrl : config.transport.type === 'http' && config.transport.port ? `http://localhost:${config.transport.port}` : undefined;
|
|
82
88
|
const dcrStore = await createDcrStore(config.baseDir, config.auth === 'dcr');
|
|
@@ -100,11 +106,13 @@ export async function createDefaultRuntime(config, overrides) {
|
|
|
100
106
|
const middlewareFactories = (_ref1 = overrides === null || overrides === void 0 ? void 0 : overrides.middlewareFactories) !== null && _ref1 !== void 0 ? _ref1 : [
|
|
101
107
|
()=>createAuthLayer(oauthAdapters.middleware),
|
|
102
108
|
()=>createLoggingLayer(logger),
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
109
|
+
...config.auth === 'dcr' ? [] : [
|
|
110
|
+
()=>createStorageLayer({
|
|
111
|
+
resourceStoreUri: config.resourceStoreUri,
|
|
112
|
+
baseUrl: config.baseUrl,
|
|
113
|
+
transport: config.transport
|
|
114
|
+
})
|
|
115
|
+
]
|
|
108
116
|
];
|
|
109
117
|
return {
|
|
110
118
|
deps,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["/Users/kevin/Dev/Projects/mcp-z/mcp-gmail/src/setup/runtime.ts"],"sourcesContent":["import { sanitizeForLoggingFormatter } from '@mcp-z/oauth';\nimport type { CachedToken } from '@mcp-z/oauth-google';\nimport type { Logger, MiddlewareLayer } from '@mcp-z/server';\nimport { createLoggingMiddleware } from '@mcp-z/server';\nimport * as fs from 'fs';\nimport * as path from 'path';\nimport pino from 'pino';\nimport createStore from '../lib/create-store.ts';\nimport * as mcp from '../mcp/index.ts';\nimport type { CommonRuntime, RuntimeDeps, RuntimeOverrides, ServerConfig, StorageContext } from '../types.ts';\nimport { createOAuthAdapters, type OAuthAdapters } from './oauth-google.ts';\n\nexport function createLogger(config: ServerConfig): Logger {\n const hasStdio = config.transport.type === 'stdio';\n const logsPath = path.join(config.baseDir, 'logs', `${config.name}.log`);\n if (hasStdio) fs.mkdirSync(path.dirname(logsPath), { recursive: true });\n return pino({ level: config.logLevel ?? 'info', formatters: sanitizeForLoggingFormatter() }, hasStdio ? pino.destination({ dest: logsPath, sync: false }) : pino.destination(1));\n}\n\nexport async function createTokenStore(baseDir: string) {\n const tokenStoreUri = process.env.TOKEN_STORE_URI || `file://${path.join(baseDir, 'tokens.json')}`;\n return createStore<CachedToken>(tokenStoreUri);\n}\n\nexport async function createDcrStore(baseDir: string, required: boolean) {\n if (!required) return undefined;\n const dcrStoreUri = process.env.DCR_STORE_URI || `file://${path.join(baseDir, 'dcr.json')}`;\n return createStore<unknown>(dcrStoreUri);\n}\n\nexport function createAuthLayer(authMiddleware: OAuthAdapters['middleware']): MiddlewareLayer {\n return {\n withTool: authMiddleware.withToolAuth,\n withResource: authMiddleware.withResourceAuth,\n withPrompt: authMiddleware.withPromptAuth,\n };\n}\n\nexport function createLoggingLayer(logger: Logger): MiddlewareLayer {\n const logging = createLoggingMiddleware({ logger });\n return {\n withTool: logging.withToolLogging,\n withResource: logging.withResourceLogging,\n withPrompt: logging.withPromptLogging,\n };\n}\n\nexport function createStorageLayer(storageContext: StorageContext): MiddlewareLayer {\n const wrapAtPosition = <T extends { name: string; handler: unknown; [key: string]: unknown }>(module: T, extraPosition: number): T => {\n const originalHandler = module.handler as (...args: unknown[]) => Promise<unknown>;\n\n const wrappedHandler = async (...allArgs: unknown[]) => {\n const extra = allArgs[extraPosition];\n (extra as { storageContext?: StorageContext }).storageContext = storageContext;\n return await originalHandler(...allArgs);\n };\n\n return {\n ...module,\n handler: wrappedHandler,\n } as T;\n };\n\n return {\n withTool: <T extends { name: string; config: unknown; handler: unknown }>(module: T): T => wrapAtPosition(module, 1) as T,\n };\n}\n\nexport function
|
|
1
|
+
{"version":3,"sources":["/Users/kevin/Dev/Projects/mcp-z/mcp-gmail/src/setup/runtime.ts"],"sourcesContent":["import { sanitizeForLoggingFormatter } from '@mcp-z/oauth';\nimport type { CachedToken } from '@mcp-z/oauth-google';\nimport type { Logger, MiddlewareLayer } from '@mcp-z/server';\nimport { createLoggingMiddleware } from '@mcp-z/server';\nimport * as fs from 'fs';\nimport * as path from 'path';\nimport pino from 'pino';\nimport createStore from '../lib/create-store.ts';\nimport * as mcp from '../mcp/index.ts';\nimport type { CommonRuntime, RuntimeDeps, RuntimeOverrides, ServerConfig, StorageContext } from '../types.ts';\nimport { createOAuthAdapters, type OAuthAdapters } from './oauth-google.ts';\n\nexport function createLogger(config: ServerConfig): Logger {\n const hasStdio = config.transport.type === 'stdio';\n const logsPath = path.join(config.baseDir, 'logs', `${config.name}.log`);\n if (hasStdio) fs.mkdirSync(path.dirname(logsPath), { recursive: true });\n return pino({ level: config.logLevel ?? 'info', formatters: sanitizeForLoggingFormatter() }, hasStdio ? pino.destination({ dest: logsPath, sync: false }) : pino.destination(1));\n}\n\nexport async function createTokenStore(baseDir: string) {\n const tokenStoreUri = process.env.TOKEN_STORE_URI || `file://${path.join(baseDir, 'tokens.json')}`;\n return createStore<CachedToken>(tokenStoreUri);\n}\n\nexport async function createDcrStore(baseDir: string, required: boolean) {\n if (!required) return undefined;\n const dcrStoreUri = process.env.DCR_STORE_URI || `file://${path.join(baseDir, 'dcr.json')}`;\n return createStore<unknown>(dcrStoreUri);\n}\n\nexport function createAuthLayer(authMiddleware: OAuthAdapters['middleware']): MiddlewareLayer {\n return {\n withTool: authMiddleware.withToolAuth,\n withResource: authMiddleware.withResourceAuth,\n withPrompt: authMiddleware.withPromptAuth,\n };\n}\n\nexport function createLoggingLayer(logger: Logger): MiddlewareLayer {\n const logging = createLoggingMiddleware({ logger });\n return {\n withTool: logging.withToolLogging,\n withResource: logging.withResourceLogging,\n withPrompt: logging.withPromptLogging,\n };\n}\n\nexport function createStorageLayer(storageContext: StorageContext): MiddlewareLayer {\n const wrapAtPosition = <T extends { name: string; handler: unknown; [key: string]: unknown }>(module: T, extraPosition: number): T => {\n const originalHandler = module.handler as (...args: unknown[]) => Promise<unknown>;\n\n const wrappedHandler = async (...allArgs: unknown[]) => {\n const extra = allArgs[extraPosition];\n (extra as { storageContext?: StorageContext }).storageContext = storageContext;\n return await originalHandler(...allArgs);\n };\n\n return {\n ...module,\n handler: wrappedHandler,\n } as T;\n };\n\n return {\n withTool: <T extends { name: string; config: unknown; handler: unknown }>(module: T): T => wrapAtPosition(module, 1) as T,\n };\n}\n\nexport function validateStorageConfig(config: ServerConfig, logger: Logger) {\n if (config.auth === 'dcr') {\n if (config.resourceStoreUri) {\n logger.warn('DCR mode does not support file storage; resourceStoreUri will be ignored.');\n }\n return;\n }\n if (!config.resourceStoreUri) {\n throw new Error('gmail-messages-export-csv: Server configuration missing resourceStoreUri.');\n }\n if (config.transport.type === 'http' && !config.baseUrl && !config.transport.port) {\n throw new Error('gmail-messages-export-csv: HTTP transport requires either baseUrl in server config or port in transport config. This is a server configuration error - please provide --base-url or --port.');\n }\n}\n\nexport async function createDefaultRuntime(config: ServerConfig, overrides?: RuntimeOverrides): Promise<CommonRuntime> {\n if (config.auth === 'dcr' && config.transport.type !== 'http') throw new Error('DCR mode requires an HTTP transport');\n\n const logger = createLogger(config);\n validateStorageConfig(config, logger);\n const tokenStore = await createTokenStore(config.baseDir);\n const baseUrl = config.baseUrl ?? (config.transport.type === 'http' && config.transport.port ? `http://localhost:${config.transport.port}` : undefined);\n const dcrStore = await createDcrStore(config.baseDir, config.auth === 'dcr');\n const oauthAdapters = await createOAuthAdapters(config, { logger, tokenStore, dcrStore }, baseUrl);\n const deps: RuntimeDeps = { config, logger, tokenStore, oauthAdapters, baseUrl };\n const createDomainModules =\n overrides?.createDomainModules ??\n (() => ({\n tools: Object.values(mcp.toolFactories).map((factory) => factory()),\n resources: Object.values(mcp.resourceFactories).map((factory) => factory()),\n prompts: Object.values(mcp.promptFactories).map((factory) => factory()),\n }));\n const middlewareFactories = overrides?.middlewareFactories ?? [() => createAuthLayer(oauthAdapters.middleware), () => createLoggingLayer(logger), ...(config.auth === 'dcr' ? [] : [() => createStorageLayer({ resourceStoreUri: config.resourceStoreUri, baseUrl: config.baseUrl, transport: config.transport })])];\n\n return {\n deps,\n middlewareFactories,\n createDomainModules,\n close: async () => {},\n };\n}\n"],"names":["sanitizeForLoggingFormatter","createLoggingMiddleware","fs","path","pino","createStore","mcp","createOAuthAdapters","createLogger","config","hasStdio","transport","type","logsPath","join","baseDir","name","mkdirSync","dirname","recursive","level","logLevel","formatters","destination","dest","sync","createTokenStore","tokenStoreUri","process","env","TOKEN_STORE_URI","createDcrStore","required","undefined","dcrStoreUri","DCR_STORE_URI","createAuthLayer","authMiddleware","withTool","withToolAuth","withResource","withResourceAuth","withPrompt","withPromptAuth","createLoggingLayer","logger","logging","withToolLogging","withResourceLogging","withPromptLogging","createStorageLayer","storageContext","wrapAtPosition","module","extraPosition","originalHandler","handler","wrappedHandler","allArgs","extra","validateStorageConfig","auth","resourceStoreUri","warn","Error","baseUrl","port","createDefaultRuntime","overrides","tokenStore","dcrStore","oauthAdapters","deps","createDomainModules","tools","Object","values","toolFactories","map","factory","resources","resourceFactories","prompts","promptFactories","middlewareFactories","middleware","close"],"mappings":"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"}
|
package/dist/esm/setup/stdio.js
CHANGED
|
@@ -11,6 +11,8 @@ export async function createStdioServer(config, overrides) {
|
|
|
11
11
|
...composed.tools,
|
|
12
12
|
...runtime.deps.oauthAdapters.accountTools
|
|
13
13
|
];
|
|
14
|
+
const filteredTools = config.auth === 'dcr' ? tools.filter((tool)=>tool.name !== 'messages-export-csv') // No file storage in DCR (public cloud responsibility)
|
|
15
|
+
: tools;
|
|
14
16
|
const prompts = [
|
|
15
17
|
...composed.prompts,
|
|
16
18
|
...runtime.deps.oauthAdapters.accountPrompts
|
|
@@ -19,7 +21,7 @@ export async function createStdioServer(config, overrides) {
|
|
|
19
21
|
name: config.name,
|
|
20
22
|
version: config.version
|
|
21
23
|
});
|
|
22
|
-
registerTools(mcpServer,
|
|
24
|
+
registerTools(mcpServer, filteredTools);
|
|
23
25
|
registerResources(mcpServer, composed.resources);
|
|
24
26
|
registerPrompts(mcpServer, prompts);
|
|
25
27
|
logger.info(`Starting ${config.name} MCP server (stdio)`);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["/Users/kevin/Dev/Projects/mcp-z/mcp-gmail/src/setup/stdio.ts"],"sourcesContent":["import { composeMiddleware, connectStdio, registerPrompts, registerResources, registerTools } from '@mcp-z/server';\nimport { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\nimport type { RuntimeOverrides, ServerConfig } from '../types.ts';\nimport { createDefaultRuntime } from './runtime.ts';\n\nexport async function createStdioServer(config: ServerConfig, overrides?: RuntimeOverrides) {\n const runtime = await createDefaultRuntime(config, overrides);\n const modules = runtime.createDomainModules();\n const layers = runtime.middlewareFactories.map((factory) => factory(runtime.deps));\n const composed = composeMiddleware(modules, layers);\n const logger = runtime.deps.logger;\n\n const tools = [...composed.tools, ...runtime.deps.oauthAdapters.accountTools];\n const prompts = [...composed.prompts, ...runtime.deps.oauthAdapters.accountPrompts];\n\n const mcpServer = new McpServer({ name: config.name, version: config.version });\n registerTools(mcpServer,
|
|
1
|
+
{"version":3,"sources":["/Users/kevin/Dev/Projects/mcp-z/mcp-gmail/src/setup/stdio.ts"],"sourcesContent":["import { composeMiddleware, connectStdio, registerPrompts, registerResources, registerTools } from '@mcp-z/server';\nimport { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\nimport type { RuntimeOverrides, ServerConfig } from '../types.ts';\nimport { createDefaultRuntime } from './runtime.ts';\n\nexport async function createStdioServer(config: ServerConfig, overrides?: RuntimeOverrides) {\n const runtime = await createDefaultRuntime(config, overrides);\n const modules = runtime.createDomainModules();\n const layers = runtime.middlewareFactories.map((factory) => factory(runtime.deps));\n const composed = composeMiddleware(modules, layers);\n const logger = runtime.deps.logger;\n\n const tools = [...composed.tools, ...runtime.deps.oauthAdapters.accountTools];\n const filteredTools =\n config.auth === 'dcr'\n ? tools.filter((tool) => tool.name !== 'messages-export-csv') // No file storage in DCR (public cloud responsibility)\n : tools;\n const prompts = [...composed.prompts, ...runtime.deps.oauthAdapters.accountPrompts];\n\n const mcpServer = new McpServer({ name: config.name, version: config.version });\n registerTools(mcpServer, filteredTools);\n registerResources(mcpServer, composed.resources);\n registerPrompts(mcpServer, prompts);\n\n logger.info(`Starting ${config.name} MCP server (stdio)`);\n const { close } = await connectStdio(mcpServer, { logger });\n logger.info('stdio transport ready');\n\n return {\n mcpServer,\n logger,\n close: async () => {\n await close();\n await runtime.close();\n },\n };\n}\n"],"names":["composeMiddleware","connectStdio","registerPrompts","registerResources","registerTools","McpServer","createDefaultRuntime","createStdioServer","config","overrides","runtime","modules","createDomainModules","layers","middlewareFactories","map","factory","deps","composed","logger","tools","oauthAdapters","accountTools","filteredTools","auth","filter","tool","name","prompts","accountPrompts","mcpServer","version","resources","info","close"],"mappings":"AAAA,SAASA,iBAAiB,EAAEC,YAAY,EAAEC,eAAe,EAAEC,iBAAiB,EAAEC,aAAa,QAAQ,gBAAgB;AACnH,SAASC,SAAS,QAAQ,0CAA0C;AAEpE,SAASC,oBAAoB,QAAQ,eAAe;AAEpD,OAAO,eAAeC,kBAAkBC,MAAoB,EAAEC,SAA4B;IACxF,MAAMC,UAAU,MAAMJ,qBAAqBE,QAAQC;IACnD,MAAME,UAAUD,QAAQE,mBAAmB;IAC3C,MAAMC,SAASH,QAAQI,mBAAmB,CAACC,GAAG,CAAC,CAACC,UAAYA,QAAQN,QAAQO,IAAI;IAChF,MAAMC,WAAWlB,kBAAkBW,SAASE;IAC5C,MAAMM,SAAST,QAAQO,IAAI,CAACE,MAAM;IAElC,MAAMC,QAAQ;WAAIF,SAASE,KAAK;WAAKV,QAAQO,IAAI,CAACI,aAAa,CAACC,YAAY;KAAC;IAC7E,MAAMC,gBACJf,OAAOgB,IAAI,KAAK,QACZJ,MAAMK,MAAM,CAAC,CAACC,OAASA,KAAKC,IAAI,KAAK,uBAAuB,uDAAuD;OACnHP;IACN,MAAMQ,UAAU;WAAIV,SAASU,OAAO;WAAKlB,QAAQO,IAAI,CAACI,aAAa,CAACQ,cAAc;KAAC;IAEnF,MAAMC,YAAY,IAAIzB,UAAU;QAAEsB,MAAMnB,OAAOmB,IAAI;QAAEI,SAASvB,OAAOuB,OAAO;IAAC;IAC7E3B,cAAc0B,WAAWP;IACzBpB,kBAAkB2B,WAAWZ,SAASc,SAAS;IAC/C9B,gBAAgB4B,WAAWF;IAE3BT,OAAOc,IAAI,CAAC,CAAC,SAAS,EAAEzB,OAAOmB,IAAI,CAAC,mBAAmB,CAAC;IACxD,MAAM,EAAEO,KAAK,EAAE,GAAG,MAAMjC,aAAa6B,WAAW;QAAEX;IAAO;IACzDA,OAAOc,IAAI,CAAC;IAEZ,OAAO;QACLH;QACAX;QACAe,OAAO;YACL,MAAMA;YACN,MAAMxB,QAAQwB,KAAK;QACrB;IACF;AACF"}
|
package/package.json
CHANGED