Skip to main content
Glama

mcp-google-sheets

props.ts10 kB
import { Property } from "@activepieces/pieces-framework"; import { makeRequest } from "./client"; import { HttpMethod } from "@activepieces/pieces-common"; export const resourceTypeDropdown = Property.Dropdown({ displayName: 'Resource Type', description: 'Select the type of resource to upload to Cloudinary.', required: true, refreshers: [], options: async () => { return { disabled: false, options: [ { label: 'Image', value: 'image' }, { label: 'Video', value: 'video' }, { label: 'Raw', value: 'raw' }, ], }; }, }); export const resourceDropdown = Property.Dropdown({ displayName: 'Resource ID', description: 'Select the team containing the database', required: true, refreshers: ['auth', 'resource_type'], options: async ({ auth, resource_type }) => { if (!auth) { return { disabled: true, options: [], placeholder: 'Please connect your account first', }; } try { const resources = await makeRequest(auth, HttpMethod.GET, `/resources/${resource_type}`); return { disabled: false, options: resources.resources.map((resource: any) => ({ label: resource.public_id, value: resource.asset_id, })), }; } catch (error) { return { disabled: true, options: [], placeholder: 'Error loading teams', }; } }, }); export const resourceAssetIdsDropdown = Property.MultiSelectDropdown({ displayName: 'Resource Ids', description: 'Select the Resource', required: true, refreshers: ['auth', 'resource_type'], options: async ({ auth, resource_type }) => { if (!auth) { return { disabled: true, options: [], placeholder: 'Please connect your account first', }; } try { const resources = await makeRequest(auth, HttpMethod.GET, `/resources/${resource_type}`); return { disabled: false, options: resources.resources.map((resource: any) => ({ label: resource.public_id, value: resource.asset_id, })), }; } catch (error) { return { disabled: true, options: [], placeholder: 'Error loading teams', }; } }, }); export const folderDropdown = Property.Dropdown({ displayName: 'Folder', description: 'Select an existing folder or type a new folder path', required: false, refreshers: ['auth'], options: async ({ auth }) => { if (!auth) { return { disabled: true, options: [], placeholder: 'Please connect your account first', }; } try { const response = await makeRequest(auth, HttpMethod.GET, `/folders`); const folders = response.folders || []; return { disabled: false, options: [ { label: '(Root - no folder)', value: '' }, ...folders.map((folder: any) => ({ label: folder.path, value: folder.path, })), ], placeholder: 'Select a folder or type a new path', }; } catch (error) { return { disabled: true, options: [], placeholder: 'Error loading folders - you can still type a folder path', }; } }, }); export const tagsDropdown = Property.Dropdown({ displayName: 'Tags', description: 'Select existing tags or type new ones (comma-separated)', required: false, refreshers: ['auth', 'resource_type'], options: async ({ auth, resource_type }) => { if (!auth) { return { disabled: true, options: [], placeholder: 'Please connect your account first', }; } const type = resource_type || 'image'; try { const response = await makeRequest(auth, HttpMethod.GET, `/tags/${type}?max_results=100`); const tags = response.tags || []; return { disabled: false, options: tags.map((tag: string) => ({ label: tag, value: tag, })), placeholder: 'Select existing tags or type new ones', }; } catch (error) { return { disabled: true, options: [], placeholder: 'Error loading tags - you can still type tags manually', }; } }, }); export const multiTagsDropdown = Property.MultiSelectDropdown({ displayName: 'Tags', description: 'Select multiple existing tags', required: false, refreshers: ['auth', 'resource_type'], options: async ({ auth, resource_type }) => { if (!auth) { return { disabled: true, options: [], placeholder: 'Please connect your account first', }; } const type = resource_type || 'image'; try { const response = await makeRequest(auth, HttpMethod.GET, `/tags/${type}?max_results=100`); const tags = response.tags || []; return { disabled: false, options: tags.map((tag: string) => ({ label: tag, value: tag, })), }; } catch (error) { return { disabled: true, options: [], placeholder: 'Error loading tags', }; } }, }); export const subfolderDropdown = Property.Dropdown({ displayName: 'Subfolder', description: 'Select a subfolder within the parent folder', required: false, refreshers: ['auth', 'folder'], options: async ({ auth, folder }) => { if (!auth || !folder) { return { disabled: true, options: [], placeholder: 'Please select a parent folder first', }; } try { const response = await makeRequest(auth, HttpMethod.GET, `/folders/${encodeURIComponent(folder as string)}`); const subfolders = response.folders || []; return { disabled: false, options: [ { label: '(No subfolder)', value: '' }, ...subfolders.map((folder: any) => ({ label: folder.name, value: folder.path, })), ], }; } catch (error) { return { disabled: true, options: [], placeholder: 'Error loading subfolders', }; } }, }); export const publicIdsDropdown = Property.MultiSelectDropdown({ displayName: 'Public IDs', description: 'Select assets to delete by their public IDs', required: false, refreshers: ['auth', 'resource_type'], options: async ({ auth, resource_type }) => { if (!auth) { return { disabled: true, options: [], placeholder: 'Please connect your account first', }; } const type = resource_type || 'image'; try { const response = await makeRequest(auth, HttpMethod.GET, `/resources/${type}?max_results=100`); const resources = response.resources || []; return { disabled: false, options: resources.map((resource: any) => ({ label: `${resource.public_id} (${resource.format || 'unknown'})`, value: resource.public_id, })), placeholder: 'Select assets to delete', }; } catch (error) { return { disabled: true, options: [], placeholder: 'Error loading assets - you can still type public IDs manually', }; } }, }); // Single-select version for finding a specific resource export const publicIdDropdown = Property.Dropdown({ displayName: 'Public ID', description: 'Select an asset to find by its public ID', required: false, refreshers: ['auth', 'resource_type'], options: async ({ auth, resource_type }) => { if (!auth) { return { disabled: true, options: [], placeholder: 'Please connect your account first', }; } const type = resource_type || 'image'; try { const response = await makeRequest(auth, HttpMethod.GET, `/resources/${type}?max_results=100`); const resources = response.resources || []; return { disabled: false, options: resources.map((resource: any) => ({ label: `${resource.public_id} (${resource.format || 'unknown'})`, value: resource.public_id, })), placeholder: 'Select an asset to find', }; } catch (error) { return { disabled: true, options: [], placeholder: 'Error loading assets - you can still type public ID manually', }; } }, });

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/activepieces/activepieces'

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