Skip to main content
Glama

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
NameRequiredDescriptionDefault
collectionYesThe name or ID of the collection.
fileFieldYesThe name of the file field.
recordIdYesThe ID of the record containing the file.

Implementation Reference

  • 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}` }], }; }
  • 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'] } }
  • 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; }
  • 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);
  • Inclusion of file tools (including download_file) in the overall tools list returned by registerTools.
    ...listFileTools(),

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/mabeldata/pocketbase-mcp'

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