@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,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,5 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", {
|
|
3
|
+
value: true
|
|
4
|
+
});
|
|
5
|
+
/* CJS INTEROP */ if (exports.__esModule && exports.default) { try { Object.defineProperty(exports.default, '__esModule', { value: true }); for (var key in exports) { exports.default[key] = exports[key]; } } catch (_) {}; module.exports = exports.default; }
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":[],"names":[],"mappings":""}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Drive MCP Server Constants
|
|
3
|
+
*
|
|
4
|
+
* These scopes are required for Google Drive functionality and are hardcoded
|
|
5
|
+
* rather than externally configured since this server knows its own requirements.
|
|
6
|
+
*/
|
|
7
|
+
export declare const GOOGLE_SCOPE = "openid https://www.googleapis.com/auth/userinfo.profile https://www.googleapis.com/auth/userinfo.email https://www.googleapis.com/auth/drive";
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Drive MCP Server Constants
|
|
3
|
+
*
|
|
4
|
+
* These scopes are required for Google Drive functionality and are hardcoded
|
|
5
|
+
* rather than externally configured since this server knows its own requirements.
|
|
6
|
+
*/ // Google OAuth scopes required for Drive operations
|
|
7
|
+
export const GOOGLE_SCOPE = 'openid https://www.googleapis.com/auth/userinfo.profile https://www.googleapis.com/auth/userinfo.email https://www.googleapis.com/auth/drive';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["/Users/kevin/Dev/Projects/ai/mcp-z/servers/mcp-drive/src/constants.ts"],"sourcesContent":["/**\n * Drive MCP Server Constants\n *\n * These scopes are required for Google Drive functionality and are hardcoded\n * rather than externally configured since this server knows its own requirements.\n */\n\n// Google OAuth scopes required for Drive operations\nexport const GOOGLE_SCOPE = 'openid https://www.googleapis.com/auth/userinfo.profile https://www.googleapis.com/auth/userinfo.email https://www.googleapis.com/auth/drive';\n"],"names":["GOOGLE_SCOPE"],"mappings":"AAAA;;;;;CAKC,GAED,oDAAoD;AACpD,OAAO,MAAMA,eAAe,+IAA+I"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { ServerConfig } from './types.js';
|
|
2
|
+
export { GOOGLE_SCOPE } from './constants.js';
|
|
3
|
+
export * as mcp from './mcp/index.js';
|
|
4
|
+
export * as schemas from './schemas/index.js';
|
|
5
|
+
export * as setup from './setup/index.js';
|
|
6
|
+
export * from './types.js';
|
|
7
|
+
export declare function startServer(config: ServerConfig): Promise<void>;
|
|
8
|
+
export default function main(): Promise<void>;
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { createConfig, handleVersionHelp } from './setup/config.js';
|
|
2
|
+
import { createHTTPServer } from './setup/http.js';
|
|
3
|
+
import { createStdioServer } from './setup/stdio.js';
|
|
4
|
+
export { GOOGLE_SCOPE } from './constants.js';
|
|
5
|
+
import * as _mcp from './mcp/index.js';
|
|
6
|
+
export { _mcp as mcp };
|
|
7
|
+
import * as _schemas from './schemas/index.js';
|
|
8
|
+
export { _schemas as schemas };
|
|
9
|
+
import * as _setup from './setup/index.js';
|
|
10
|
+
export { _setup as setup };
|
|
11
|
+
export * from './types.js';
|
|
12
|
+
export async function startServer(config) {
|
|
13
|
+
const { logger, close } = config.transport.type === 'stdio' ? await createStdioServer(config) : await createHTTPServer(config);
|
|
14
|
+
process.on('SIGINT', async ()=>{
|
|
15
|
+
await close();
|
|
16
|
+
process.exit(0);
|
|
17
|
+
});
|
|
18
|
+
logger.info(`Server started with ${config.transport.type} transport`);
|
|
19
|
+
await new Promise(()=>{});
|
|
20
|
+
}
|
|
21
|
+
export default async function main() {
|
|
22
|
+
// Check for help/version flags FIRST, before config parsing
|
|
23
|
+
const versionHelpResult = handleVersionHelp(process.argv);
|
|
24
|
+
if (versionHelpResult.handled) {
|
|
25
|
+
console.log(versionHelpResult.output);
|
|
26
|
+
process.exit(0);
|
|
27
|
+
}
|
|
28
|
+
// Only parse config if no help/version flags
|
|
29
|
+
const config = createConfig();
|
|
30
|
+
await startServer(config);
|
|
31
|
+
}
|
|
32
|
+
if (process.argv[1] === new URL(import.meta.url).pathname) {
|
|
33
|
+
main();
|
|
34
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["/Users/kevin/Dev/Projects/ai/mcp-z/servers/mcp-drive/src/index.ts"],"sourcesContent":["import { createConfig, handleVersionHelp } from './setup/config.js';\nimport { createHTTPServer } from './setup/http.js';\nimport { createStdioServer } from './setup/stdio.js';\nimport type { ServerConfig } from './types.js';\n\nexport { GOOGLE_SCOPE } from './constants.ts';\nexport * as mcp from './mcp/index.js';\nexport * as schemas from './schemas/index.js';\nexport * as setup from './setup/index.js';\nexport * from './types.js';\n\nexport async function startServer(config: ServerConfig): Promise<void> {\n const { logger, close } = config.transport.type === 'stdio' ? await createStdioServer(config) : await createHTTPServer(config);\n\n process.on('SIGINT', async () => {\n await close();\n process.exit(0);\n });\n\n logger.info(`Server started with ${config.transport.type} transport`);\n await new Promise(() => {});\n}\n\nexport default async function main(): Promise<void> {\n // Check for help/version flags FIRST, before config parsing\n const versionHelpResult = handleVersionHelp(process.argv);\n if (versionHelpResult.handled) {\n console.log(versionHelpResult.output);\n process.exit(0);\n }\n\n // Only parse config if no help/version flags\n const config = createConfig();\n await startServer(config);\n}\n\nif (process.argv[1] === new URL(import.meta.url).pathname) {\n main();\n}\n"],"names":["createConfig","handleVersionHelp","createHTTPServer","createStdioServer","GOOGLE_SCOPE","mcp","schemas","setup","startServer","config","logger","close","transport","type","process","on","exit","info","Promise","main","versionHelpResult","argv","handled","console","log","output","URL","url","pathname"],"mappings":"AAAA,SAASA,YAAY,EAAEC,iBAAiB,QAAQ,oBAAoB;AACpE,SAASC,gBAAgB,QAAQ,kBAAkB;AACnD,SAASC,iBAAiB,QAAQ,mBAAmB;AAGrD,SAASC,YAAY,QAAQ,iBAAiB;AAC9C,sBAAqB,iBAAiB;AAAtC,SAAO,QAAKC,GAAG,GAAuB;AACtC,0BAAyB,qBAAqB;AAA9C,SAAO,YAAKC,OAAO,GAA2B;AAC9C,wBAAuB,mBAAmB;AAA1C,SAAO,UAAKC,KAAK,GAAyB;AAC1C,cAAc,aAAa;AAE3B,OAAO,eAAeC,YAAYC,MAAoB;IACpD,MAAM,EAAEC,MAAM,EAAEC,KAAK,EAAE,GAAGF,OAAOG,SAAS,CAACC,IAAI,KAAK,UAAU,MAAMV,kBAAkBM,UAAU,MAAMP,iBAAiBO;IAEvHK,QAAQC,EAAE,CAAC,UAAU;QACnB,MAAMJ;QACNG,QAAQE,IAAI,CAAC;IACf;IAEAN,OAAOO,IAAI,CAAC,CAAC,oBAAoB,EAAER,OAAOG,SAAS,CAACC,IAAI,CAAC,UAAU,CAAC;IACpE,MAAM,IAAIK,QAAQ,KAAO;AAC3B;AAEA,eAAe,eAAeC;IAC5B,4DAA4D;IAC5D,MAAMC,oBAAoBnB,kBAAkBa,QAAQO,IAAI;IACxD,IAAID,kBAAkBE,OAAO,EAAE;QAC7BC,QAAQC,GAAG,CAACJ,kBAAkBK,MAAM;QACpCX,QAAQE,IAAI,CAAC;IACf;IAEA,6CAA6C;IAC7C,MAAMP,SAAST;IACf,MAAMQ,YAAYC;AACpB;AAEA,IAAIK,QAAQO,IAAI,CAAC,EAAE,KAAK,IAAIK,IAAI,YAAYC,GAAG,EAAEC,QAAQ,EAAE;IACzDT;AACF"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["/Users/kevin/Dev/Projects/ai/mcp-z/servers/mcp-drive/src/lib/create-store.ts"],"sourcesContent":["import type Keyv from 'keyv';\nimport keyvRegistry from 'keyv-registry';\n\nexport default async function createStore<T>(uri: string): Promise<Keyv<T>> {\n const store = await keyvRegistry<T>(uri);\n if (!store) throw new Error(`Failed to create store for URI: ${uri}`);\n return store;\n}\n"],"names":["keyvRegistry","createStore","uri","store","Error"],"mappings":"AACA,OAAOA,kBAAkB,gBAAgB;AAEzC,eAAe,eAAeC,YAAeC,GAAW;IACtD,MAAMC,QAAQ,MAAMH,aAAgBE;IACpC,IAAI,CAACC,OAAO,MAAM,IAAIC,MAAM,CAAC,gCAAgC,EAAEF,KAAK;IACpE,OAAOC;AACT"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import type { DriveQuery } from '../schemas/drive-query-schema.js';
|
|
2
|
+
/**
|
|
3
|
+
* Field operator interface for query filters
|
|
4
|
+
*/
|
|
5
|
+
export interface FieldOperator {
|
|
6
|
+
$any?: string[];
|
|
7
|
+
$all?: string[];
|
|
8
|
+
$none?: string[];
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* Filters object returned by toDriveQuery for debugging/logging
|
|
12
|
+
*/
|
|
13
|
+
interface FiltersObject {
|
|
14
|
+
nameIncludes?: string[];
|
|
15
|
+
mimeTypeIncludes?: string[];
|
|
16
|
+
fullTextIncludes?: string[];
|
|
17
|
+
parentIdIncludes?: string[];
|
|
18
|
+
ownerIncludes?: string[];
|
|
19
|
+
starred?: boolean;
|
|
20
|
+
sharedWithMe?: boolean;
|
|
21
|
+
trashed?: boolean;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Convert structured DriveQuery to Google Drive query string
|
|
25
|
+
*
|
|
26
|
+
* Accepts either:
|
|
27
|
+
* - A raw Drive query string (returned as-is)
|
|
28
|
+
* - A structured DriveQueryObject (converted to Drive query syntax)
|
|
29
|
+
*
|
|
30
|
+
* Drive query syntax reference:
|
|
31
|
+
* - name contains 'text' - Search by filename
|
|
32
|
+
* - mimeType = 'type' - Filter by MIME type
|
|
33
|
+
* - fullText contains 'text' - Search content and metadata
|
|
34
|
+
* - 'parent_id' in parents - Search in folder
|
|
35
|
+
* - starred = true/false - Filter by starred status
|
|
36
|
+
* - sharedWithMe = true - Filter by shared status
|
|
37
|
+
* - modifiedTime >= 'date' - Date filtering
|
|
38
|
+
* - 'email' in owners - Filter by owner
|
|
39
|
+
* - trashed = false - Exclude trashed files (always added)
|
|
40
|
+
*/
|
|
41
|
+
export declare function toDriveQuery(query: DriveQuery): {
|
|
42
|
+
q: string;
|
|
43
|
+
filters: FiltersObject;
|
|
44
|
+
};
|
|
45
|
+
export {};
|
|
@@ -0,0 +1,184 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Convert structured DriveQuery to Google Drive query string
|
|
3
|
+
*
|
|
4
|
+
* Accepts either:
|
|
5
|
+
* - A raw Drive query string (returned as-is)
|
|
6
|
+
* - A structured DriveQueryObject (converted to Drive query syntax)
|
|
7
|
+
*
|
|
8
|
+
* Drive query syntax reference:
|
|
9
|
+
* - name contains 'text' - Search by filename
|
|
10
|
+
* - mimeType = 'type' - Filter by MIME type
|
|
11
|
+
* - fullText contains 'text' - Search content and metadata
|
|
12
|
+
* - 'parent_id' in parents - Search in folder
|
|
13
|
+
* - starred = true/false - Filter by starred status
|
|
14
|
+
* - sharedWithMe = true - Filter by shared status
|
|
15
|
+
* - modifiedTime >= 'date' - Date filtering
|
|
16
|
+
* - 'email' in owners - Filter by owner
|
|
17
|
+
* - trashed = false - Exclude trashed files (always added)
|
|
18
|
+
*/ export function toDriveQuery(query) {
|
|
19
|
+
// Handle string queries - return as raw query with empty filters
|
|
20
|
+
if (typeof query === 'string') {
|
|
21
|
+
return {
|
|
22
|
+
q: query,
|
|
23
|
+
filters: {}
|
|
24
|
+
};
|
|
25
|
+
}
|
|
26
|
+
const nameIncludes = [];
|
|
27
|
+
const mimeTypeIncludes = [];
|
|
28
|
+
const fullTextIncludes = [];
|
|
29
|
+
const parentIdIncludes = [];
|
|
30
|
+
const ownerIncludes = [];
|
|
31
|
+
let starredFlag;
|
|
32
|
+
let sharedWithMeFlag;
|
|
33
|
+
let trashedFlag;
|
|
34
|
+
function p(s) {
|
|
35
|
+
return `(${String(s !== null && s !== void 0 ? s : '')})`;
|
|
36
|
+
}
|
|
37
|
+
function quote(s) {
|
|
38
|
+
const str = String(s !== null && s !== void 0 ? s : '');
|
|
39
|
+
// Escape single quotes for Drive query syntax
|
|
40
|
+
return `'${str.replace(/'/g, "\\'")}'`;
|
|
41
|
+
}
|
|
42
|
+
function fv(field, raw) {
|
|
43
|
+
const rawVal = String(raw !== null && raw !== void 0 ? raw : '');
|
|
44
|
+
const v = quote(rawVal);
|
|
45
|
+
if (field === 'name') {
|
|
46
|
+
nameIncludes.push(rawVal);
|
|
47
|
+
return `name contains ${v}`;
|
|
48
|
+
}
|
|
49
|
+
if (field === 'mimeType') {
|
|
50
|
+
mimeTypeIncludes.push(rawVal);
|
|
51
|
+
return `mimeType = ${v}`;
|
|
52
|
+
}
|
|
53
|
+
if (field === 'fullText') {
|
|
54
|
+
fullTextIncludes.push(rawVal);
|
|
55
|
+
return `fullText contains ${v}`;
|
|
56
|
+
}
|
|
57
|
+
if (field === 'parentId') {
|
|
58
|
+
parentIdIncludes.push(rawVal);
|
|
59
|
+
return `${v} in parents`;
|
|
60
|
+
}
|
|
61
|
+
if (field === 'owner') {
|
|
62
|
+
ownerIncludes.push(rawVal);
|
|
63
|
+
return `${v} in owners`;
|
|
64
|
+
}
|
|
65
|
+
return '';
|
|
66
|
+
}
|
|
67
|
+
function chain(op, arr) {
|
|
68
|
+
const filtered = arr.filter((s)=>s && s.trim() !== '');
|
|
69
|
+
if (filtered.length === 0) return '';
|
|
70
|
+
if (filtered.length === 1) {
|
|
71
|
+
const first = filtered[0];
|
|
72
|
+
return first !== null && first !== void 0 ? first : '';
|
|
73
|
+
}
|
|
74
|
+
return p(filtered.join(` ${op} `));
|
|
75
|
+
}
|
|
76
|
+
function fieldExpr(field, op) {
|
|
77
|
+
if (op.$any) {
|
|
78
|
+
const nonEmpty = op.$any.filter((v)=>String(v !== null && v !== void 0 ? v : '').trim() !== '');
|
|
79
|
+
const results = nonEmpty.map((v)=>fv(field, String(v !== null && v !== void 0 ? v : ''))).filter((result)=>result.trim() !== '');
|
|
80
|
+
return results.length > 0 ? chain('or', results) : '';
|
|
81
|
+
}
|
|
82
|
+
if (op.$all) {
|
|
83
|
+
const nonEmpty = op.$all.filter((v)=>String(v !== null && v !== void 0 ? v : '').trim() !== '');
|
|
84
|
+
const results = nonEmpty.map((v)=>fv(field, String(v !== null && v !== void 0 ? v : ''))).filter((result)=>result.trim() !== '');
|
|
85
|
+
return results.length > 0 ? chain('and', results) : '';
|
|
86
|
+
}
|
|
87
|
+
if (op.$none) {
|
|
88
|
+
const nonEmpty = op.$none.filter((v)=>String(v !== null && v !== void 0 ? v : '').trim() !== '');
|
|
89
|
+
const results = nonEmpty.map((v)=>fv(field, String(v !== null && v !== void 0 ? v : ''))).filter((result)=>result.trim() !== '');
|
|
90
|
+
return results.length > 0 ? `not ${p(chain('or', results))}` : '';
|
|
91
|
+
}
|
|
92
|
+
throw new Error(`Unknown field operator ${JSON.stringify(op)}`);
|
|
93
|
+
}
|
|
94
|
+
function dateExpr(d) {
|
|
95
|
+
var _parts_;
|
|
96
|
+
const parts = [];
|
|
97
|
+
if (d.$gte) parts.push(`modifiedTime >= '${d.$gte}'`);
|
|
98
|
+
if (d.$lt) parts.push(`modifiedTime < '${d.$lt}'`);
|
|
99
|
+
return parts.length > 1 ? p(parts.join(' and ')) : (_parts_ = parts[0]) !== null && _parts_ !== void 0 ? _parts_ : '';
|
|
100
|
+
}
|
|
101
|
+
function fieldKeys() {
|
|
102
|
+
return [
|
|
103
|
+
'name',
|
|
104
|
+
'mimeType',
|
|
105
|
+
'fullText',
|
|
106
|
+
'parentId',
|
|
107
|
+
'owner'
|
|
108
|
+
];
|
|
109
|
+
}
|
|
110
|
+
function emit(n) {
|
|
111
|
+
if (n.$and) return p(n.$and.map(emit).join(' and '));
|
|
112
|
+
if (n.$or) return p(n.$or.map(emit).join(' or '));
|
|
113
|
+
if (n.$not) return `not ${emit(n.$not)}`;
|
|
114
|
+
const expressions = [];
|
|
115
|
+
if (typeof n.starred === 'boolean') {
|
|
116
|
+
starredFlag = n.starred;
|
|
117
|
+
expressions.push(`starred = ${n.starred}`);
|
|
118
|
+
}
|
|
119
|
+
if (typeof n.sharedWithMe === 'boolean') {
|
|
120
|
+
sharedWithMeFlag = n.sharedWithMe;
|
|
121
|
+
expressions.push(`sharedWithMe = ${n.sharedWithMe}`);
|
|
122
|
+
}
|
|
123
|
+
if (typeof n.trashed === 'boolean') {
|
|
124
|
+
trashedFlag = n.trashed;
|
|
125
|
+
expressions.push(`trashed = ${n.trashed}`);
|
|
126
|
+
}
|
|
127
|
+
if (n.modifiedTime) {
|
|
128
|
+
expressions.push(dateExpr(n.modifiedTime));
|
|
129
|
+
}
|
|
130
|
+
for (const k of fieldKeys()){
|
|
131
|
+
if (typeof n === 'object' && n !== null && k in n) {
|
|
132
|
+
const op = n[k];
|
|
133
|
+
const normalizedOp = typeof op === 'string' ? {
|
|
134
|
+
$any: [
|
|
135
|
+
op
|
|
136
|
+
]
|
|
137
|
+
} : op !== null && op !== void 0 ? op : {};
|
|
138
|
+
const result = fieldExpr(k, normalizedOp);
|
|
139
|
+
if (result.trim() !== '') {
|
|
140
|
+
expressions.push(result);
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
// Handle empty objects
|
|
145
|
+
if (expressions.length === 0 && typeof n === 'object' && n !== null && Object.keys(n).length === 0) {
|
|
146
|
+
return '';
|
|
147
|
+
}
|
|
148
|
+
// Combine multiple expressions with AND
|
|
149
|
+
if (expressions.length > 1) {
|
|
150
|
+
return chain('and', expressions);
|
|
151
|
+
}
|
|
152
|
+
if (expressions.length === 1) {
|
|
153
|
+
var _expressions_;
|
|
154
|
+
return (_expressions_ = expressions[0]) !== null && _expressions_ !== void 0 ? _expressions_ : '';
|
|
155
|
+
}
|
|
156
|
+
throw new Error(`Unknown node: ${JSON.stringify(n)}`);
|
|
157
|
+
}
|
|
158
|
+
function emitTop(n) {
|
|
159
|
+
if (!n) return '';
|
|
160
|
+
// Handle empty objects
|
|
161
|
+
if (typeof n === 'object' && n !== null && Object.keys(n).length === 0) return '';
|
|
162
|
+
if (n.$and) return n.$and.map(emit).join(' and ');
|
|
163
|
+
if (n.$or) return n.$or.map(emit).join(' or ');
|
|
164
|
+
if (n.$not) return `not ${emit(n.$not)}`;
|
|
165
|
+
const result = emit(n);
|
|
166
|
+
return result.trim() === '' ? '' : result;
|
|
167
|
+
}
|
|
168
|
+
const q = emitTop(query);
|
|
169
|
+
const cleanedQuery = q.replace(/\s+and\s+$|\s+or\s+$|^\s+and\s+|^\s+or\s+/gi, '').trim();
|
|
170
|
+
const filters = {};
|
|
171
|
+
if (nameIncludes.length) filters.nameIncludes = nameIncludes;
|
|
172
|
+
if (mimeTypeIncludes.length) filters.mimeTypeIncludes = mimeTypeIncludes;
|
|
173
|
+
if (fullTextIncludes.length) filters.fullTextIncludes = fullTextIncludes;
|
|
174
|
+
if (parentIdIncludes.length) filters.parentIdIncludes = parentIdIncludes;
|
|
175
|
+
if (ownerIncludes.length) filters.ownerIncludes = ownerIncludes;
|
|
176
|
+
// Use tracked flags from emit() to capture nested boolean conditions
|
|
177
|
+
if (typeof starredFlag === 'boolean') filters.starred = starredFlag;
|
|
178
|
+
if (typeof sharedWithMeFlag === 'boolean') filters.sharedWithMe = sharedWithMeFlag;
|
|
179
|
+
if (typeof trashedFlag === 'boolean') filters.trashed = trashedFlag;
|
|
180
|
+
return {
|
|
181
|
+
q: cleanedQuery !== null && cleanedQuery !== void 0 ? cleanedQuery : '',
|
|
182
|
+
filters
|
|
183
|
+
};
|
|
184
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["/Users/kevin/Dev/Projects/ai/mcp-z/servers/mcp-drive/src/lib/query-builder.ts"],"sourcesContent":["import type { DriveQuery, DriveQueryObject } from '../schemas/drive-query-schema.js';\n\n/**\n * Field operator interface for query filters\n */\nexport interface FieldOperator {\n $any?: string[];\n $all?: string[];\n $none?: string[];\n}\n\n/**\n * Filters object returned by toDriveQuery for debugging/logging\n */\ninterface FiltersObject {\n nameIncludes?: string[];\n mimeTypeIncludes?: string[];\n fullTextIncludes?: string[];\n parentIdIncludes?: string[];\n ownerIncludes?: string[];\n starred?: boolean;\n sharedWithMe?: boolean;\n trashed?: boolean;\n}\n\n/**\n * Convert structured DriveQuery to Google Drive query string\n *\n * Accepts either:\n * - A raw Drive query string (returned as-is)\n * - A structured DriveQueryObject (converted to Drive query syntax)\n *\n * Drive query syntax reference:\n * - name contains 'text' - Search by filename\n * - mimeType = 'type' - Filter by MIME type\n * - fullText contains 'text' - Search content and metadata\n * - 'parent_id' in parents - Search in folder\n * - starred = true/false - Filter by starred status\n * - sharedWithMe = true - Filter by shared status\n * - modifiedTime >= 'date' - Date filtering\n * - 'email' in owners - Filter by owner\n * - trashed = false - Exclude trashed files (always added)\n */\nexport function toDriveQuery(query: DriveQuery): {\n q: string;\n filters: FiltersObject;\n} {\n // Handle string queries - return as raw query with empty filters\n if (typeof query === 'string') {\n return { q: query, filters: {} };\n }\n const nameIncludes: string[] = [];\n const mimeTypeIncludes: string[] = [];\n const fullTextIncludes: string[] = [];\n const parentIdIncludes: string[] = [];\n const ownerIncludes: string[] = [];\n\n let starredFlag: boolean | undefined;\n let sharedWithMeFlag: boolean | undefined;\n let trashedFlag: boolean | undefined;\n\n function p(s: unknown) {\n return `(${String(s ?? '')})`;\n }\n\n function quote(s?: unknown) {\n const str = String(s ?? '');\n // Escape single quotes for Drive query syntax\n return `'${str.replace(/'/g, \"\\\\'\")}'`;\n }\n\n function fv(field: string, raw?: unknown) {\n const rawVal = String(raw ?? '');\n const v = quote(rawVal);\n\n if (field === 'name') {\n nameIncludes.push(rawVal);\n return `name contains ${v}`;\n }\n if (field === 'mimeType') {\n mimeTypeIncludes.push(rawVal);\n return `mimeType = ${v}`;\n }\n if (field === 'fullText') {\n fullTextIncludes.push(rawVal);\n return `fullText contains ${v}`;\n }\n if (field === 'parentId') {\n parentIdIncludes.push(rawVal);\n return `${v} in parents`;\n }\n if (field === 'owner') {\n ownerIncludes.push(rawVal);\n return `${v} in owners`;\n }\n\n return '';\n }\n\n function chain(op: 'and' | 'or', arr: string[]) {\n const filtered = arr.filter((s) => s && s.trim() !== '');\n if (filtered.length === 0) return '';\n if (filtered.length === 1) {\n const first = filtered[0];\n return first ?? '';\n }\n return p(filtered.join(` ${op} `));\n }\n\n function fieldExpr(field: string, op: FieldOperator) {\n if (op.$any) {\n const nonEmpty = op.$any.filter((v: string) => String(v ?? '').trim() !== '');\n const results = nonEmpty.map((v: string) => fv(field, String(v ?? ''))).filter((result: string) => result.trim() !== '');\n return results.length > 0 ? chain('or', results) : '';\n }\n if (op.$all) {\n const nonEmpty = op.$all.filter((v: string) => String(v ?? '').trim() !== '');\n const results = nonEmpty.map((v: string) => fv(field, String(v ?? ''))).filter((result: string) => result.trim() !== '');\n return results.length > 0 ? chain('and', results) : '';\n }\n if (op.$none) {\n const nonEmpty = op.$none.filter((v: string) => String(v ?? '').trim() !== '');\n const results = nonEmpty.map((v: string) => fv(field, String(v ?? ''))).filter((result: string) => result.trim() !== '');\n return results.length > 0 ? `not ${p(chain('or', results))}` : '';\n }\n throw new Error(`Unknown field operator ${JSON.stringify(op)}`);\n }\n\n function dateExpr(d: { $gte?: string; $lt?: string }) {\n const parts: string[] = [];\n if (d.$gte) parts.push(`modifiedTime >= '${d.$gte}'`);\n if (d.$lt) parts.push(`modifiedTime < '${d.$lt}'`);\n return parts.length > 1 ? p(parts.join(' and ')) : (parts[0] ?? '');\n }\n\n function fieldKeys() {\n return ['name', 'mimeType', 'fullText', 'parentId', 'owner'];\n }\n\n function emit(n: DriveQueryObject): string {\n if (n.$and) return p(n.$and.map(emit).join(' and '));\n if (n.$or) return p(n.$or.map(emit).join(' or '));\n if (n.$not) return `not ${emit(n.$not)}`;\n\n const expressions: string[] = [];\n\n if (typeof n.starred === 'boolean') {\n starredFlag = n.starred;\n expressions.push(`starred = ${n.starred}`);\n }\n if (typeof n.sharedWithMe === 'boolean') {\n sharedWithMeFlag = n.sharedWithMe;\n expressions.push(`sharedWithMe = ${n.sharedWithMe}`);\n }\n if (typeof n.trashed === 'boolean') {\n trashedFlag = n.trashed;\n expressions.push(`trashed = ${n.trashed}`);\n }\n if (n.modifiedTime) {\n expressions.push(dateExpr(n.modifiedTime));\n }\n\n for (const k of fieldKeys()) {\n if (typeof n === 'object' && n !== null && k in n) {\n const op = (n as Record<string, string | FieldOperator>)[k];\n const normalizedOp: FieldOperator = typeof op === 'string' ? { $any: [op] } : (op ?? {});\n const result = fieldExpr(k, normalizedOp);\n if (result.trim() !== '') {\n expressions.push(result);\n }\n }\n }\n\n // Handle empty objects\n if (expressions.length === 0 && typeof n === 'object' && n !== null && Object.keys(n).length === 0) {\n return '';\n }\n\n // Combine multiple expressions with AND\n if (expressions.length > 1) {\n return chain('and', expressions);\n }\n if (expressions.length === 1) {\n return expressions[0] ?? '';\n }\n\n throw new Error(`Unknown node: ${JSON.stringify(n)}`);\n }\n\n function emitTop(n: DriveQueryObject): string {\n if (!n) return '';\n\n // Handle empty objects\n if (typeof n === 'object' && n !== null && Object.keys(n).length === 0) return '';\n\n if (n.$and) return n.$and.map(emit).join(' and ');\n if (n.$or) return n.$or.map(emit).join(' or ');\n if (n.$not) return `not ${emit(n.$not)}`;\n\n const result = emit(n);\n return result.trim() === '' ? '' : result;\n }\n\n const q = emitTop(query);\n const cleanedQuery = q.replace(/\\s+and\\s+$|\\s+or\\s+$|^\\s+and\\s+|^\\s+or\\s+/gi, '').trim();\n\n const filters: FiltersObject = {};\n if (nameIncludes.length) filters.nameIncludes = nameIncludes;\n if (mimeTypeIncludes.length) filters.mimeTypeIncludes = mimeTypeIncludes;\n if (fullTextIncludes.length) filters.fullTextIncludes = fullTextIncludes;\n if (parentIdIncludes.length) filters.parentIdIncludes = parentIdIncludes;\n if (ownerIncludes.length) filters.ownerIncludes = ownerIncludes;\n // Use tracked flags from emit() to capture nested boolean conditions\n if (typeof starredFlag === 'boolean') filters.starred = starredFlag;\n if (typeof sharedWithMeFlag === 'boolean') filters.sharedWithMe = sharedWithMeFlag;\n if (typeof trashedFlag === 'boolean') filters.trashed = trashedFlag;\n\n return { q: cleanedQuery ?? '', filters };\n}\n"],"names":["toDriveQuery","query","q","filters","nameIncludes","mimeTypeIncludes","fullTextIncludes","parentIdIncludes","ownerIncludes","starredFlag","sharedWithMeFlag","trashedFlag","p","s","String","quote","str","replace","fv","field","raw","rawVal","v","push","chain","op","arr","filtered","filter","trim","length","first","join","fieldExpr","$any","nonEmpty","results","map","result","$all","$none","Error","JSON","stringify","dateExpr","d","parts","$gte","$lt","fieldKeys","emit","n","$and","$or","$not","expressions","starred","sharedWithMe","trashed","modifiedTime","k","normalizedOp","Object","keys","emitTop","cleanedQuery"],"mappings":"AAyBA;;;;;;;;;;;;;;;;;CAiBC,GACD,OAAO,SAASA,aAAaC,KAAiB;IAI5C,iEAAiE;IACjE,IAAI,OAAOA,UAAU,UAAU;QAC7B,OAAO;YAAEC,GAAGD;YAAOE,SAAS,CAAC;QAAE;IACjC;IACA,MAAMC,eAAyB,EAAE;IACjC,MAAMC,mBAA6B,EAAE;IACrC,MAAMC,mBAA6B,EAAE;IACrC,MAAMC,mBAA6B,EAAE;IACrC,MAAMC,gBAA0B,EAAE;IAElC,IAAIC;IACJ,IAAIC;IACJ,IAAIC;IAEJ,SAASC,EAAEC,CAAU;QACnB,OAAO,CAAC,CAAC,EAAEC,OAAOD,cAAAA,eAAAA,IAAK,IAAI,CAAC,CAAC;IAC/B;IAEA,SAASE,MAAMF,CAAW;QACxB,MAAMG,MAAMF,OAAOD,cAAAA,eAAAA,IAAK;QACxB,8CAA8C;QAC9C,OAAO,CAAC,CAAC,EAAEG,IAAIC,OAAO,CAAC,MAAM,OAAO,CAAC,CAAC;IACxC;IAEA,SAASC,GAAGC,KAAa,EAAEC,GAAa;QACtC,MAAMC,SAASP,OAAOM,gBAAAA,iBAAAA,MAAO;QAC7B,MAAME,IAAIP,MAAMM;QAEhB,IAAIF,UAAU,QAAQ;YACpBf,aAAamB,IAAI,CAACF;YAClB,OAAO,CAAC,cAAc,EAAEC,GAAG;QAC7B;QACA,IAAIH,UAAU,YAAY;YACxBd,iBAAiBkB,IAAI,CAACF;YACtB,OAAO,CAAC,WAAW,EAAEC,GAAG;QAC1B;QACA,IAAIH,UAAU,YAAY;YACxBb,iBAAiBiB,IAAI,CAACF;YACtB,OAAO,CAAC,kBAAkB,EAAEC,GAAG;QACjC;QACA,IAAIH,UAAU,YAAY;YACxBZ,iBAAiBgB,IAAI,CAACF;YACtB,OAAO,GAAGC,EAAE,WAAW,CAAC;QAC1B;QACA,IAAIH,UAAU,SAAS;YACrBX,cAAce,IAAI,CAACF;YACnB,OAAO,GAAGC,EAAE,UAAU,CAAC;QACzB;QAEA,OAAO;IACT;IAEA,SAASE,MAAMC,EAAgB,EAAEC,GAAa;QAC5C,MAAMC,WAAWD,IAAIE,MAAM,CAAC,CAACf,IAAMA,KAAKA,EAAEgB,IAAI,OAAO;QACrD,IAAIF,SAASG,MAAM,KAAK,GAAG,OAAO;QAClC,IAAIH,SAASG,MAAM,KAAK,GAAG;YACzB,MAAMC,QAAQJ,QAAQ,CAAC,EAAE;YACzB,OAAOI,kBAAAA,mBAAAA,QAAS;QAClB;QACA,OAAOnB,EAAEe,SAASK,IAAI,CAAC,CAAC,CAAC,EAAEP,GAAG,CAAC,CAAC;IAClC;IAEA,SAASQ,UAAUd,KAAa,EAAEM,EAAiB;QACjD,IAAIA,GAAGS,IAAI,EAAE;YACX,MAAMC,WAAWV,GAAGS,IAAI,CAACN,MAAM,CAAC,CAACN,IAAcR,OAAOQ,cAAAA,eAAAA,IAAK,IAAIO,IAAI,OAAO;YAC1E,MAAMO,UAAUD,SAASE,GAAG,CAAC,CAACf,IAAcJ,GAAGC,OAAOL,OAAOQ,cAAAA,eAAAA,IAAK,MAAMM,MAAM,CAAC,CAACU,SAAmBA,OAAOT,IAAI,OAAO;YACrH,OAAOO,QAAQN,MAAM,GAAG,IAAIN,MAAM,MAAMY,WAAW;QACrD;QACA,IAAIX,GAAGc,IAAI,EAAE;YACX,MAAMJ,WAAWV,GAAGc,IAAI,CAACX,MAAM,CAAC,CAACN,IAAcR,OAAOQ,cAAAA,eAAAA,IAAK,IAAIO,IAAI,OAAO;YAC1E,MAAMO,UAAUD,SAASE,GAAG,CAAC,CAACf,IAAcJ,GAAGC,OAAOL,OAAOQ,cAAAA,eAAAA,IAAK,MAAMM,MAAM,CAAC,CAACU,SAAmBA,OAAOT,IAAI,OAAO;YACrH,OAAOO,QAAQN,MAAM,GAAG,IAAIN,MAAM,OAAOY,WAAW;QACtD;QACA,IAAIX,GAAGe,KAAK,EAAE;YACZ,MAAML,WAAWV,GAAGe,KAAK,CAACZ,MAAM,CAAC,CAACN,IAAcR,OAAOQ,cAAAA,eAAAA,IAAK,IAAIO,IAAI,OAAO;YAC3E,MAAMO,UAAUD,SAASE,GAAG,CAAC,CAACf,IAAcJ,GAAGC,OAAOL,OAAOQ,cAAAA,eAAAA,IAAK,MAAMM,MAAM,CAAC,CAACU,SAAmBA,OAAOT,IAAI,OAAO;YACrH,OAAOO,QAAQN,MAAM,GAAG,IAAI,CAAC,IAAI,EAAElB,EAAEY,MAAM,MAAMY,WAAW,GAAG;QACjE;QACA,MAAM,IAAIK,MAAM,CAAC,uBAAuB,EAAEC,KAAKC,SAAS,CAAClB,KAAK;IAChE;IAEA,SAASmB,SAASC,CAAkC;YAIEC;QAHpD,MAAMA,QAAkB,EAAE;QAC1B,IAAID,EAAEE,IAAI,EAAED,MAAMvB,IAAI,CAAC,CAAC,iBAAiB,EAAEsB,EAAEE,IAAI,CAAC,CAAC,CAAC;QACpD,IAAIF,EAAEG,GAAG,EAAEF,MAAMvB,IAAI,CAAC,CAAC,gBAAgB,EAAEsB,EAAEG,GAAG,CAAC,CAAC,CAAC;QACjD,OAAOF,MAAMhB,MAAM,GAAG,IAAIlB,EAAEkC,MAAMd,IAAI,CAAC,aAAac,UAAAA,KAAK,CAAC,EAAE,cAARA,qBAAAA,UAAY;IAClE;IAEA,SAASG;QACP,OAAO;YAAC;YAAQ;YAAY;YAAY;YAAY;SAAQ;IAC9D;IAEA,SAASC,KAAKC,CAAmB;QAC/B,IAAIA,EAAEC,IAAI,EAAE,OAAOxC,EAAEuC,EAAEC,IAAI,CAACf,GAAG,CAACa,MAAMlB,IAAI,CAAC;QAC3C,IAAImB,EAAEE,GAAG,EAAE,OAAOzC,EAAEuC,EAAEE,GAAG,CAAChB,GAAG,CAACa,MAAMlB,IAAI,CAAC;QACzC,IAAImB,EAAEG,IAAI,EAAE,OAAO,CAAC,IAAI,EAAEJ,KAAKC,EAAEG,IAAI,GAAG;QAExC,MAAMC,cAAwB,EAAE;QAEhC,IAAI,OAAOJ,EAAEK,OAAO,KAAK,WAAW;YAClC/C,cAAc0C,EAAEK,OAAO;YACvBD,YAAYhC,IAAI,CAAC,CAAC,UAAU,EAAE4B,EAAEK,OAAO,EAAE;QAC3C;QACA,IAAI,OAAOL,EAAEM,YAAY,KAAK,WAAW;YACvC/C,mBAAmByC,EAAEM,YAAY;YACjCF,YAAYhC,IAAI,CAAC,CAAC,eAAe,EAAE4B,EAAEM,YAAY,EAAE;QACrD;QACA,IAAI,OAAON,EAAEO,OAAO,KAAK,WAAW;YAClC/C,cAAcwC,EAAEO,OAAO;YACvBH,YAAYhC,IAAI,CAAC,CAAC,UAAU,EAAE4B,EAAEO,OAAO,EAAE;QAC3C;QACA,IAAIP,EAAEQ,YAAY,EAAE;YAClBJ,YAAYhC,IAAI,CAACqB,SAASO,EAAEQ,YAAY;QAC1C;QAEA,KAAK,MAAMC,KAAKX,YAAa;YAC3B,IAAI,OAAOE,MAAM,YAAYA,MAAM,QAAQS,KAAKT,GAAG;gBACjD,MAAM1B,KAAK,AAAC0B,CAA4C,CAACS,EAAE;gBAC3D,MAAMC,eAA8B,OAAOpC,OAAO,WAAW;oBAAES,MAAM;wBAACT;qBAAG;gBAAC,IAAKA,eAAAA,gBAAAA,KAAM,CAAC;gBACtF,MAAMa,SAASL,UAAU2B,GAAGC;gBAC5B,IAAIvB,OAAOT,IAAI,OAAO,IAAI;oBACxB0B,YAAYhC,IAAI,CAACe;gBACnB;YACF;QACF;QAEA,uBAAuB;QACvB,IAAIiB,YAAYzB,MAAM,KAAK,KAAK,OAAOqB,MAAM,YAAYA,MAAM,QAAQW,OAAOC,IAAI,CAACZ,GAAGrB,MAAM,KAAK,GAAG;YAClG,OAAO;QACT;QAEA,wCAAwC;QACxC,IAAIyB,YAAYzB,MAAM,GAAG,GAAG;YAC1B,OAAON,MAAM,OAAO+B;QACtB;QACA,IAAIA,YAAYzB,MAAM,KAAK,GAAG;gBACrByB;YAAP,QAAOA,gBAAAA,WAAW,CAAC,EAAE,cAAdA,2BAAAA,gBAAkB;QAC3B;QAEA,MAAM,IAAId,MAAM,CAAC,cAAc,EAAEC,KAAKC,SAAS,CAACQ,IAAI;IACtD;IAEA,SAASa,QAAQb,CAAmB;QAClC,IAAI,CAACA,GAAG,OAAO;QAEf,uBAAuB;QACvB,IAAI,OAAOA,MAAM,YAAYA,MAAM,QAAQW,OAAOC,IAAI,CAACZ,GAAGrB,MAAM,KAAK,GAAG,OAAO;QAE/E,IAAIqB,EAAEC,IAAI,EAAE,OAAOD,EAAEC,IAAI,CAACf,GAAG,CAACa,MAAMlB,IAAI,CAAC;QACzC,IAAImB,EAAEE,GAAG,EAAE,OAAOF,EAAEE,GAAG,CAAChB,GAAG,CAACa,MAAMlB,IAAI,CAAC;QACvC,IAAImB,EAAEG,IAAI,EAAE,OAAO,CAAC,IAAI,EAAEJ,KAAKC,EAAEG,IAAI,GAAG;QAExC,MAAMhB,SAASY,KAAKC;QACpB,OAAOb,OAAOT,IAAI,OAAO,KAAK,KAAKS;IACrC;IAEA,MAAMpC,IAAI8D,QAAQ/D;IAClB,MAAMgE,eAAe/D,EAAEe,OAAO,CAAC,+CAA+C,IAAIY,IAAI;IAEtF,MAAM1B,UAAyB,CAAC;IAChC,IAAIC,aAAa0B,MAAM,EAAE3B,QAAQC,YAAY,GAAGA;IAChD,IAAIC,iBAAiByB,MAAM,EAAE3B,QAAQE,gBAAgB,GAAGA;IACxD,IAAIC,iBAAiBwB,MAAM,EAAE3B,QAAQG,gBAAgB,GAAGA;IACxD,IAAIC,iBAAiBuB,MAAM,EAAE3B,QAAQI,gBAAgB,GAAGA;IACxD,IAAIC,cAAcsB,MAAM,EAAE3B,QAAQK,aAAa,GAAGA;IAClD,qEAAqE;IACrE,IAAI,OAAOC,gBAAgB,WAAWN,QAAQqD,OAAO,GAAG/C;IACxD,IAAI,OAAOC,qBAAqB,WAAWP,QAAQsD,YAAY,GAAG/C;IAClE,IAAI,OAAOC,gBAAgB,WAAWR,QAAQuD,OAAO,GAAG/C;IAExD,OAAO;QAAET,CAAC,EAAE+D,yBAAAA,0BAAAA,eAAgB;QAAI9D;IAAQ;AAC1C"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import * as _promptFactories from './prompts/index.js';
|
|
2
|
+
export { _promptFactories as promptFactories };
|
|
3
|
+
import * as _resourceFactories from './resources/index.js';
|
|
4
|
+
export { _resourceFactories as resourceFactories };
|
|
5
|
+
import * as _toolFactories from './tools/index.js';
|
|
6
|
+
export { _toolFactories as toolFactories };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["/Users/kevin/Dev/Projects/ai/mcp-z/servers/mcp-drive/src/mcp/index.ts"],"sourcesContent":["export * as promptFactories from './prompts/index.js';\nexport * as resourceFactories from './resources/index.js';\nexport * as toolFactories from './tools/index.js';\n"],"names":["promptFactories","resourceFactories","toolFactories"],"mappings":"AAAA,kCAAiC,qBAAqB;AAAtD,SAAO,oBAAKA,eAAe,GAA2B;AACtD,oCAAmC,uBAAuB;AAA1D,SAAO,sBAAKC,iBAAiB,GAA6B;AAC1D,gCAA+B,mBAAmB;AAAlD,SAAO,kBAAKC,aAAa,GAAyB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["/Users/kevin/Dev/Projects/ai/mcp-z/servers/mcp-drive/src/mcp/prompts/index.ts"],"sourcesContent":["export { default as organizeFiles } from './organize-files.js';\nexport { default as querySyntax } from './query-syntax.js';\n"],"names":["default","organizeFiles","querySyntax"],"mappings":"AAAA,SAASA,WAAWC,aAAa,QAAQ,sBAAsB;AAC/D,SAASD,WAAWE,WAAW,QAAQ,oBAAoB"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
export default function createPrompt() {
|
|
2
|
+
const config = {
|
|
3
|
+
description: 'Help organize and manage files in Google Drive',
|
|
4
|
+
argsSchema: {}
|
|
5
|
+
};
|
|
6
|
+
return {
|
|
7
|
+
name: 'organize-files',
|
|
8
|
+
config,
|
|
9
|
+
handler: async ()=>({
|
|
10
|
+
messages: [
|
|
11
|
+
{
|
|
12
|
+
role: 'user',
|
|
13
|
+
content: {
|
|
14
|
+
type: 'text',
|
|
15
|
+
text: 'You are an expert file organizer assistant. Help me organize my Google Drive files.'
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
]
|
|
19
|
+
})
|
|
20
|
+
};
|
|
21
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["/Users/kevin/Dev/Projects/ai/mcp-z/servers/mcp-drive/src/mcp/prompts/organize-files.ts"],"sourcesContent":["import type { PromptModule } from '@mcp-z/server';\n\nexport default function createPrompt() {\n const config = {\n description: 'Help organize and manage files in Google Drive',\n argsSchema: {} as const,\n };\n\n return {\n name: 'organize-files',\n config,\n handler: async () => ({\n messages: [\n {\n role: 'user',\n content: {\n type: 'text',\n text: 'You are an expert file organizer assistant. Help me organize my Google Drive files.',\n },\n },\n ],\n }),\n } satisfies PromptModule;\n}\n"],"names":["createPrompt","config","description","argsSchema","name","handler","messages","role","content","type","text"],"mappings":"AAEA,eAAe,SAASA;IACtB,MAAMC,SAAS;QACbC,aAAa;QACbC,YAAY,CAAC;IACf;IAEA,OAAO;QACLC,MAAM;QACNH;QACAI,SAAS,UAAa,CAAA;gBACpBC,UAAU;oBACR;wBACEC,MAAM;wBACNC,SAAS;4BACPC,MAAM;4BACNC,MAAM;wBACR;oBACF;iBACD;YACH,CAAA;IACF;AACF"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import type { RequestHandlerExtra } from '@modelcontextprotocol/sdk/shared/protocol.js';
|
|
2
|
+
import type { ServerNotification, ServerRequest } from '@modelcontextprotocol/sdk/types.js';
|
|
3
|
+
export default function createPrompt(): {
|
|
4
|
+
name: string;
|
|
5
|
+
config: {
|
|
6
|
+
description: string;
|
|
7
|
+
};
|
|
8
|
+
handler: (_args: {
|
|
9
|
+
[x: string]: unknown;
|
|
10
|
+
}, _extra: RequestHandlerExtra<ServerRequest, ServerNotification>) => Promise<{
|
|
11
|
+
messages: {
|
|
12
|
+
role: "user";
|
|
13
|
+
content: {
|
|
14
|
+
type: "text";
|
|
15
|
+
text: string;
|
|
16
|
+
};
|
|
17
|
+
}[];
|
|
18
|
+
}>;
|
|
19
|
+
};
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
export default function createPrompt() {
|
|
2
|
+
const config = {
|
|
3
|
+
description: 'Reference guide for Google Drive query syntax'
|
|
4
|
+
};
|
|
5
|
+
const handler = async (_args, _extra)=>{
|
|
6
|
+
return {
|
|
7
|
+
messages: [
|
|
8
|
+
{
|
|
9
|
+
role: 'user',
|
|
10
|
+
content: {
|
|
11
|
+
type: 'text',
|
|
12
|
+
text: `# Google Drive Query Syntax Reference
|
|
13
|
+
|
|
14
|
+
## Logical Operators
|
|
15
|
+
- \`$and\`: Array of conditions that ALL must match
|
|
16
|
+
- \`$or\`: Array of conditions where ANY must match
|
|
17
|
+
- \`$not\`: Condition that must NOT match
|
|
18
|
+
|
|
19
|
+
## File/Folder Fields
|
|
20
|
+
- \`name\`: Search by name (partial match, case-insensitive)
|
|
21
|
+
- \`mimeType\`: Filter by MIME type
|
|
22
|
+
- \`fullText\`: Search file content and metadata
|
|
23
|
+
- \`parentId\`: Search within folder (use "root" for My Drive)
|
|
24
|
+
- \`owner\`: Filter by owner email
|
|
25
|
+
|
|
26
|
+
## Boolean Flags
|
|
27
|
+
- \`starred\`: true/false
|
|
28
|
+
- \`sharedWithMe\`: true/false
|
|
29
|
+
- \`trashed\`: true/false (tools auto-filter trashed by default)
|
|
30
|
+
|
|
31
|
+
## Date Range
|
|
32
|
+
\`\`\`json
|
|
33
|
+
{ "modifiedTime": { "$gte": "2024-01-01", "$lt": "2024-12-31" } }
|
|
34
|
+
\`\`\`
|
|
35
|
+
|
|
36
|
+
## Common MIME Types
|
|
37
|
+
- \`application/vnd.google-apps.folder\`: Folders
|
|
38
|
+
- \`application/vnd.google-apps.document\`: Google Docs
|
|
39
|
+
- \`application/vnd.google-apps.spreadsheet\`: Google Sheets
|
|
40
|
+
- \`application/vnd.google-apps.presentation\`: Google Slides
|
|
41
|
+
- \`application/pdf\`: PDF files
|
|
42
|
+
- \`image/jpeg\`, \`image/png\`: Images
|
|
43
|
+
|
|
44
|
+
## Field Operators (for multi-value fields)
|
|
45
|
+
- \`$any\`: OR - matches if ANY value matches
|
|
46
|
+
- \`$all\`: AND - matches if ALL values match
|
|
47
|
+
- \`$none\`: NOT - matches if NONE match
|
|
48
|
+
|
|
49
|
+
## Escape Hatch
|
|
50
|
+
- \`rawDriveQuery\`: Raw Google Drive query syntax
|
|
51
|
+
|
|
52
|
+
## Example Queries
|
|
53
|
+
\`\`\`json
|
|
54
|
+
// PDFs modified this year
|
|
55
|
+
{ "mimeType": "application/pdf", "modifiedTime": { "$gte": "2024-01-01" } }
|
|
56
|
+
|
|
57
|
+
// Starred spreadsheets
|
|
58
|
+
{ "mimeType": "application/vnd.google-apps.spreadsheet", "starred": true }
|
|
59
|
+
|
|
60
|
+
// Files in specific folder
|
|
61
|
+
{ "parentId": "1abc123xyz" }
|
|
62
|
+
|
|
63
|
+
// Search by name
|
|
64
|
+
{ "name": "budget" }
|
|
65
|
+
|
|
66
|
+
// Complex: shared PDFs or Docs
|
|
67
|
+
{ "$or": [
|
|
68
|
+
{ "mimeType": "application/pdf", "sharedWithMe": true },
|
|
69
|
+
{ "mimeType": "application/vnd.google-apps.document", "sharedWithMe": true }
|
|
70
|
+
]}
|
|
71
|
+
\`\`\``
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
]
|
|
75
|
+
};
|
|
76
|
+
};
|
|
77
|
+
return {
|
|
78
|
+
name: 'query-syntax',
|
|
79
|
+
config,
|
|
80
|
+
handler
|
|
81
|
+
};
|
|
82
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["/Users/kevin/Dev/Projects/ai/mcp-z/servers/mcp-drive/src/mcp/prompts/query-syntax.ts"],"sourcesContent":["import type { PromptModule } from '@mcp-z/server';\nimport type { RequestHandlerExtra } from '@modelcontextprotocol/sdk/shared/protocol.js';\nimport type { ServerNotification, ServerRequest } from '@modelcontextprotocol/sdk/types.js';\n\nexport default function createPrompt() {\n const config = {\n description: 'Reference guide for Google Drive query syntax',\n };\n\n const handler = async (_args: { [x: string]: unknown }, _extra: RequestHandlerExtra<ServerRequest, ServerNotification>) => {\n return {\n messages: [\n {\n role: 'user' as const,\n content: {\n type: 'text' as const,\n text: `# Google Drive Query Syntax Reference\n\n## Logical Operators\n- \\`$and\\`: Array of conditions that ALL must match\n- \\`$or\\`: Array of conditions where ANY must match\n- \\`$not\\`: Condition that must NOT match\n\n## File/Folder Fields\n- \\`name\\`: Search by name (partial match, case-insensitive)\n- \\`mimeType\\`: Filter by MIME type\n- \\`fullText\\`: Search file content and metadata\n- \\`parentId\\`: Search within folder (use \"root\" for My Drive)\n- \\`owner\\`: Filter by owner email\n\n## Boolean Flags\n- \\`starred\\`: true/false\n- \\`sharedWithMe\\`: true/false\n- \\`trashed\\`: true/false (tools auto-filter trashed by default)\n\n## Date Range\n\\`\\`\\`json\n{ \"modifiedTime\": { \"$gte\": \"2024-01-01\", \"$lt\": \"2024-12-31\" } }\n\\`\\`\\`\n\n## Common MIME Types\n- \\`application/vnd.google-apps.folder\\`: Folders\n- \\`application/vnd.google-apps.document\\`: Google Docs\n- \\`application/vnd.google-apps.spreadsheet\\`: Google Sheets\n- \\`application/vnd.google-apps.presentation\\`: Google Slides\n- \\`application/pdf\\`: PDF files\n- \\`image/jpeg\\`, \\`image/png\\`: Images\n\n## Field Operators (for multi-value fields)\n- \\`$any\\`: OR - matches if ANY value matches\n- \\`$all\\`: AND - matches if ALL values match\n- \\`$none\\`: NOT - matches if NONE match\n\n## Escape Hatch\n- \\`rawDriveQuery\\`: Raw Google Drive query syntax\n\n## Example Queries\n\\`\\`\\`json\n// PDFs modified this year\n{ \"mimeType\": \"application/pdf\", \"modifiedTime\": { \"$gte\": \"2024-01-01\" } }\n\n// Starred spreadsheets\n{ \"mimeType\": \"application/vnd.google-apps.spreadsheet\", \"starred\": true }\n\n// Files in specific folder\n{ \"parentId\": \"1abc123xyz\" }\n\n// Search by name\n{ \"name\": \"budget\" }\n\n// Complex: shared PDFs or Docs\n{ \"$or\": [\n { \"mimeType\": \"application/pdf\", \"sharedWithMe\": true },\n { \"mimeType\": \"application/vnd.google-apps.document\", \"sharedWithMe\": true }\n]}\n\\`\\`\\``,\n },\n },\n ],\n };\n };\n\n return {\n name: 'query-syntax',\n config,\n handler,\n } satisfies PromptModule;\n}\n"],"names":["createPrompt","config","description","handler","_args","_extra","messages","role","content","type","text","name"],"mappings":"AAIA,eAAe,SAASA;IACtB,MAAMC,SAAS;QACbC,aAAa;IACf;IAEA,MAAMC,UAAU,OAAOC,OAAiCC;QACtD,OAAO;YACLC,UAAU;gBACR;oBACEC,MAAM;oBACNC,SAAS;wBACPC,MAAM;wBACNC,MAAM,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;MA2Db,CAAC;oBACG;gBACF;aACD;QACH;IACF;IAEA,OAAO;QACLC,MAAM;QACNV;QACAE;IACF;AACF"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { ResourceTemplate } from '@modelcontextprotocol/sdk/server/mcp.js';
|
|
2
|
+
import type { RequestHandlerExtra } from '@modelcontextprotocol/sdk/shared/protocol.js';
|
|
3
|
+
import type { ReadResourceResult, ServerNotification, ServerRequest } from '@modelcontextprotocol/sdk/types.js';
|
|
4
|
+
export default function createResource(): {
|
|
5
|
+
name: string;
|
|
6
|
+
template: ResourceTemplate;
|
|
7
|
+
config: import("@modelcontextprotocol/sdk/server/mcp.js").ResourceMetadata;
|
|
8
|
+
handler: (uri: URL, variables: Record<string, string | string[]>, extra: RequestHandlerExtra<ServerRequest, ServerNotification>) => Promise<ReadResourceResult>;
|
|
9
|
+
};
|