download_file
Retrieve the URL to download a file stored in a specific field of a PocketBase collection record by specifying the collection, record ID, and file field name.
Instructions
Get the URL to download a file from a PocketBase collection record field.
Input Schema
TableJSON Schema
| Name | Required | Description | Default |
|---|---|---|---|
| collection | Yes | The name or ID of the collection. | |
| fileField | Yes | The name of the file field. | |
| recordId | Yes | The ID of the record containing the file. |
Implementation Reference
- src/tools/file-tools.ts:83-107 (handler)Core handler function that validates input, fetches the PocketBase record, extracts the filename from the specified file field, generates the download URL using pb.files.getUrl, and returns it to the client.async function downloadFile(args: DownloadFileArgs, pb: PocketBase): Promise<ToolResult> { if (!args.collection || !args.recordId || !args.fileField) { throw invalidParamsError("Missing required arguments: collection, recordId, fileField"); } // Fetch the record to get the filename associated with the file field const record = await pb.collection(args.collection).getOne(args.recordId, { // Optionally specify fields to fetch only the necessary data // fields: `${args.fileField}` }); // Ensure the file field exists and has a value const fileName = record[args.fileField]; if (!fileName || typeof fileName !== 'string') { throw invalidParamsError(`File field '${args.fileField}' not found or empty on record ${args.recordId}`); } // Get the file URL using the filename from the record const fileUrl = pb.files.getUrl(record, fileName); // Use pb.files.getUrl // Return the URL to the client return { content: [{ type: 'text', text: `Download URL for ${fileName}: ${fileUrl}` }], }; }
- src/tools/file-tools.ts:28-41 (registration)ToolInfo registration for 'download_file', including name, description, and JSON schema for input validation.{ name: 'download_file', description: 'Get the URL to download a file from a PocketBase collection record field.', inputSchema: { type: 'object', properties: { collection: { type: 'string', description: 'The name or ID of the collection.' }, recordId: { type: 'string', description: 'The ID of the record containing the file.' }, fileField: { type: 'string', description: 'The name of the file field.' }, // downloadPath is removed - server cannot directly save files for the client }, required: ['collection', 'recordId', 'fileField'] } }
- src/types/tool-types.ts:66-71 (schema)TypeScript interface defining the expected arguments for the download_file tool (note: downloadPath is defined here but not used in implementation).export interface DownloadFileArgs { collection: string; recordId: string; fileField: string; downloadPath: string; }
- src/tools/index.ts:49-50 (registration)Routing logic in the main handleToolCall function that dispatches 'download_file' calls to the file-tools handler.} else if (name === 'upload_file' || name === 'download_file') { return handleFileToolCall(name, toolArgs, pb);
- src/tools/index.ts:19-19 (registration)Inclusion of file tools (including download_file) in the overall tools list returned by registerTools....listFileTools(),