@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.
Files changed (202) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +163 -0
  3. package/bin/server.js +5 -0
  4. package/dist/cjs/constants.d.cts +7 -0
  5. package/dist/cjs/constants.d.ts +7 -0
  6. package/dist/cjs/constants.js +18 -0
  7. package/dist/cjs/constants.js.map +1 -0
  8. package/dist/cjs/index.d.cts +8 -0
  9. package/dist/cjs/index.d.ts +8 -0
  10. package/dist/cjs/index.js +314 -0
  11. package/dist/cjs/index.js.map +1 -0
  12. package/dist/cjs/lib/create-store.d.cts +2 -0
  13. package/dist/cjs/lib/create-store.d.ts +2 -0
  14. package/dist/cjs/lib/create-store.js +166 -0
  15. package/dist/cjs/lib/create-store.js.map +1 -0
  16. package/dist/cjs/lib/query-builder.d.cts +45 -0
  17. package/dist/cjs/lib/query-builder.d.ts +45 -0
  18. package/dist/cjs/lib/query-builder.js +219 -0
  19. package/dist/cjs/lib/query-builder.js.map +1 -0
  20. package/dist/cjs/mcp/index.d.cts +3 -0
  21. package/dist/cjs/mcp/index.d.ts +3 -0
  22. package/dist/cjs/mcp/index.js +66 -0
  23. package/dist/cjs/mcp/index.js.map +1 -0
  24. package/dist/cjs/mcp/prompts/index.d.cts +2 -0
  25. package/dist/cjs/mcp/prompts/index.d.ts +2 -0
  26. package/dist/cjs/mcp/prompts/index.js +26 -0
  27. package/dist/cjs/mcp/prompts/index.js.map +1 -0
  28. package/dist/cjs/mcp/prompts/organize-files.d.cts +16 -0
  29. package/dist/cjs/mcp/prompts/organize-files.d.ts +16 -0
  30. package/dist/cjs/mcp/prompts/organize-files.js +169 -0
  31. package/dist/cjs/mcp/prompts/organize-files.js.map +1 -0
  32. package/dist/cjs/mcp/prompts/query-syntax.d.cts +19 -0
  33. package/dist/cjs/mcp/prompts/query-syntax.d.ts +19 -0
  34. package/dist/cjs/mcp/prompts/query-syntax.js +169 -0
  35. package/dist/cjs/mcp/prompts/query-syntax.js.map +1 -0
  36. package/dist/cjs/mcp/resources/file.d.cts +9 -0
  37. package/dist/cjs/mcp/resources/file.d.ts +9 -0
  38. package/dist/cjs/mcp/resources/file.js +247 -0
  39. package/dist/cjs/mcp/resources/file.js.map +1 -0
  40. package/dist/cjs/mcp/resources/index.d.cts +1 -0
  41. package/dist/cjs/mcp/resources/index.d.ts +1 -0
  42. package/dist/cjs/mcp/resources/index.js +17 -0
  43. package/dist/cjs/mcp/resources/index.js.map +1 -0
  44. package/dist/cjs/mcp/tools/file-move-to-trash.d.cts +59 -0
  45. package/dist/cjs/mcp/tools/file-move-to-trash.d.ts +59 -0
  46. package/dist/cjs/mcp/tools/file-move-to-trash.js +334 -0
  47. package/dist/cjs/mcp/tools/file-move-to-trash.js.map +1 -0
  48. package/dist/cjs/mcp/tools/file-move.d.cts +73 -0
  49. package/dist/cjs/mcp/tools/file-move.d.ts +73 -0
  50. package/dist/cjs/mcp/tools/file-move.js +613 -0
  51. package/dist/cjs/mcp/tools/file-move.js.map +1 -0
  52. package/dist/cjs/mcp/tools/files-search.d.cts +135 -0
  53. package/dist/cjs/mcp/tools/files-search.d.ts +135 -0
  54. package/dist/cjs/mcp/tools/files-search.js +558 -0
  55. package/dist/cjs/mcp/tools/files-search.js.map +1 -0
  56. package/dist/cjs/mcp/tools/folder-contents.d.cts +139 -0
  57. package/dist/cjs/mcp/tools/folder-contents.d.ts +139 -0
  58. package/dist/cjs/mcp/tools/folder-contents.js +513 -0
  59. package/dist/cjs/mcp/tools/folder-contents.js.map +1 -0
  60. package/dist/cjs/mcp/tools/folder-create.d.cts +59 -0
  61. package/dist/cjs/mcp/tools/folder-create.d.ts +59 -0
  62. package/dist/cjs/mcp/tools/folder-create.js +368 -0
  63. package/dist/cjs/mcp/tools/folder-create.js.map +1 -0
  64. package/dist/cjs/mcp/tools/folder-path.d.cts +49 -0
  65. package/dist/cjs/mcp/tools/folder-path.d.ts +49 -0
  66. package/dist/cjs/mcp/tools/folder-path.js +367 -0
  67. package/dist/cjs/mcp/tools/folder-path.js.map +1 -0
  68. package/dist/cjs/mcp/tools/folder-search.d.cts +139 -0
  69. package/dist/cjs/mcp/tools/folder-search.d.ts +139 -0
  70. package/dist/cjs/mcp/tools/folder-search.js +760 -0
  71. package/dist/cjs/mcp/tools/folder-search.js.map +1 -0
  72. package/dist/cjs/mcp/tools/index.d.cts +7 -0
  73. package/dist/cjs/mcp/tools/index.d.ts +7 -0
  74. package/dist/cjs/mcp/tools/index.js +46 -0
  75. package/dist/cjs/mcp/tools/index.js.map +1 -0
  76. package/dist/cjs/package.json +1 -0
  77. package/dist/cjs/schemas/drive-query-schema.d.cts +40 -0
  78. package/dist/cjs/schemas/drive-query-schema.d.ts +40 -0
  79. package/dist/cjs/schemas/drive-query-schema.js +90 -0
  80. package/dist/cjs/schemas/drive-query-schema.js.map +1 -0
  81. package/dist/cjs/schemas/drive-validation.d.cts +48 -0
  82. package/dist/cjs/schemas/drive-validation.d.ts +48 -0
  83. package/dist/cjs/schemas/drive-validation.js +96 -0
  84. package/dist/cjs/schemas/drive-validation.js.map +1 -0
  85. package/dist/cjs/schemas/index.d.cts +2 -0
  86. package/dist/cjs/schemas/index.d.ts +2 -0
  87. package/dist/cjs/schemas/index.js +20 -0
  88. package/dist/cjs/schemas/index.js.map +1 -0
  89. package/dist/cjs/setup/config.d.cts +44 -0
  90. package/dist/cjs/setup/config.d.ts +44 -0
  91. package/dist/cjs/setup/config.js +201 -0
  92. package/dist/cjs/setup/config.js.map +1 -0
  93. package/dist/cjs/setup/http.d.cts +8 -0
  94. package/dist/cjs/setup/http.d.ts +8 -0
  95. package/dist/cjs/setup/http.js +260 -0
  96. package/dist/cjs/setup/http.js.map +1 -0
  97. package/dist/cjs/setup/index.d.cts +5 -0
  98. package/dist/cjs/setup/index.d.ts +5 -0
  99. package/dist/cjs/setup/index.js +46 -0
  100. package/dist/cjs/setup/index.js.map +1 -0
  101. package/dist/cjs/setup/oauth-google.d.cts +64 -0
  102. package/dist/cjs/setup/oauth-google.d.ts +64 -0
  103. package/dist/cjs/setup/oauth-google.js +347 -0
  104. package/dist/cjs/setup/oauth-google.js.map +1 -0
  105. package/dist/cjs/setup/runtime.d.cts +10 -0
  106. package/dist/cjs/setup/runtime.d.ts +10 -0
  107. package/dist/cjs/setup/runtime.js +353 -0
  108. package/dist/cjs/setup/runtime.js.map +1 -0
  109. package/dist/cjs/setup/stdio.d.cts +7 -0
  110. package/dist/cjs/setup/stdio.d.ts +7 -0
  111. package/dist/cjs/setup/stdio.js +239 -0
  112. package/dist/cjs/setup/stdio.js.map +1 -0
  113. package/dist/cjs/types.d.cts +45 -0
  114. package/dist/cjs/types.d.ts +45 -0
  115. package/dist/cjs/types.js +5 -0
  116. package/dist/cjs/types.js.map +1 -0
  117. package/dist/esm/constants.d.ts +7 -0
  118. package/dist/esm/constants.js +7 -0
  119. package/dist/esm/constants.js.map +1 -0
  120. package/dist/esm/index.d.ts +8 -0
  121. package/dist/esm/index.js +34 -0
  122. package/dist/esm/index.js.map +1 -0
  123. package/dist/esm/lib/create-store.d.ts +2 -0
  124. package/dist/esm/lib/create-store.js +6 -0
  125. package/dist/esm/lib/create-store.js.map +1 -0
  126. package/dist/esm/lib/query-builder.d.ts +45 -0
  127. package/dist/esm/lib/query-builder.js +184 -0
  128. package/dist/esm/lib/query-builder.js.map +1 -0
  129. package/dist/esm/mcp/index.d.ts +3 -0
  130. package/dist/esm/mcp/index.js +6 -0
  131. package/dist/esm/mcp/index.js.map +1 -0
  132. package/dist/esm/mcp/prompts/index.d.ts +2 -0
  133. package/dist/esm/mcp/prompts/index.js +2 -0
  134. package/dist/esm/mcp/prompts/index.js.map +1 -0
  135. package/dist/esm/mcp/prompts/organize-files.d.ts +16 -0
  136. package/dist/esm/mcp/prompts/organize-files.js +21 -0
  137. package/dist/esm/mcp/prompts/organize-files.js.map +1 -0
  138. package/dist/esm/mcp/prompts/query-syntax.d.ts +19 -0
  139. package/dist/esm/mcp/prompts/query-syntax.js +82 -0
  140. package/dist/esm/mcp/prompts/query-syntax.js.map +1 -0
  141. package/dist/esm/mcp/resources/file.d.ts +9 -0
  142. package/dist/esm/mcp/resources/file.js +77 -0
  143. package/dist/esm/mcp/resources/file.js.map +1 -0
  144. package/dist/esm/mcp/resources/index.d.ts +1 -0
  145. package/dist/esm/mcp/resources/index.js +1 -0
  146. package/dist/esm/mcp/resources/index.js.map +1 -0
  147. package/dist/esm/mcp/tools/file-move-to-trash.d.ts +59 -0
  148. package/dist/esm/mcp/tools/file-move-to-trash.js +118 -0
  149. package/dist/esm/mcp/tools/file-move-to-trash.js.map +1 -0
  150. package/dist/esm/mcp/tools/file-move.d.ts +73 -0
  151. package/dist/esm/mcp/tools/file-move.js +274 -0
  152. package/dist/esm/mcp/tools/file-move.js.map +1 -0
  153. package/dist/esm/mcp/tools/files-search.d.ts +135 -0
  154. package/dist/esm/mcp/tools/files-search.js +254 -0
  155. package/dist/esm/mcp/tools/files-search.js.map +1 -0
  156. package/dist/esm/mcp/tools/folder-contents.d.ts +139 -0
  157. package/dist/esm/mcp/tools/folder-contents.js +214 -0
  158. package/dist/esm/mcp/tools/folder-contents.js.map +1 -0
  159. package/dist/esm/mcp/tools/folder-create.d.ts +59 -0
  160. package/dist/esm/mcp/tools/folder-create.js +140 -0
  161. package/dist/esm/mcp/tools/folder-create.js.map +1 -0
  162. package/dist/esm/mcp/tools/folder-path.d.ts +49 -0
  163. package/dist/esm/mcp/tools/folder-path.js +147 -0
  164. package/dist/esm/mcp/tools/folder-path.js.map +1 -0
  165. package/dist/esm/mcp/tools/folder-search.d.ts +139 -0
  166. package/dist/esm/mcp/tools/folder-search.js +343 -0
  167. package/dist/esm/mcp/tools/folder-search.js.map +1 -0
  168. package/dist/esm/mcp/tools/index.d.ts +7 -0
  169. package/dist/esm/mcp/tools/index.js +7 -0
  170. package/dist/esm/mcp/tools/index.js.map +1 -0
  171. package/dist/esm/package.json +1 -0
  172. package/dist/esm/schemas/drive-query-schema.d.ts +40 -0
  173. package/dist/esm/schemas/drive-query-schema.js +84 -0
  174. package/dist/esm/schemas/drive-query-schema.js.map +1 -0
  175. package/dist/esm/schemas/drive-validation.d.ts +48 -0
  176. package/dist/esm/schemas/drive-validation.js +73 -0
  177. package/dist/esm/schemas/drive-validation.js.map +1 -0
  178. package/dist/esm/schemas/index.d.ts +2 -0
  179. package/dist/esm/schemas/index.js +2 -0
  180. package/dist/esm/schemas/index.js.map +1 -0
  181. package/dist/esm/setup/config.d.ts +44 -0
  182. package/dist/esm/setup/config.js +151 -0
  183. package/dist/esm/setup/config.js.map +1 -0
  184. package/dist/esm/setup/http.d.ts +8 -0
  185. package/dist/esm/setup/http.js +54 -0
  186. package/dist/esm/setup/http.js.map +1 -0
  187. package/dist/esm/setup/index.d.ts +5 -0
  188. package/dist/esm/setup/index.js +5 -0
  189. package/dist/esm/setup/index.js.map +1 -0
  190. package/dist/esm/setup/oauth-google.d.ts +64 -0
  191. package/dist/esm/setup/oauth-google.js +168 -0
  192. package/dist/esm/setup/oauth-google.js.map +1 -0
  193. package/dist/esm/setup/runtime.d.ts +10 -0
  194. package/dist/esm/setup/runtime.js +84 -0
  195. package/dist/esm/setup/runtime.js.map +1 -0
  196. package/dist/esm/setup/stdio.d.ts +7 -0
  197. package/dist/esm/setup/stdio.js +38 -0
  198. package/dist/esm/setup/stdio.js.map +1 -0
  199. package/dist/esm/types.d.ts +45 -0
  200. package/dist/esm/types.js +1 -0
  201. package/dist/esm/types.js.map +1 -0
  202. 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,5 @@
1
+ export { createConfig, parseConfig } from './config.js';
2
+ export { createHTTPServer } from './http.js';
3
+ export { createOAuthAdapters } from './oauth-google.js';
4
+ export * from './runtime.js';
5
+ export { createStdioServer } from './stdio.js';
@@ -0,0 +1,5 @@
1
+ export { createConfig, parseConfig } from './config.js';
2
+ export { createHTTPServer } from './http.js';
3
+ export { createOAuthAdapters } from './oauth-google.js';
4
+ export * from './runtime.js';
5
+ export { createStdioServer } from './stdio.js';
@@ -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"}