download_file
Get a download URL for a file stored in a PocketBase collection record field by specifying collection, record ID, and file field name.
Instructions
Get the URL to download a file from a PocketBase collection record field.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| collection | Yes | The name or ID of the collection. | |
| recordId | Yes | The ID of the record containing the file. | |
| fileField | Yes | The name of the file field. |
Implementation Reference
- src/tools/file-tools.ts:83-107 (handler)The core handler function for download_file. It fetches the record from PocketBase, extracts the filename from the specified file field, generates a download URL using pb.files.getUrl(), and returns the URL 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/types/tool-types.ts:66-71 (schema)The DownloadFileArgs interface defining the expected input parameters: collection, recordId, fileField, and downloadPath (though downloadPath is unused in the handler).
export interface DownloadFileArgs { collection: string; recordId: string; fileField: string; downloadPath: string; } - src/tools/index.ts:49-60 (registration)The routing logic in handleToolCall that dispatches 'download_file' to handleFileToolCall in file-tools.ts.
} else if (name === 'upload_file' || name === 'download_file') { return handleFileToolCall(name, toolArgs, pb); } else if (name === 'create_migration' || name === 'create_collection_migration' || name === 'add_field_migration' || name === 'list_migrations') { return handleMigrationToolCall(name, toolArgs, pb); } else if (name === 'list_logs' || name === 'get_log' || name === 'get_logs_stats') { return handleLogToolCall(name, toolArgs, pb); } else if (name === 'list_cron_jobs' || name === 'run_cron_job') { return handleCronToolCall(name, toolArgs, pb); } else { throw methodNotFoundError(name); } } - src/tools/file-tools.ts:28-41 (registration)The tool definition/registration metadata for 'download_file', including its description, inputSchema (collection, recordId, fileField), and required fields.
{ 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/tools/file-tools.ts:49-57 (helper)The handleFileToolCall helper function that routes 'download_file' to the downloadFile handler.
export async function handleFileToolCall(name: string, args: any, pb: PocketBase): Promise<ToolResult> { switch (name) { case 'upload_file': return uploadFile(args as UploadFileArgs, pb); case 'download_file': return downloadFile(args as DownloadFileArgs, pb); default: throw new Error(`Unknown file tool: ${name}`); }