Skip to main content
Glama

Firebase MCP Server

by gemini-dk
storageClient.ts2.76 kB
import { admin, getProjectId } from './firebaseConfig'; //const storage = admin.storage().bucket(); /** * List files in a given path in Firebase Storage. * @param {string} [path] - The optional path to list files from. If not provided, the root is used. * @returns {Promise<{ content: { type: string , text: string }[] }>} - A promise that resolves to an object containing file names. */ export async function listDirectoryFiles(path?: string, pageSize: number = 10, pageToken?: string): Promise<{ content: { type: string , text: string }[] }> { const prefix = path ? (path === '' ? '' : (path.endsWith('/') ? path : `${path}/`)) : ''; const [files, , apiResponse] = await admin.storage().bucket().getFiles({ prefix, delimiter: '/', maxResults: pageSize, pageToken }); const nextPageToken = apiResponse.nextPageToken as string || undefined; const fileNames = await Promise.all(files.map(async (file) => { const [signedUrl] = await file.getSignedUrl({ action: 'read', expires: Date.now() + 1000 * 60 * 60 // 1 hour }); return { type: "file", name: file.name, downloadURL: signedUrl }; })); const projectId = getProjectId(); const bucketName = admin.storage().bucket().name; const directoryNames = (apiResponse.prefixes || []).map((prefix:string) => { //const encodedPrefix = encodeURIComponent(prefix).replace(/'/g, '%27').replace(/%20/g, '+'); const tmpPrefix = prefix.replace(/\/$/, ''); const encodedPrefix = `~2F${tmpPrefix.replace(/\//g, '~2F')}`; const consoleUrl = `https://console.firebase.google.com/project/${projectId}/storage/${bucketName}/files/${encodedPrefix}`; return { type: "directory", name: prefix, url: consoleUrl }; }); const result = { nextPageToken: nextPageToken, files: [...fileNames, ...directoryNames], hasMore: nextPageToken !== undefined }; return { content:[ { type: "text", text: JSON.stringify(result,null,2) } ] } } /** * Get file information including metadata and download URL. * @param {string} filePath - The path of the file to get information for. * @returns {Promise<{ content: object }>} - A promise that resolves to an object containing file metadata and download URL. */ export async function getFileInfo(filePath: string): Promise<{ content: { type: string , text: string }[] }> { const file = admin.storage().bucket().file(filePath); const [metadata] = await file.getMetadata(); const [url] = await file.getSignedUrl({ action: 'read', expires: Date.now() + 1000 * 60 * 60 // 1 hour }); const result = { metadata, downloadUrl:url }; return { content: [ { type:'text', text: JSON.stringify(result,null,2) } ] }; }

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/gemini-dk/mcp-server-firebase'

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