Skip to main content
Glama
masseater
by masseater

upload_file

Upload files to process and index them for searchable knowledge retrieval using RAG (Retrieval-Augmented Generation) technology.

Instructions

Upload a file to the FileSearchStore for RAG indexing. The file will be processed and made searchable.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
filePathYesAbsolute path to the file to upload (e.g., /path/to/document.pdf)
mimeTypeNoMIME type of the file (e.g., application/pdf, text/markdown). Auto-detected if not provided.
displayNameNoDisplay name for the file in the store. Uses filename if not provided.
metadataNoCustom metadata as key-value pairs. Values can be strings or numbers. Maximum 20 entries per document. Example: {"category": "guide", "year": 2025}

Implementation Reference

  • The execute method contains the core handler logic for the 'upload_file' tool: ensures the store exists, determines display name and MIME type, prepares upload arguments including metadata conversion, calls geminiClient.uploadFile, and returns the result.
    async execute(args: UploadFileArgs): Promise<MCPToolResponse<UploadFileResult>> { const { geminiClient, storeDisplayName } = this.context; // Ensure store exists const store = await geminiClient.ensureStore(storeDisplayName); // Determine display name const displayName = args.displayName ?? basename(args.filePath); // Auto-detect MIME type if not provided let mimeType = args.mimeType; if (!mimeType) { const ext = args.filePath.split(".").pop()?.toLowerCase(); mimeType = this.getMimeTypeFromExtension(ext ?? ""); } // Upload file const uploadArgs: { storeName: string; filePath: string; mimeType: string; displayName: string; metadata?: CustomMetadata[]; } = { storeName: store.name, filePath: args.filePath, mimeType, displayName, }; if (args.metadata) { uploadArgs.metadata = convertMetadataInput(args.metadata); } const result = await geminiClient.uploadFile(uploadArgs); return { success: true, message: `File uploaded successfully: ${displayName}`, data: { documentName: result.documentName, filePath: args.filePath, displayName, storeName: store.name, }, }; }
  • Defines the UploadFileArgs and UploadFileResult types, the tool name and description, and the Zod input schema via getInputSchema() for the 'upload_file' tool.
    type UploadFileArgs = { filePath: string; mimeType?: string; displayName?: string; metadata?: MetadataInput; }; type UploadFileResult = { documentName: string; filePath: string; displayName: string; storeName: string; }; export class UploadFileTool extends BaseTool<UploadFileArgs> { readonly name = "upload_file"; readonly description = "Upload a file to the FileSearchStore for RAG indexing. The file will be processed and made searchable."; getInputSchema() { return z.object({ filePath: z .string() .describe( "Absolute path to the file to upload (e.g., /path/to/document.pdf)", ), mimeType: z .string() .optional() .describe( "MIME type of the file (e.g., application/pdf, text/markdown). Auto-detected if not provided.", ), displayName: z .string() .optional() .describe( "Display name for the file in the store. Uses filename if not provided.", ), metadata: z .record(z.union([z.string(), z.number()])) .optional() .describe( "Custom metadata as key-value pairs. Values can be strings or numbers. Maximum 20 entries per document. Example: {\"category\": \"guide\", \"year\": 2025}", ), }); }
  • Instantiates the UploadFileTool with context and stores it in the tool instances map during registry initialization.
    initialize(context: ToolContext): void { // Manual tool registration for safety and explicit review const tools: Tool[] = [ new UploadFileTool(context), new UploadContentTool(context), new QueryTool(context), ]; for (const tool of tools) { this.toolInstances.set(tool.name, tool); } console.log(`✅ ToolRegistry initialized with ${String(this.toolInstances.size)} tools`); }
  • Registers all tools, including 'upload_file', with the MCP server using the tool's name, description, input schema, and bound handler method.
    setupToolHandlers(): void { for (const tool of this.toolInstances.values()) { // Pass Zod schema directly to MCP SDK // SDK handles JSON Schema conversion internally for both stdio and HTTP transports this.server.registerTool( tool.name, { description: tool.description, inputSchema: tool.getInputSchema().shape, }, tool.handler.bind(tool) as never, ); this.registeredTools.push(tool.name); } }
Install Server

Other Tools

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/masseater/gemini-rag-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server