@mcp-z/mcp-drive 1.0.0
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/LICENSE +21 -0
- package/README.md +163 -0
- package/bin/server.js +5 -0
- package/dist/cjs/constants.d.cts +7 -0
- package/dist/cjs/constants.d.ts +7 -0
- package/dist/cjs/constants.js +18 -0
- package/dist/cjs/constants.js.map +1 -0
- package/dist/cjs/index.d.cts +8 -0
- package/dist/cjs/index.d.ts +8 -0
- package/dist/cjs/index.js +314 -0
- package/dist/cjs/index.js.map +1 -0
- package/dist/cjs/lib/create-store.d.cts +2 -0
- package/dist/cjs/lib/create-store.d.ts +2 -0
- package/dist/cjs/lib/create-store.js +166 -0
- package/dist/cjs/lib/create-store.js.map +1 -0
- package/dist/cjs/lib/query-builder.d.cts +45 -0
- package/dist/cjs/lib/query-builder.d.ts +45 -0
- package/dist/cjs/lib/query-builder.js +219 -0
- package/dist/cjs/lib/query-builder.js.map +1 -0
- package/dist/cjs/mcp/index.d.cts +3 -0
- package/dist/cjs/mcp/index.d.ts +3 -0
- package/dist/cjs/mcp/index.js +66 -0
- package/dist/cjs/mcp/index.js.map +1 -0
- package/dist/cjs/mcp/prompts/index.d.cts +2 -0
- package/dist/cjs/mcp/prompts/index.d.ts +2 -0
- package/dist/cjs/mcp/prompts/index.js +26 -0
- package/dist/cjs/mcp/prompts/index.js.map +1 -0
- package/dist/cjs/mcp/prompts/organize-files.d.cts +16 -0
- package/dist/cjs/mcp/prompts/organize-files.d.ts +16 -0
- package/dist/cjs/mcp/prompts/organize-files.js +169 -0
- package/dist/cjs/mcp/prompts/organize-files.js.map +1 -0
- package/dist/cjs/mcp/prompts/query-syntax.d.cts +19 -0
- package/dist/cjs/mcp/prompts/query-syntax.d.ts +19 -0
- package/dist/cjs/mcp/prompts/query-syntax.js +169 -0
- package/dist/cjs/mcp/prompts/query-syntax.js.map +1 -0
- package/dist/cjs/mcp/resources/file.d.cts +9 -0
- package/dist/cjs/mcp/resources/file.d.ts +9 -0
- package/dist/cjs/mcp/resources/file.js +247 -0
- package/dist/cjs/mcp/resources/file.js.map +1 -0
- package/dist/cjs/mcp/resources/index.d.cts +1 -0
- package/dist/cjs/mcp/resources/index.d.ts +1 -0
- package/dist/cjs/mcp/resources/index.js +17 -0
- package/dist/cjs/mcp/resources/index.js.map +1 -0
- package/dist/cjs/mcp/tools/file-move-to-trash.d.cts +59 -0
- package/dist/cjs/mcp/tools/file-move-to-trash.d.ts +59 -0
- package/dist/cjs/mcp/tools/file-move-to-trash.js +334 -0
- package/dist/cjs/mcp/tools/file-move-to-trash.js.map +1 -0
- package/dist/cjs/mcp/tools/file-move.d.cts +73 -0
- package/dist/cjs/mcp/tools/file-move.d.ts +73 -0
- package/dist/cjs/mcp/tools/file-move.js +613 -0
- package/dist/cjs/mcp/tools/file-move.js.map +1 -0
- package/dist/cjs/mcp/tools/files-search.d.cts +135 -0
- package/dist/cjs/mcp/tools/files-search.d.ts +135 -0
- package/dist/cjs/mcp/tools/files-search.js +558 -0
- package/dist/cjs/mcp/tools/files-search.js.map +1 -0
- package/dist/cjs/mcp/tools/folder-contents.d.cts +139 -0
- package/dist/cjs/mcp/tools/folder-contents.d.ts +139 -0
- package/dist/cjs/mcp/tools/folder-contents.js +513 -0
- package/dist/cjs/mcp/tools/folder-contents.js.map +1 -0
- package/dist/cjs/mcp/tools/folder-create.d.cts +59 -0
- package/dist/cjs/mcp/tools/folder-create.d.ts +59 -0
- package/dist/cjs/mcp/tools/folder-create.js +368 -0
- package/dist/cjs/mcp/tools/folder-create.js.map +1 -0
- package/dist/cjs/mcp/tools/folder-path.d.cts +49 -0
- package/dist/cjs/mcp/tools/folder-path.d.ts +49 -0
- package/dist/cjs/mcp/tools/folder-path.js +367 -0
- package/dist/cjs/mcp/tools/folder-path.js.map +1 -0
- package/dist/cjs/mcp/tools/folder-search.d.cts +139 -0
- package/dist/cjs/mcp/tools/folder-search.d.ts +139 -0
- package/dist/cjs/mcp/tools/folder-search.js +760 -0
- package/dist/cjs/mcp/tools/folder-search.js.map +1 -0
- package/dist/cjs/mcp/tools/index.d.cts +7 -0
- package/dist/cjs/mcp/tools/index.d.ts +7 -0
- package/dist/cjs/mcp/tools/index.js +46 -0
- package/dist/cjs/mcp/tools/index.js.map +1 -0
- package/dist/cjs/package.json +1 -0
- package/dist/cjs/schemas/drive-query-schema.d.cts +40 -0
- package/dist/cjs/schemas/drive-query-schema.d.ts +40 -0
- package/dist/cjs/schemas/drive-query-schema.js +90 -0
- package/dist/cjs/schemas/drive-query-schema.js.map +1 -0
- package/dist/cjs/schemas/drive-validation.d.cts +48 -0
- package/dist/cjs/schemas/drive-validation.d.ts +48 -0
- package/dist/cjs/schemas/drive-validation.js +96 -0
- package/dist/cjs/schemas/drive-validation.js.map +1 -0
- package/dist/cjs/schemas/index.d.cts +2 -0
- package/dist/cjs/schemas/index.d.ts +2 -0
- package/dist/cjs/schemas/index.js +20 -0
- package/dist/cjs/schemas/index.js.map +1 -0
- package/dist/cjs/setup/config.d.cts +44 -0
- package/dist/cjs/setup/config.d.ts +44 -0
- package/dist/cjs/setup/config.js +201 -0
- package/dist/cjs/setup/config.js.map +1 -0
- package/dist/cjs/setup/http.d.cts +8 -0
- package/dist/cjs/setup/http.d.ts +8 -0
- package/dist/cjs/setup/http.js +260 -0
- package/dist/cjs/setup/http.js.map +1 -0
- package/dist/cjs/setup/index.d.cts +5 -0
- package/dist/cjs/setup/index.d.ts +5 -0
- package/dist/cjs/setup/index.js +46 -0
- package/dist/cjs/setup/index.js.map +1 -0
- package/dist/cjs/setup/oauth-google.d.cts +64 -0
- package/dist/cjs/setup/oauth-google.d.ts +64 -0
- package/dist/cjs/setup/oauth-google.js +347 -0
- package/dist/cjs/setup/oauth-google.js.map +1 -0
- package/dist/cjs/setup/runtime.d.cts +10 -0
- package/dist/cjs/setup/runtime.d.ts +10 -0
- package/dist/cjs/setup/runtime.js +353 -0
- package/dist/cjs/setup/runtime.js.map +1 -0
- package/dist/cjs/setup/stdio.d.cts +7 -0
- package/dist/cjs/setup/stdio.d.ts +7 -0
- package/dist/cjs/setup/stdio.js +239 -0
- package/dist/cjs/setup/stdio.js.map +1 -0
- package/dist/cjs/types.d.cts +45 -0
- package/dist/cjs/types.d.ts +45 -0
- package/dist/cjs/types.js +5 -0
- package/dist/cjs/types.js.map +1 -0
- package/dist/esm/constants.d.ts +7 -0
- package/dist/esm/constants.js +7 -0
- package/dist/esm/constants.js.map +1 -0
- package/dist/esm/index.d.ts +8 -0
- package/dist/esm/index.js +34 -0
- package/dist/esm/index.js.map +1 -0
- package/dist/esm/lib/create-store.d.ts +2 -0
- package/dist/esm/lib/create-store.js +6 -0
- package/dist/esm/lib/create-store.js.map +1 -0
- package/dist/esm/lib/query-builder.d.ts +45 -0
- package/dist/esm/lib/query-builder.js +184 -0
- package/dist/esm/lib/query-builder.js.map +1 -0
- package/dist/esm/mcp/index.d.ts +3 -0
- package/dist/esm/mcp/index.js +6 -0
- package/dist/esm/mcp/index.js.map +1 -0
- package/dist/esm/mcp/prompts/index.d.ts +2 -0
- package/dist/esm/mcp/prompts/index.js +2 -0
- package/dist/esm/mcp/prompts/index.js.map +1 -0
- package/dist/esm/mcp/prompts/organize-files.d.ts +16 -0
- package/dist/esm/mcp/prompts/organize-files.js +21 -0
- package/dist/esm/mcp/prompts/organize-files.js.map +1 -0
- package/dist/esm/mcp/prompts/query-syntax.d.ts +19 -0
- package/dist/esm/mcp/prompts/query-syntax.js +82 -0
- package/dist/esm/mcp/prompts/query-syntax.js.map +1 -0
- package/dist/esm/mcp/resources/file.d.ts +9 -0
- package/dist/esm/mcp/resources/file.js +77 -0
- package/dist/esm/mcp/resources/file.js.map +1 -0
- package/dist/esm/mcp/resources/index.d.ts +1 -0
- package/dist/esm/mcp/resources/index.js +1 -0
- package/dist/esm/mcp/resources/index.js.map +1 -0
- package/dist/esm/mcp/tools/file-move-to-trash.d.ts +59 -0
- package/dist/esm/mcp/tools/file-move-to-trash.js +118 -0
- package/dist/esm/mcp/tools/file-move-to-trash.js.map +1 -0
- package/dist/esm/mcp/tools/file-move.d.ts +73 -0
- package/dist/esm/mcp/tools/file-move.js +274 -0
- package/dist/esm/mcp/tools/file-move.js.map +1 -0
- package/dist/esm/mcp/tools/files-search.d.ts +135 -0
- package/dist/esm/mcp/tools/files-search.js +254 -0
- package/dist/esm/mcp/tools/files-search.js.map +1 -0
- package/dist/esm/mcp/tools/folder-contents.d.ts +139 -0
- package/dist/esm/mcp/tools/folder-contents.js +214 -0
- package/dist/esm/mcp/tools/folder-contents.js.map +1 -0
- package/dist/esm/mcp/tools/folder-create.d.ts +59 -0
- package/dist/esm/mcp/tools/folder-create.js +140 -0
- package/dist/esm/mcp/tools/folder-create.js.map +1 -0
- package/dist/esm/mcp/tools/folder-path.d.ts +49 -0
- package/dist/esm/mcp/tools/folder-path.js +147 -0
- package/dist/esm/mcp/tools/folder-path.js.map +1 -0
- package/dist/esm/mcp/tools/folder-search.d.ts +139 -0
- package/dist/esm/mcp/tools/folder-search.js +343 -0
- package/dist/esm/mcp/tools/folder-search.js.map +1 -0
- package/dist/esm/mcp/tools/index.d.ts +7 -0
- package/dist/esm/mcp/tools/index.js +7 -0
- package/dist/esm/mcp/tools/index.js.map +1 -0
- package/dist/esm/package.json +1 -0
- package/dist/esm/schemas/drive-query-schema.d.ts +40 -0
- package/dist/esm/schemas/drive-query-schema.js +84 -0
- package/dist/esm/schemas/drive-query-schema.js.map +1 -0
- package/dist/esm/schemas/drive-validation.d.ts +48 -0
- package/dist/esm/schemas/drive-validation.js +73 -0
- package/dist/esm/schemas/drive-validation.js.map +1 -0
- package/dist/esm/schemas/index.d.ts +2 -0
- package/dist/esm/schemas/index.js +2 -0
- package/dist/esm/schemas/index.js.map +1 -0
- package/dist/esm/setup/config.d.ts +44 -0
- package/dist/esm/setup/config.js +151 -0
- package/dist/esm/setup/config.js.map +1 -0
- package/dist/esm/setup/http.d.ts +8 -0
- package/dist/esm/setup/http.js +54 -0
- package/dist/esm/setup/http.js.map +1 -0
- package/dist/esm/setup/index.d.ts +5 -0
- package/dist/esm/setup/index.js +5 -0
- package/dist/esm/setup/index.js.map +1 -0
- package/dist/esm/setup/oauth-google.d.ts +64 -0
- package/dist/esm/setup/oauth-google.js +168 -0
- package/dist/esm/setup/oauth-google.js.map +1 -0
- package/dist/esm/setup/runtime.d.ts +10 -0
- package/dist/esm/setup/runtime.js +84 -0
- package/dist/esm/setup/runtime.js.map +1 -0
- package/dist/esm/setup/stdio.d.ts +7 -0
- package/dist/esm/setup/stdio.js +38 -0
- package/dist/esm/setup/stdio.js.map +1 -0
- package/dist/esm/types.d.ts +45 -0
- package/dist/esm/types.js +1 -0
- package/dist/esm/types.js.map +1 -0
- package/package.json +108 -0
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import { composeMiddleware, connectHttp, registerPrompts, registerResources, registerTools } from '@mcp-z/server';
|
|
2
|
+
import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
|
|
3
|
+
import cors from 'cors';
|
|
4
|
+
import express from 'express';
|
|
5
|
+
import { createDefaultRuntime } from './runtime.js';
|
|
6
|
+
export async function createHTTPServer(config, overrides) {
|
|
7
|
+
const runtime = await createDefaultRuntime(config, overrides);
|
|
8
|
+
const modules = runtime.createDomainModules();
|
|
9
|
+
const layers = runtime.middlewareFactories.map((factory)=>factory(runtime.deps));
|
|
10
|
+
const composed = composeMiddleware(modules, layers);
|
|
11
|
+
const logger = runtime.deps.logger;
|
|
12
|
+
const port = config.transport.port;
|
|
13
|
+
if (!port) throw new Error('Port is required for HTTP transport');
|
|
14
|
+
const tools = [
|
|
15
|
+
...composed.tools,
|
|
16
|
+
...runtime.deps.oauthAdapters.accountTools
|
|
17
|
+
];
|
|
18
|
+
const prompts = [
|
|
19
|
+
...composed.prompts,
|
|
20
|
+
...runtime.deps.oauthAdapters.accountPrompts
|
|
21
|
+
];
|
|
22
|
+
const mcpServer = new McpServer({
|
|
23
|
+
name: config.name,
|
|
24
|
+
version: config.version
|
|
25
|
+
});
|
|
26
|
+
registerTools(mcpServer, tools);
|
|
27
|
+
registerResources(mcpServer, composed.resources);
|
|
28
|
+
registerPrompts(mcpServer, prompts);
|
|
29
|
+
const app = express();
|
|
30
|
+
app.use(cors());
|
|
31
|
+
app.use(express.json({
|
|
32
|
+
limit: '10mb'
|
|
33
|
+
}));
|
|
34
|
+
if (runtime.deps.oauthAdapters.dcrRouter) {
|
|
35
|
+
app.use('/', runtime.deps.oauthAdapters.dcrRouter);
|
|
36
|
+
logger.info('Mounted DCR router with OAuth endpoints');
|
|
37
|
+
}
|
|
38
|
+
logger.info(`Starting ${config.name} MCP server (http)`);
|
|
39
|
+
const { close, httpServer } = await connectHttp(mcpServer, {
|
|
40
|
+
logger,
|
|
41
|
+
app,
|
|
42
|
+
port
|
|
43
|
+
});
|
|
44
|
+
logger.info('http transport ready');
|
|
45
|
+
return {
|
|
46
|
+
httpServer,
|
|
47
|
+
mcpServer,
|
|
48
|
+
logger,
|
|
49
|
+
close: async ()=>{
|
|
50
|
+
await close();
|
|
51
|
+
await runtime.close();
|
|
52
|
+
}
|
|
53
|
+
};
|
|
54
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["/Users/kevin/Dev/Projects/ai/mcp-z/servers/mcp-drive/src/setup/http.ts"],"sourcesContent":["import { composeMiddleware, connectHttp, 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.js';\nimport { createDefaultRuntime } from './runtime.js';\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, tools);\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.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","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","prompts","accountPrompts","mcpServer","name","version","resources","app","use","json","limit","dcrRouter","info","close","httpServer"],"mappings":"AAAA,SAASA,iBAAiB,EAAEC,WAAW,EAAEC,eAAe,EAAEC,iBAAiB,EAAEC,aAAa,QAAQ,gBAAgB;AAClH,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,WAAWpB,kBAAkBa,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,UAAU;WAAIR,SAASQ,OAAO;WAAKhB,QAAQO,IAAI,CAACO,aAAa,CAACG,cAAc;KAAC;IAEnF,MAAMC,YAAY,IAAIzB,UAAU;QAAE0B,MAAMrB,OAAOqB,IAAI;QAAEC,SAAStB,OAAOsB,OAAO;IAAC;IAC7E5B,cAAc0B,WAAWL;IACzBtB,kBAAkB2B,WAAWV,SAASa,SAAS;IAC/C/B,gBAAgB4B,WAAWF;IAE3B,MAAMM,MAAM3B;IACZ2B,IAAIC,GAAG,CAAC7B;IACR4B,IAAIC,GAAG,CAAC5B,QAAQ6B,IAAI,CAAC;QAAEC,OAAO;IAAO;IAErC,IAAIzB,QAAQO,IAAI,CAACO,aAAa,CAACY,SAAS,EAAE;QACxCJ,IAAIC,GAAG,CAAC,KAAKvB,QAAQO,IAAI,CAACO,aAAa,CAACY,SAAS;QACjDjB,OAAOkB,IAAI,CAAC;IACd;IAEAlB,OAAOkB,IAAI,CAAC,CAAC,SAAS,EAAE7B,OAAOqB,IAAI,CAAC,kBAAkB,CAAC;IACvD,MAAM,EAAES,KAAK,EAAEC,UAAU,EAAE,GAAG,MAAMxC,YAAY6B,WAAW;QAAET;QAAQa;QAAKZ;IAAK;IAC/ED,OAAOkB,IAAI,CAAC;IAEZ,OAAO;QACLE;QACAX;QACAT;QACAmB,OAAO;YACL,MAAMA;YACN,MAAM5B,QAAQ4B,KAAK;QACrB;IACF;AACF"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["/Users/kevin/Dev/Projects/ai/mcp-z/servers/mcp-drive/src/setup/index.ts"],"sourcesContent":["export { createConfig, parseConfig } from './config.js';\nexport { createHTTPServer } from './http.js';\nexport { createOAuthAdapters } from './oauth-google.js';\nexport * from './runtime.js';\nexport { createStdioServer } from './stdio.js';\n"],"names":["createConfig","parseConfig","createHTTPServer","createOAuthAdapters","createStdioServer"],"mappings":"AAAA,SAASA,YAAY,EAAEC,WAAW,QAAQ,cAAc;AACxD,SAASC,gBAAgB,QAAQ,YAAY;AAC7C,SAASC,mBAAmB,QAAQ,oBAAoB;AACxD,cAAc,eAAe;AAC7B,SAASC,iBAAiB,QAAQ,aAAa"}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import { type AuthEmailProvider } from '@mcp-z/oauth';
|
|
2
|
+
import type { CachedToken } from '@mcp-z/oauth-google';
|
|
3
|
+
import { DcrOAuthProvider, LoopbackOAuthProvider, ServiceAccountProvider } from '@mcp-z/oauth-google';
|
|
4
|
+
import type { Logger, PromptModule, ToolModule } from '@mcp-z/server';
|
|
5
|
+
import type { Router } from 'express';
|
|
6
|
+
import type { Keyv } from 'keyv';
|
|
7
|
+
import type { ServerConfig } from '../types.js';
|
|
8
|
+
/**
|
|
9
|
+
* Drive OAuth runtime dependencies
|
|
10
|
+
*/
|
|
11
|
+
export interface OAuthRuntimeDeps {
|
|
12
|
+
logger: Logger;
|
|
13
|
+
tokenStore: Keyv<CachedToken>;
|
|
14
|
+
dcrStore?: Keyv<unknown>;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Auth middleware wrapper with withToolAuth/withResourceAuth/withPromptAuth methods
|
|
18
|
+
* Uses structural constraints to avoid contravariance issues with handler types.
|
|
19
|
+
*/
|
|
20
|
+
export interface AuthMiddleware {
|
|
21
|
+
withToolAuth<T extends {
|
|
22
|
+
name: string;
|
|
23
|
+
config: unknown;
|
|
24
|
+
handler: unknown;
|
|
25
|
+
}>(module: T): T;
|
|
26
|
+
withResourceAuth<T extends {
|
|
27
|
+
name: string;
|
|
28
|
+
template?: unknown;
|
|
29
|
+
config?: unknown;
|
|
30
|
+
handler: unknown;
|
|
31
|
+
}>(module: T): T;
|
|
32
|
+
withPromptAuth<T extends {
|
|
33
|
+
name: string;
|
|
34
|
+
config: unknown;
|
|
35
|
+
handler: unknown;
|
|
36
|
+
}>(module: T): T;
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Result of OAuth adapter creation
|
|
40
|
+
*/
|
|
41
|
+
export interface OAuthAdapters {
|
|
42
|
+
primary: LoopbackOAuthProvider | ServiceAccountProvider | DcrOAuthProvider;
|
|
43
|
+
middleware: AuthMiddleware;
|
|
44
|
+
authAdapter: AuthEmailProvider;
|
|
45
|
+
accountTools: ToolModule[];
|
|
46
|
+
accountPrompts: PromptModule[];
|
|
47
|
+
dcrRouter?: Router;
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Create Drive OAuth adapters based on transport configuration
|
|
51
|
+
*
|
|
52
|
+
* Returns primary adapter (loopback or service account), pre-configured middleware,
|
|
53
|
+
* auth email provider, and pre-selected account tools based on auth mode.
|
|
54
|
+
*
|
|
55
|
+
* Primary adapter selection is based on auth mode:
|
|
56
|
+
* - 'loopback-oauth': LoopbackOAuthProvider (interactive OAuth with token storage)
|
|
57
|
+
* - 'service-account': ServiceAccountProvider (JWT-based authentication)
|
|
58
|
+
*
|
|
59
|
+
* @param config - Server configuration (transport + auth settings)
|
|
60
|
+
* @param deps - Runtime dependencies (logger, tokenStore, etc.)
|
|
61
|
+
* @returns OAuth adapters with pre-configured middleware and account tools
|
|
62
|
+
* @throws Error if service account mode but no key file provided
|
|
63
|
+
*/
|
|
64
|
+
export declare function createOAuthAdapters(config: ServerConfig, deps: OAuthRuntimeDeps, baseUrl?: string): Promise<OAuthAdapters>;
|
|
@@ -0,0 +1,168 @@
|
|
|
1
|
+
import { AccountServer } from '@mcp-z/oauth';
|
|
2
|
+
import { createDcrRouter, DcrOAuthProvider, LoopbackOAuthProvider, ServiceAccountProvider } from '@mcp-z/oauth-google';
|
|
3
|
+
import { GOOGLE_SCOPE } from '../constants.js';
|
|
4
|
+
/**
|
|
5
|
+
* Create Drive OAuth adapters based on transport configuration
|
|
6
|
+
*
|
|
7
|
+
* Returns primary adapter (loopback or service account), pre-configured middleware,
|
|
8
|
+
* auth email provider, and pre-selected account tools based on auth mode.
|
|
9
|
+
*
|
|
10
|
+
* Primary adapter selection is based on auth mode:
|
|
11
|
+
* - 'loopback-oauth': LoopbackOAuthProvider (interactive OAuth with token storage)
|
|
12
|
+
* - 'service-account': ServiceAccountProvider (JWT-based authentication)
|
|
13
|
+
*
|
|
14
|
+
* @param config - Server configuration (transport + auth settings)
|
|
15
|
+
* @param deps - Runtime dependencies (logger, tokenStore, etc.)
|
|
16
|
+
* @returns OAuth adapters with pre-configured middleware and account tools
|
|
17
|
+
* @throws Error if service account mode but no key file provided
|
|
18
|
+
*/ export async function createOAuthAdapters(config, deps, baseUrl) {
|
|
19
|
+
const { logger, tokenStore, dcrStore } = deps;
|
|
20
|
+
const resolvedBaseUrl = baseUrl !== null && baseUrl !== void 0 ? baseUrl : config.baseUrl;
|
|
21
|
+
const oauthStaticConfig = {
|
|
22
|
+
service: config.name,
|
|
23
|
+
clientId: config.clientId,
|
|
24
|
+
clientSecret: config.clientSecret,
|
|
25
|
+
scope: GOOGLE_SCOPE,
|
|
26
|
+
auth: config.auth,
|
|
27
|
+
headless: config.headless,
|
|
28
|
+
redirectUri: config.transport.type === 'stdio' ? undefined : config.redirectUri,
|
|
29
|
+
...config.serviceAccountKeyFile && {
|
|
30
|
+
serviceAccountKeyFile: config.serviceAccountKeyFile
|
|
31
|
+
},
|
|
32
|
+
...resolvedBaseUrl && {
|
|
33
|
+
baseUrl: resolvedBaseUrl
|
|
34
|
+
}
|
|
35
|
+
};
|
|
36
|
+
// Create primary adapter based on auth mode
|
|
37
|
+
let primary;
|
|
38
|
+
// DCR mode - Dynamic Client Registration with HTTP-only support
|
|
39
|
+
if (oauthStaticConfig.auth === 'dcr') {
|
|
40
|
+
logger.debug('Creating DCR provider', {
|
|
41
|
+
service: oauthStaticConfig.service
|
|
42
|
+
});
|
|
43
|
+
// DCR requires dcrStore and baseUrl
|
|
44
|
+
if (!dcrStore) {
|
|
45
|
+
throw new Error('DCR mode requires dcrStore to be configured');
|
|
46
|
+
}
|
|
47
|
+
if (!oauthStaticConfig.baseUrl) {
|
|
48
|
+
throw new Error('DCR mode requires baseUrl to be configured');
|
|
49
|
+
}
|
|
50
|
+
// Create DcrOAuthProvider (stateless provider that receives tokens from verification context)
|
|
51
|
+
primary = new DcrOAuthProvider({
|
|
52
|
+
clientId: oauthStaticConfig.clientId,
|
|
53
|
+
...oauthStaticConfig.clientSecret && {
|
|
54
|
+
clientSecret: oauthStaticConfig.clientSecret
|
|
55
|
+
},
|
|
56
|
+
scope: oauthStaticConfig.scope,
|
|
57
|
+
verifyEndpoint: `${oauthStaticConfig.baseUrl}/oauth/verify`,
|
|
58
|
+
logger
|
|
59
|
+
});
|
|
60
|
+
// Create DCR OAuth router with authorization server endpoints
|
|
61
|
+
const dcrRouter = createDcrRouter({
|
|
62
|
+
store: dcrStore,
|
|
63
|
+
issuerUrl: oauthStaticConfig.baseUrl,
|
|
64
|
+
baseUrl: oauthStaticConfig.baseUrl,
|
|
65
|
+
scopesSupported: oauthStaticConfig.scope.split(' '),
|
|
66
|
+
clientConfig: {
|
|
67
|
+
clientId: oauthStaticConfig.clientId,
|
|
68
|
+
...oauthStaticConfig.clientSecret && {
|
|
69
|
+
clientSecret: oauthStaticConfig.clientSecret
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
});
|
|
73
|
+
// DCR uses bearer token authentication with middleware validation
|
|
74
|
+
const middleware = primary.authMiddleware();
|
|
75
|
+
// Create auth email provider (stateless)
|
|
76
|
+
const authAdapter = {
|
|
77
|
+
getUserEmail: ()=>{
|
|
78
|
+
throw new Error('DCR mode does not support getUserEmail - tokens are provided via bearer auth');
|
|
79
|
+
}
|
|
80
|
+
};
|
|
81
|
+
// No account management tools for DCR
|
|
82
|
+
const accountTools = [];
|
|
83
|
+
const accountPrompts = [];
|
|
84
|
+
return {
|
|
85
|
+
primary,
|
|
86
|
+
middleware: middleware,
|
|
87
|
+
authAdapter,
|
|
88
|
+
accountTools,
|
|
89
|
+
accountPrompts,
|
|
90
|
+
dcrRouter
|
|
91
|
+
};
|
|
92
|
+
}
|
|
93
|
+
if (config.auth === 'service-account') {
|
|
94
|
+
// Service account mode - JWT-based authentication
|
|
95
|
+
if (!oauthStaticConfig.serviceAccountKeyFile) {
|
|
96
|
+
throw new Error('Service account key file is required when auth mode is "service-account". ' + 'Set GOOGLE_SERVICE_ACCOUNT_KEY_FILE environment variable or use --service-account-key-file flag.');
|
|
97
|
+
}
|
|
98
|
+
logger.debug('Creating service account provider', {
|
|
99
|
+
service: oauthStaticConfig.service
|
|
100
|
+
});
|
|
101
|
+
primary = new ServiceAccountProvider({
|
|
102
|
+
keyFilePath: oauthStaticConfig.serviceAccountKeyFile,
|
|
103
|
+
scopes: oauthStaticConfig.scope.split(' '),
|
|
104
|
+
logger
|
|
105
|
+
});
|
|
106
|
+
} else {
|
|
107
|
+
// Loopback mode - interactive OAuth with token storage
|
|
108
|
+
logger.debug('Creating loopback OAuth provider', {
|
|
109
|
+
service: oauthStaticConfig.service
|
|
110
|
+
});
|
|
111
|
+
primary = new LoopbackOAuthProvider({
|
|
112
|
+
service: oauthStaticConfig.service,
|
|
113
|
+
clientId: oauthStaticConfig.clientId,
|
|
114
|
+
clientSecret: oauthStaticConfig.clientSecret,
|
|
115
|
+
scope: oauthStaticConfig.scope,
|
|
116
|
+
headless: oauthStaticConfig.headless,
|
|
117
|
+
logger,
|
|
118
|
+
tokenStore,
|
|
119
|
+
...oauthStaticConfig.redirectUri !== undefined && {
|
|
120
|
+
redirectUri: oauthStaticConfig.redirectUri
|
|
121
|
+
}
|
|
122
|
+
});
|
|
123
|
+
}
|
|
124
|
+
// Create auth email provider (used by account management tools)
|
|
125
|
+
const authAdapter = {
|
|
126
|
+
getUserEmail: (accountId)=>primary.getUserEmail(accountId),
|
|
127
|
+
...'authenticateNewAccount' in primary && primary.authenticateNewAccount ? {
|
|
128
|
+
authenticateNewAccount: ()=>{
|
|
129
|
+
var _primary_authenticateNewAccount;
|
|
130
|
+
return (_primary_authenticateNewAccount = primary.authenticateNewAccount) === null || _primary_authenticateNewAccount === void 0 ? void 0 : _primary_authenticateNewAccount.call(primary);
|
|
131
|
+
}
|
|
132
|
+
} : {}
|
|
133
|
+
};
|
|
134
|
+
// Select middleware AND account tools based on auth mode
|
|
135
|
+
let middleware;
|
|
136
|
+
let accountTools;
|
|
137
|
+
let accountPrompts;
|
|
138
|
+
if (oauthStaticConfig.auth === 'service-account') {
|
|
139
|
+
// Service account mode - no account management tools needed (single identity)
|
|
140
|
+
middleware = primary.authMiddleware();
|
|
141
|
+
accountTools = [];
|
|
142
|
+
accountPrompts = [];
|
|
143
|
+
logger.debug('Service account mode - no account tools', {
|
|
144
|
+
service: oauthStaticConfig.service
|
|
145
|
+
});
|
|
146
|
+
} else {
|
|
147
|
+
// Loopback OAuth - multi-account mode
|
|
148
|
+
middleware = primary.authMiddleware();
|
|
149
|
+
const result = AccountServer.createLoopback({
|
|
150
|
+
service: oauthStaticConfig.service,
|
|
151
|
+
store: tokenStore,
|
|
152
|
+
logger,
|
|
153
|
+
auth: authAdapter
|
|
154
|
+
});
|
|
155
|
+
accountTools = result.tools;
|
|
156
|
+
accountPrompts = result.prompts;
|
|
157
|
+
logger.debug('Loopback OAuth (multi-account mode)', {
|
|
158
|
+
service: oauthStaticConfig.service
|
|
159
|
+
});
|
|
160
|
+
}
|
|
161
|
+
return {
|
|
162
|
+
primary,
|
|
163
|
+
middleware: middleware,
|
|
164
|
+
authAdapter,
|
|
165
|
+
accountTools,
|
|
166
|
+
accountPrompts
|
|
167
|
+
};
|
|
168
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["/Users/kevin/Dev/Projects/ai/mcp-z/servers/mcp-drive/src/setup/oauth-google.ts"],"sourcesContent":["import { AccountServer, type AuthEmailProvider } from '@mcp-z/oauth';\nimport type { CachedToken } from '@mcp-z/oauth-google';\nimport { createDcrRouter, DcrOAuthProvider, LoopbackOAuthProvider, ServiceAccountProvider } from '@mcp-z/oauth-google';\nimport type { Logger, PromptModule, ToolModule } from '@mcp-z/server';\nimport type { Router } from 'express';\nimport type { Keyv } from 'keyv';\nimport { GOOGLE_SCOPE } from '../constants.ts';\nimport type { ServerConfig } from '../types.js';\n\n/**\n * Drive OAuth runtime dependencies\n */\nexport interface OAuthRuntimeDeps {\n logger: Logger;\n tokenStore: Keyv<CachedToken>;\n dcrStore?: Keyv<unknown>;\n}\n\n/**\n * Auth middleware wrapper with withToolAuth/withResourceAuth/withPromptAuth methods\n * Uses structural constraints to avoid contravariance issues with handler types.\n */\nexport interface AuthMiddleware {\n withToolAuth<T extends { name: string; config: unknown; handler: unknown }>(module: T): T;\n withResourceAuth<T extends { name: string; template?: unknown; config?: unknown; handler: unknown }>(module: T): T;\n withPromptAuth<T extends { name: string; config: unknown; handler: unknown }>(module: T): T;\n}\n\n/**\n * Result of OAuth adapter creation\n */\nexport interface OAuthAdapters {\n primary: LoopbackOAuthProvider | ServiceAccountProvider | DcrOAuthProvider;\n middleware: AuthMiddleware;\n authAdapter: AuthEmailProvider;\n accountTools: ToolModule[];\n accountPrompts: PromptModule[];\n dcrRouter?: Router;\n}\n\n/**\n * Create Drive OAuth adapters based on transport configuration\n *\n * Returns primary adapter (loopback or service account), pre-configured middleware,\n * auth email provider, and pre-selected account tools based on auth mode.\n *\n * Primary adapter selection is based on auth mode:\n * - 'loopback-oauth': LoopbackOAuthProvider (interactive OAuth with token storage)\n * - 'service-account': ServiceAccountProvider (JWT-based authentication)\n *\n * @param config - Server configuration (transport + auth settings)\n * @param deps - Runtime dependencies (logger, tokenStore, etc.)\n * @returns OAuth adapters with pre-configured middleware and account tools\n * @throws Error if service account mode but no key file provided\n */\nexport async function createOAuthAdapters(config: ServerConfig, deps: OAuthRuntimeDeps, baseUrl?: string): Promise<OAuthAdapters> {\n const { logger, tokenStore, dcrStore } = deps;\n const resolvedBaseUrl = baseUrl ?? config.baseUrl;\n const oauthStaticConfig = {\n service: config.name,\n clientId: config.clientId,\n clientSecret: config.clientSecret,\n scope: GOOGLE_SCOPE,\n auth: config.auth,\n headless: config.headless,\n redirectUri: config.transport.type === 'stdio' ? undefined : config.redirectUri,\n ...(config.serviceAccountKeyFile && { serviceAccountKeyFile: config.serviceAccountKeyFile }),\n ...(resolvedBaseUrl && { baseUrl: resolvedBaseUrl }),\n };\n\n // Create primary adapter based on auth mode\n let primary: LoopbackOAuthProvider | ServiceAccountProvider | DcrOAuthProvider;\n\n // DCR mode - Dynamic Client Registration with HTTP-only support\n if (oauthStaticConfig.auth === 'dcr') {\n logger.debug('Creating DCR provider', { service: oauthStaticConfig.service });\n\n // DCR requires dcrStore and baseUrl\n if (!dcrStore) {\n throw new Error('DCR mode requires dcrStore to be configured');\n }\n if (!oauthStaticConfig.baseUrl) {\n throw new Error('DCR mode requires baseUrl to be configured');\n }\n\n // Create DcrOAuthProvider (stateless provider that receives tokens from verification context)\n primary = new DcrOAuthProvider({\n clientId: oauthStaticConfig.clientId,\n ...(oauthStaticConfig.clientSecret && { clientSecret: oauthStaticConfig.clientSecret }),\n scope: oauthStaticConfig.scope,\n verifyEndpoint: `${oauthStaticConfig.baseUrl}/oauth/verify`,\n logger,\n });\n\n // Create DCR OAuth router with authorization server endpoints\n const dcrRouter = createDcrRouter({\n store: dcrStore,\n issuerUrl: oauthStaticConfig.baseUrl,\n baseUrl: oauthStaticConfig.baseUrl,\n scopesSupported: oauthStaticConfig.scope.split(' '),\n clientConfig: {\n clientId: oauthStaticConfig.clientId,\n ...(oauthStaticConfig.clientSecret && { clientSecret: oauthStaticConfig.clientSecret }),\n },\n });\n\n // DCR uses bearer token authentication with middleware validation\n const middleware = primary.authMiddleware();\n\n // Create auth email provider (stateless)\n const authAdapter: AuthEmailProvider = {\n getUserEmail: () => {\n throw new Error('DCR mode does not support getUserEmail - tokens are provided via bearer auth');\n },\n };\n\n // No account management tools for DCR\n const accountTools: ToolModule[] = [];\n const accountPrompts: PromptModule[] = [];\n\n return { primary, middleware: middleware as unknown as AuthMiddleware, authAdapter, accountTools, accountPrompts, dcrRouter };\n }\n\n if (config.auth === 'service-account') {\n // Service account mode - JWT-based authentication\n if (!oauthStaticConfig.serviceAccountKeyFile) {\n throw new Error('Service account key file is required when auth mode is \"service-account\". ' + 'Set GOOGLE_SERVICE_ACCOUNT_KEY_FILE environment variable or use --service-account-key-file flag.');\n }\n\n logger.debug('Creating service account provider', { service: oauthStaticConfig.service });\n primary = new ServiceAccountProvider({\n keyFilePath: oauthStaticConfig.serviceAccountKeyFile,\n scopes: oauthStaticConfig.scope.split(' '),\n logger,\n });\n } else {\n // Loopback mode - interactive OAuth with token storage\n logger.debug('Creating loopback OAuth provider', { service: oauthStaticConfig.service });\n primary = new LoopbackOAuthProvider({\n service: oauthStaticConfig.service,\n clientId: oauthStaticConfig.clientId,\n clientSecret: oauthStaticConfig.clientSecret,\n scope: oauthStaticConfig.scope,\n headless: oauthStaticConfig.headless,\n logger,\n tokenStore,\n ...(oauthStaticConfig.redirectUri !== undefined && {\n redirectUri: oauthStaticConfig.redirectUri,\n }),\n });\n }\n\n // Create auth email provider (used by account management tools)\n const authAdapter: AuthEmailProvider = {\n getUserEmail: (accountId) => primary.getUserEmail(accountId),\n ...('authenticateNewAccount' in primary && primary.authenticateNewAccount\n ? {\n authenticateNewAccount: () => primary.authenticateNewAccount?.(),\n }\n : {}),\n };\n\n // Select middleware AND account tools based on auth mode\n let middleware: ReturnType<LoopbackOAuthProvider['authMiddleware']>;\n let accountTools: ToolModule[];\n let accountPrompts: PromptModule[];\n\n if (oauthStaticConfig.auth === 'service-account') {\n // Service account mode - no account management tools needed (single identity)\n middleware = primary.authMiddleware();\n accountTools = [];\n accountPrompts = [];\n logger.debug('Service account mode - no account tools', { service: oauthStaticConfig.service });\n } else {\n // Loopback OAuth - multi-account mode\n middleware = primary.authMiddleware();\n\n const result = AccountServer.createLoopback({\n service: oauthStaticConfig.service,\n store: tokenStore,\n logger,\n auth: authAdapter,\n });\n accountTools = result.tools as ToolModule[];\n accountPrompts = result.prompts as PromptModule[];\n logger.debug('Loopback OAuth (multi-account mode)', { service: oauthStaticConfig.service });\n }\n\n return { primary, middleware: middleware as unknown as AuthMiddleware, authAdapter, accountTools, accountPrompts };\n}\n"],"names":["AccountServer","createDcrRouter","DcrOAuthProvider","LoopbackOAuthProvider","ServiceAccountProvider","GOOGLE_SCOPE","createOAuthAdapters","config","deps","baseUrl","logger","tokenStore","dcrStore","resolvedBaseUrl","oauthStaticConfig","service","name","clientId","clientSecret","scope","auth","headless","redirectUri","transport","type","undefined","serviceAccountKeyFile","primary","debug","Error","verifyEndpoint","dcrRouter","store","issuerUrl","scopesSupported","split","clientConfig","middleware","authMiddleware","authAdapter","getUserEmail","accountTools","accountPrompts","keyFilePath","scopes","accountId","authenticateNewAccount","result","createLoopback","tools","prompts"],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { CachedToken } from '@mcp-z/oauth-google';
|
|
2
|
+
import type { Logger, MiddlewareLayer } from '@mcp-z/server';
|
|
3
|
+
import type { CommonRuntime, RuntimeOverrides, ServerConfig } from '../types.js';
|
|
4
|
+
import { type AuthMiddleware } from './oauth-google.js';
|
|
5
|
+
export declare function createLogger(config: ServerConfig): Logger;
|
|
6
|
+
export declare function createTokenStore(baseDir: string): Promise<import("keyv").Keyv<CachedToken>>;
|
|
7
|
+
export declare function createDcrStore(baseDir: string, required: boolean): Promise<import("keyv").Keyv<unknown>>;
|
|
8
|
+
export declare function createAuthLayer(authMiddleware: AuthMiddleware): MiddlewareLayer;
|
|
9
|
+
export declare function createLoggingLayer(logger: Logger): MiddlewareLayer;
|
|
10
|
+
export declare function createDefaultRuntime(config: ServerConfig, overrides?: RuntimeOverrides): Promise<CommonRuntime>;
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
import { sanitizeForLoggingFormatter } from '@mcp-z/oauth';
|
|
2
|
+
import { createLoggingMiddleware } from '@mcp-z/server';
|
|
3
|
+
import * as fs from 'fs';
|
|
4
|
+
import * as path from 'path';
|
|
5
|
+
import pino from 'pino';
|
|
6
|
+
import createStore from '../lib/create-store.js';
|
|
7
|
+
import * as mcp from '../mcp/index.js';
|
|
8
|
+
import { createOAuthAdapters } from './oauth-google.js';
|
|
9
|
+
export function createLogger(config) {
|
|
10
|
+
var _config_logLevel;
|
|
11
|
+
const hasStdio = config.transport.type === 'stdio';
|
|
12
|
+
const logsPath = path.join(config.baseDir, 'logs', `${config.name}.log`);
|
|
13
|
+
if (hasStdio) fs.mkdirSync(path.dirname(logsPath), {
|
|
14
|
+
recursive: true
|
|
15
|
+
});
|
|
16
|
+
return pino({
|
|
17
|
+
level: (_config_logLevel = config.logLevel) !== null && _config_logLevel !== void 0 ? _config_logLevel : 'info',
|
|
18
|
+
formatters: sanitizeForLoggingFormatter()
|
|
19
|
+
}, hasStdio ? pino.destination({
|
|
20
|
+
dest: logsPath,
|
|
21
|
+
sync: false
|
|
22
|
+
}) : pino.destination(1));
|
|
23
|
+
}
|
|
24
|
+
export async function createTokenStore(baseDir) {
|
|
25
|
+
const storeUri = process.env.STORE_URI || `file://${path.join(baseDir, 'tokens.json')}`;
|
|
26
|
+
return createStore(storeUri);
|
|
27
|
+
}
|
|
28
|
+
export async function createDcrStore(baseDir, required) {
|
|
29
|
+
if (!required) return undefined;
|
|
30
|
+
const dcrStoreUri = process.env.DCR_STORE_URI || `file://${path.join(baseDir, 'dcr.json')}`;
|
|
31
|
+
return createStore(dcrStoreUri);
|
|
32
|
+
}
|
|
33
|
+
export function createAuthLayer(authMiddleware) {
|
|
34
|
+
return {
|
|
35
|
+
withTool: authMiddleware.withToolAuth,
|
|
36
|
+
withResource: authMiddleware.withResourceAuth,
|
|
37
|
+
withPrompt: authMiddleware.withPromptAuth
|
|
38
|
+
};
|
|
39
|
+
}
|
|
40
|
+
export function createLoggingLayer(logger) {
|
|
41
|
+
const logging = createLoggingMiddleware({
|
|
42
|
+
logger
|
|
43
|
+
});
|
|
44
|
+
return {
|
|
45
|
+
withTool: logging.withToolLogging,
|
|
46
|
+
withResource: logging.withResourceLogging,
|
|
47
|
+
withPrompt: logging.withPromptLogging
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
export async function createDefaultRuntime(config, overrides) {
|
|
51
|
+
var _config_baseUrl, _ref, _ref1;
|
|
52
|
+
if (config.auth === 'dcr' && config.transport.type !== 'http') throw new Error('DCR mode requires an HTTP transport');
|
|
53
|
+
const logger = createLogger(config);
|
|
54
|
+
const tokenStore = await createTokenStore(config.baseDir);
|
|
55
|
+
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;
|
|
56
|
+
const dcrStore = await createDcrStore(config.baseDir, config.auth === 'dcr');
|
|
57
|
+
const oauthAdapters = await createOAuthAdapters(config, {
|
|
58
|
+
logger,
|
|
59
|
+
tokenStore,
|
|
60
|
+
dcrStore
|
|
61
|
+
}, baseUrl);
|
|
62
|
+
const deps = {
|
|
63
|
+
config,
|
|
64
|
+
logger,
|
|
65
|
+
tokenStore,
|
|
66
|
+
oauthAdapters,
|
|
67
|
+
baseUrl
|
|
68
|
+
};
|
|
69
|
+
const createDomainModules = (_ref = overrides === null || overrides === void 0 ? void 0 : overrides.createDomainModules) !== null && _ref !== void 0 ? _ref : ()=>({
|
|
70
|
+
tools: Object.values(mcp.toolFactories).map((factory)=>factory()),
|
|
71
|
+
resources: Object.values(mcp.resourceFactories).map((factory)=>factory()),
|
|
72
|
+
prompts: Object.values(mcp.promptFactories).map((factory)=>factory())
|
|
73
|
+
});
|
|
74
|
+
const middlewareFactories = (_ref1 = overrides === null || overrides === void 0 ? void 0 : overrides.middlewareFactories) !== null && _ref1 !== void 0 ? _ref1 : [
|
|
75
|
+
()=>createAuthLayer(oauthAdapters.middleware),
|
|
76
|
+
()=>createLoggingLayer(logger)
|
|
77
|
+
];
|
|
78
|
+
return {
|
|
79
|
+
deps,
|
|
80
|
+
middlewareFactories,
|
|
81
|
+
createDomainModules,
|
|
82
|
+
close: async ()=>{}
|
|
83
|
+
};
|
|
84
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["/Users/kevin/Dev/Projects/ai/mcp-z/servers/mcp-drive/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.js';\nimport * as mcp from '../mcp/index.js';\nimport type { CommonRuntime, RuntimeDeps, RuntimeOverrides, ServerConfig } from '../types.js';\nimport { type AuthMiddleware, createOAuthAdapters } from './oauth-google.js';\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 storeUri = process.env.STORE_URI || `file://${path.join(baseDir, 'tokens.json')}`;\n return createStore<CachedToken>(storeUri);\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: AuthMiddleware): 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 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 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)];\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","storeUri","process","env","STORE_URI","createDcrStore","required","undefined","dcrStoreUri","DCR_STORE_URI","createAuthLayer","authMiddleware","withTool","withToolAuth","withResource","withResourceAuth","withPrompt","withPromptAuth","createLoggingLayer","logger","logging","withToolLogging","withResourceLogging","withPromptLogging","createDefaultRuntime","overrides","auth","Error","tokenStore","baseUrl","port","dcrStore","oauthAdapters","deps","createDomainModules","tools","Object","values","toolFactories","map","factory","resources","resourceFactories","prompts","promptFactories","middlewareFactories","middleware","close"],"mappings":"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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
|
|
2
|
+
import type { RuntimeOverrides, ServerConfig } from '../types.js';
|
|
3
|
+
export declare function createStdioServer(config: ServerConfig, overrides?: RuntimeOverrides): Promise<{
|
|
4
|
+
mcpServer: McpServer;
|
|
5
|
+
logger: import("@mcp-z/server").Logger;
|
|
6
|
+
close: () => Promise<void>;
|
|
7
|
+
}>;
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { composeMiddleware, connectStdio, registerPrompts, registerResources, registerTools } from '@mcp-z/server';
|
|
2
|
+
import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
|
|
3
|
+
import { createDefaultRuntime } from './runtime.js';
|
|
4
|
+
export async function createStdioServer(config, overrides) {
|
|
5
|
+
const runtime = await createDefaultRuntime(config, overrides);
|
|
6
|
+
const modules = runtime.createDomainModules();
|
|
7
|
+
const layers = runtime.middlewareFactories.map((factory)=>factory(runtime.deps));
|
|
8
|
+
const composed = composeMiddleware(modules, layers);
|
|
9
|
+
const logger = runtime.deps.logger;
|
|
10
|
+
const tools = [
|
|
11
|
+
...composed.tools,
|
|
12
|
+
...runtime.deps.oauthAdapters.accountTools
|
|
13
|
+
];
|
|
14
|
+
const prompts = [
|
|
15
|
+
...composed.prompts,
|
|
16
|
+
...runtime.deps.oauthAdapters.accountPrompts
|
|
17
|
+
];
|
|
18
|
+
const mcpServer = new McpServer({
|
|
19
|
+
name: config.name,
|
|
20
|
+
version: config.version
|
|
21
|
+
});
|
|
22
|
+
registerTools(mcpServer, tools);
|
|
23
|
+
registerResources(mcpServer, composed.resources);
|
|
24
|
+
registerPrompts(mcpServer, prompts);
|
|
25
|
+
logger.info(`Starting ${config.name} MCP server (stdio)`);
|
|
26
|
+
const { close } = await connectStdio(mcpServer, {
|
|
27
|
+
logger
|
|
28
|
+
});
|
|
29
|
+
logger.info('stdio transport ready');
|
|
30
|
+
return {
|
|
31
|
+
mcpServer,
|
|
32
|
+
logger,
|
|
33
|
+
close: async ()=>{
|
|
34
|
+
await close();
|
|
35
|
+
await runtime.close();
|
|
36
|
+
}
|
|
37
|
+
};
|
|
38
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["/Users/kevin/Dev/Projects/ai/mcp-z/servers/mcp-drive/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.js';\nimport { createDefaultRuntime } from './runtime.js';\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, tools);\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","prompts","accountPrompts","mcpServer","name","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,UAAU;WAAIL,SAASK,OAAO;WAAKb,QAAQO,IAAI,CAACI,aAAa,CAACG,cAAc;KAAC;IAEnF,MAAMC,YAAY,IAAIpB,UAAU;QAAEqB,MAAMlB,OAAOkB,IAAI;QAAEC,SAASnB,OAAOmB,OAAO;IAAC;IAC7EvB,cAAcqB,WAAWL;IACzBjB,kBAAkBsB,WAAWP,SAASU,SAAS;IAC/C1B,gBAAgBuB,WAAWF;IAE3BJ,OAAOU,IAAI,CAAC,CAAC,SAAS,EAAErB,OAAOkB,IAAI,CAAC,mBAAmB,CAAC;IACxD,MAAM,EAAEI,KAAK,EAAE,GAAG,MAAM7B,aAAawB,WAAW;QAAEN;IAAO;IACzDA,OAAOU,IAAI,CAAC;IAEZ,OAAO;QACLJ;QACAN;QACAW,OAAO;YACL,MAAMA;YACN,MAAMpB,QAAQoB,KAAK;QACrB;IACF;AACF"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import type { CachedToken, DcrConfig, OAuthConfig } from '@mcp-z/oauth-google';
|
|
2
|
+
import type { BaseServerConfig, MiddlewareLayer, PromptModule, ResourceModule, Logger as ServerLogger, ToolModule } from '@mcp-z/server';
|
|
3
|
+
import type { Keyv } from 'keyv';
|
|
4
|
+
import type { OAuthAdapters } from './setup/oauth-google.js';
|
|
5
|
+
export type Logger = Pick<Console, 'info' | 'error' | 'warn' | 'debug'>;
|
|
6
|
+
/**
|
|
7
|
+
* Composes transport config, OAuth config, and application-level config
|
|
8
|
+
*/
|
|
9
|
+
export interface ServerConfig extends BaseServerConfig, OAuthConfig {
|
|
10
|
+
logLevel: string;
|
|
11
|
+
baseDir: string;
|
|
12
|
+
name: string;
|
|
13
|
+
version: string;
|
|
14
|
+
repositoryUrl: string;
|
|
15
|
+
baseUrl?: string;
|
|
16
|
+
dcrConfig?: DcrConfig;
|
|
17
|
+
}
|
|
18
|
+
/** Runtime dependencies exposed to middleware/factories. */
|
|
19
|
+
export interface RuntimeDeps {
|
|
20
|
+
config: ServerConfig;
|
|
21
|
+
logger: ServerLogger;
|
|
22
|
+
tokenStore: Keyv<CachedToken>;
|
|
23
|
+
oauthAdapters: OAuthAdapters;
|
|
24
|
+
baseUrl?: string;
|
|
25
|
+
}
|
|
26
|
+
/** Collections of MCP modules produced by domain factories. */
|
|
27
|
+
export type DomainModules = {
|
|
28
|
+
tools: ToolModule[];
|
|
29
|
+
resources: ResourceModule[];
|
|
30
|
+
prompts: PromptModule[];
|
|
31
|
+
};
|
|
32
|
+
/** Factory that produces a middleware layer given runtime dependencies. */
|
|
33
|
+
export type MiddlewareFactory = (deps: RuntimeDeps) => MiddlewareLayer;
|
|
34
|
+
/** Shared runtime configuration returned by `createDefaultRuntime`. */
|
|
35
|
+
export interface CommonRuntime {
|
|
36
|
+
deps: RuntimeDeps;
|
|
37
|
+
middlewareFactories: MiddlewareFactory[];
|
|
38
|
+
createDomainModules: () => DomainModules;
|
|
39
|
+
close: () => Promise<void>;
|
|
40
|
+
}
|
|
41
|
+
export interface RuntimeOverrides {
|
|
42
|
+
middlewareFactories?: MiddlewareFactory[];
|
|
43
|
+
createDomainModules?: () => DomainModules;
|
|
44
|
+
}
|
|
45
|
+
export type { DriveFile, DriveQuery, DriveQueryObject, FieldOperator } from './schemas/index.js';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["/Users/kevin/Dev/Projects/ai/mcp-z/servers/mcp-drive/src/types.ts"],"sourcesContent":["import type { CachedToken, DcrConfig, OAuthConfig } from '@mcp-z/oauth-google';\nimport type { BaseServerConfig, MiddlewareLayer, PromptModule, ResourceModule, Logger as ServerLogger, ToolModule } from '@mcp-z/server';\nimport type { Keyv } from 'keyv';\nimport type { OAuthAdapters } from './setup/oauth-google.js';\n\nexport type Logger = Pick<Console, 'info' | 'error' | 'warn' | 'debug'>;\n\n/**\n * Composes transport config, OAuth config, and application-level config\n */\nexport interface ServerConfig extends BaseServerConfig, OAuthConfig {\n logLevel: string;\n baseDir: string;\n name: string;\n version: string;\n repositoryUrl: string;\n baseUrl?: string;\n\n // DCR configuration (when auth === 'dcr')\n dcrConfig?: DcrConfig;\n}\n\n/** Runtime dependencies exposed to middleware/factories. */\nexport interface RuntimeDeps {\n config: ServerConfig;\n logger: ServerLogger;\n tokenStore: Keyv<CachedToken>;\n oauthAdapters: OAuthAdapters;\n baseUrl?: string;\n}\n\n/** Collections of MCP modules produced by domain factories. */\nexport type DomainModules = {\n tools: ToolModule[];\n resources: ResourceModule[];\n prompts: PromptModule[];\n};\n\n/** Factory that produces a middleware layer given runtime dependencies. */\nexport type MiddlewareFactory = (deps: RuntimeDeps) => MiddlewareLayer;\n\n/** Shared runtime configuration returned by `createDefaultRuntime`. */\nexport interface CommonRuntime {\n deps: RuntimeDeps;\n middlewareFactories: MiddlewareFactory[];\n createDomainModules: () => DomainModules;\n close: () => Promise<void>;\n}\n\nexport interface RuntimeOverrides {\n middlewareFactories?: MiddlewareFactory[];\n createDomainModules?: () => DomainModules;\n}\n\nexport type { DriveFile, DriveQuery, DriveQueryObject, FieldOperator } from './schemas/index.js';\n"],"names":[],"mappings":"AAsDA,WAAiG"}
|