Skip to main content
Glama

mcp-google-sheets

dynamic-dropdowns.ts14.6 kB
import { Property } from '@activepieces/pieces-framework'; import { HttpMethod } from '@activepieces/pieces-common'; import { missiveCommon } from './client'; export const contactBookDropdown = Property.Dropdown({ displayName: 'Contact Book', description: 'Select the contact book where the contact will be created', required: true, refreshers: [], options: async ({ auth }) => { if (!auth) { return { disabled: true, placeholder: 'Please authenticate first', options: [], }; } try { const response = await missiveCommon.apiCall({ auth: auth as string, method: HttpMethod.GET, resourceUri: '/contact_books', }); const contactBooks = response.body?.contact_books || []; const options = contactBooks.map((book: any) => ({ label: book.name, value: book.id, })); return { disabled: false, options, }; } catch (error) { return { disabled: true, placeholder: 'Failed to load contact books', options: [], }; } }, }); export const organizationDropdown = Property.Dropdown({ displayName: 'Organization', description: 'Select an organization', required: false, refreshers: [], options: async ({ auth }) => { if (!auth) { return { disabled: true, placeholder: 'Please authenticate first', options: [], }; } try { const response = await missiveCommon.apiCall({ auth: auth as string, method: HttpMethod.GET, resourceUri: '/organizations', }); const organizations = response.body?.organizations || []; const options = organizations.map((org: any) => ({ label: org.name, value: org.id, })); return { disabled: false, options, }; } catch (error) { return { disabled: true, placeholder: 'Failed to load organizations', options: [], }; } }, }); export const groupDropdown = Property.Dropdown({ displayName: 'Group', description: 'Select a group', required: false, refreshers: [], options: async ({ auth }) => { if (!auth) { return { disabled: true, placeholder: 'Please authenticate first', options: [], }; } try { const response = await missiveCommon.apiCall({ auth: auth as string, method: HttpMethod.GET, resourceUri: '/groups', }); const groups = response.body?.groups || []; const options = groups.map((group: any) => ({ label: group.name, value: group.id, })); return { disabled: false, options, }; } catch (error) { return { disabled: true, placeholder: 'Failed to load groups', options: [], }; } }, }); export const contactGroupDropdown = Property.Dropdown({ displayName: 'Contact Group', description: 'Select a contact group or organization', required: false, refreshers: ['contact_book', 'group_kind'], options: async ({ auth, contact_book, group_kind }) => { if (!auth) { return { disabled: true, placeholder: 'Please authenticate first', options: [], }; } if (!contact_book) { return { disabled: true, placeholder: 'Please select a contact book first', options: [], }; } if (!group_kind) { return { disabled: true, placeholder: 'Please select a group type first', options: [], }; } try { const response = await missiveCommon.apiCall({ auth: auth as string, method: HttpMethod.GET, resourceUri: `/contact_groups?contact_book=${contact_book}&kind=${group_kind}`, }); const contactGroups = response.body?.contact_groups || []; const options = contactGroups.map((group: any) => ({ label: group.name, value: group.id, })); return { disabled: false, options, }; } catch (error) { return { disabled: true, placeholder: 'Failed to load contact groups', options: [], }; } }, }); export const optionalContactBookDropdown = Property.Dropdown({ displayName: 'Contact Book', description: 'Contact book to search within (optional)', required: false, refreshers: [], options: async ({ auth }) => { if (!auth) { return { disabled: true, placeholder: 'Please authenticate first', options: [], }; } try { const response = await missiveCommon.apiCall({ auth: auth as string, method: HttpMethod.GET, resourceUri: '/contact_books', }); const contactBooks = response.body?.contact_books || []; const options = contactBooks.map((book: any) => ({ label: book.name, value: book.id, })); return { disabled: false, options, }; } catch (error) { return { disabled: true, placeholder: 'Failed to load contact books', options: [], }; } }, }); export const contactDropdown = Property.Dropdown({ displayName: 'Contact', description: 'Select a contact', required: true, refreshers: [], options: async ({ auth }) => { if (!auth) { return { disabled: true, placeholder: 'Please authenticate first', options: [], }; } try { const response = await missiveCommon.apiCall({ auth: auth as string, method: HttpMethod.GET, resourceUri: '/contacts?limit=200', }); const contacts = response.body?.contacts || []; const options = contacts.map((contact: any) => { const name = [contact.first_name, contact.last_name].filter(Boolean).join(' ') || 'Unnamed Contact'; const email = contact.infos?.find((info: any) => info.kind === 'email')?.value; const label = email ? `${name} (${email})` : name; return { label: label, value: contact.id, }; }); return { disabled: false, options, }; } catch (error) { return { disabled: true, placeholder: 'Failed to load contacts', options: [], }; } }, }); export const teamDropdown = Property.Dropdown({ displayName: 'Team', description: 'Select a team', required: false, refreshers: ['organization'], options: async ({ auth, organization }) => { if (!auth) { return { disabled: true, placeholder: 'Please authenticate first', options: [], }; } if (!organization) { return { disabled: true, placeholder: 'Please select an organization first', options: [], }; } try { const response = await missiveCommon.apiCall({ auth: auth as string, method: HttpMethod.GET, resourceUri: `/teams?organization=${organization}`, }); const teams = response.body?.teams || []; const options = teams.map((team: any) => ({ label: team.name, value: team.id, })); return { disabled: false, options, }; } catch (error) { return { disabled: true, placeholder: 'Failed to load teams', options: [], }; } }, }); export const sharedLabelDropdown = Property.Dropdown({ displayName: 'Shared Label', description: 'Select a shared label', required: false, refreshers: ['organization'], options: async ({ auth, organization }) => { if (!auth) { return { disabled: true, placeholder: 'Please authenticate first', options: [], }; } if (!organization) { return { disabled: true, placeholder: 'Please select an organization first', options: [], }; } try { const response = await missiveCommon.apiCall({ auth: auth as string, method: HttpMethod.GET, resourceUri: `/shared_labels?organization=${organization}`, }); const sharedLabels = response.body?.shared_labels || []; const options = sharedLabels.map((label: any) => ({ label: label.name, value: label.id, })); return { disabled: false, options, }; } catch (error) { return { disabled: true, placeholder: 'Failed to load shared labels', options: [], }; } }, }); export const userDropdown = Property.Dropdown({ displayName: 'User', description: 'Select a user', required: false, refreshers: ['organization'], options: async ({ auth, organization }) => { if (!auth) { return { disabled: true, placeholder: 'Please authenticate first', options: [], }; } if (!organization) { return { disabled: true, placeholder: 'Please select an organization first', options: [], }; } try { const response = await missiveCommon.apiCall({ auth: auth as string, method: HttpMethod.GET, resourceUri: `/users?organization=${organization}`, }); const users = response.body?.users || []; const options = users.map((user: any) => ({ label: `${user.name} (${user.email})`, value: user.id, })); return { disabled: false, options, }; } catch (error) { return { disabled: true, placeholder: 'Failed to load users', options: [], }; } }, }); export const membershipOrganizationDropdown = Property.Dropdown({ displayName: 'Organization', description: 'Select an organization for membership', required: false, refreshers: [], options: async ({ auth }) => { if (!auth) { return { disabled: true, placeholder: 'Please authenticate first', options: [], }; } try { const response = await missiveCommon.apiCall({ auth: auth as string, method: HttpMethod.GET, resourceUri: '/organizations', }); const organizations = response.body?.organizations || []; const options = organizations.map((org: any) => ({ label: org.name, value: org.id, })); return { disabled: false, options, }; } catch (error) { return { disabled: true, placeholder: 'Failed to load organizations', options: [], }; } }, }); export const membershipContactGroupDropdown = Property.Dropdown({ displayName: 'Contact Group', description: 'Select a contact group', required: false, refreshers: ['contact_book', 'group_kind'], options: async ({ auth, contact_book, group_kind }) => { if (!auth) { return { disabled: true, placeholder: 'Please authenticate first', options: [], }; } if (!contact_book) { return { disabled: true, placeholder: 'Please select a contact book first', options: [], }; } if (!group_kind) { return { disabled: true, placeholder: 'Please select a group type first', options: [], }; } try { const response = await missiveCommon.apiCall({ auth: auth as string, method: HttpMethod.GET, resourceUri: `/contact_groups?contact_book=${contact_book}&kind=${group_kind}`, }); const contactGroups = response.body?.contact_groups || []; const options = contactGroups.map((group: any) => ({ label: group.name, value: group.id, })); return { disabled: false, options, }; } catch (error) { return { disabled: true, placeholder: 'Failed to load contact groups', options: [], }; } }, });

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