Skip to main content
Glama

mcp-google-sheets

index.ts7.64 kB
import { activeCampaignAuth } from '../../'; import { DynamicPropsValue, PiecePropValueSchema, Property } from '@activepieces/pieces-framework'; import { ActiveCampaignClient } from './client'; import { CUSTOM_FIELD_TYPE } from './constants'; export function makeClient(auth: PiecePropValueSchema<typeof activeCampaignAuth>) { const client = new ActiveCampaignClient(auth.apiUrl, auth.apiKey); return client; } export const activecampaignCommon = { listId: (required = false) => Property.Dropdown({ displayName: 'List', required, refreshers: [], options: async ({ auth }) => { if (!auth) { return { disabled: true, placeholder: 'Please connect your account first', options: [], }; } const client = makeClient(auth as PiecePropValueSchema<typeof activeCampaignAuth>); const res = await client.listContactLists(); return { disabled: false, options: res.lists.map((list) => { return { label: list.name, value: list.id, }; }), }; }, }), accountId: Property.Dropdown({ displayName: 'Account ID', required: true, refreshers: [], options: async ({ auth }) => { if (!auth) { return { disabled: true, placeholder: 'Please connect your account first', options: [], }; } const client = makeClient(auth as PiecePropValueSchema<typeof activeCampaignAuth>); const res = await client.listAccounts(); return { disabled: false, options: res.accounts.map((account) => { return { label: account.name, value: account.id, }; }), }; }, }), contactId: Property.Dropdown({ displayName: 'Contact ID', required: true, refreshers: [], options: async ({ auth }) => { if (!auth) { return { disabled: true, placeholder: 'Please connect your account first', options: [], }; } const client = makeClient(auth as PiecePropValueSchema<typeof activeCampaignAuth>); const res = await client.listContacts(); return { disabled: false, options: res.contacts.map((contact) => { return { label: `${contact.firstName} ${contact.lastName}` ?? contact.email, value: contact.id, }; }), }; }, }), tagId: Property.Dropdown({ displayName: 'Tag ID', required: true, refreshers: [], options: async ({ auth }) => { if (!auth) { return { disabled: true, placeholder: 'Please connect your account first', options: [], }; } const client = makeClient(auth as PiecePropValueSchema<typeof activeCampaignAuth>); const res = await client.listTags(); return { disabled: false, options: res.tags.map((tag) => { return { label: tag.tag, value: tag.id, }; }), }; }, }), accountCustomFields: Property.DynamicProperties({ displayName: 'Account Custom Fields', refreshers: [], required: true, props: async ({ auth }) => { if (!auth) return {}; const client = makeClient(auth as PiecePropValueSchema<typeof activeCampaignAuth>); const res = await client.listAccountCustomFields(); const fields: DynamicPropsValue = {}; for (const field of res.accountCustomFieldMeta) { switch (field.fieldType) { case CUSTOM_FIELD_TYPE.TEXT: case CUSTOM_FIELD_TYPE.HIDDEN: fields[field.id] = Property.ShortText({ displayName: field.fieldLabel, required: false, }); break; case CUSTOM_FIELD_TYPE.TEXTAREA: fields[field.id] = Property.LongText({ displayName: field.fieldLabel, required: false, }); break; case CUSTOM_FIELD_TYPE.DATE: fields[field.id] = Property.DateTime({ displayName: field.fieldLabel, description: 'Please use YYYY-MM-DD format.', required: false, }); break; case CUSTOM_FIELD_TYPE.DATETIME: fields[field.id] = Property.DateTime({ displayName: field.fieldLabel, required: false, }); break; case CUSTOM_FIELD_TYPE.MONEY: case CUSTOM_FIELD_TYPE.NUMBER: fields[field.id] = Property.Number({ displayName: field.fieldLabel, required: false, }); break; case CUSTOM_FIELD_TYPE.DROPDOWN: case CUSTOM_FIELD_TYPE.RADIO: fields[field.id] = Property.StaticDropdown({ displayName: field.fieldLabel, required: false, options: { disabled: false, options: field.fieldOptions ? field.fieldOptions?.map((option) => { return { label: option, value: option, }; }) : [], }, }); break; case CUSTOM_FIELD_TYPE.CHECKBOX: case CUSTOM_FIELD_TYPE.LIST_BOX: case CUSTOM_FIELD_TYPE.MULTISELECT: fields[field.id] = Property.StaticMultiSelectDropdown({ displayName: field.fieldLabel, required: false, options: { disabled: false, options: field.fieldOptions ? field.fieldOptions?.map((option) => { return { label: option, value: option, }; }) : [], }, }); break; } } return fields; }, }), contactCustomFields: Property.DynamicProperties({ displayName: 'Contact Custom Fields', refreshers: [], required: true, props: async ({ auth }) => { if (!auth) return {}; const client = makeClient(auth as PiecePropValueSchema<typeof activeCampaignAuth>); const res = await client.listContactCustomFields(); const fields: DynamicPropsValue = {}; for (const field of res.fields) { switch (field.type) { case CUSTOM_FIELD_TYPE.TEXT: case CUSTOM_FIELD_TYPE.HIDDEN: fields[field.id] = Property.ShortText({ displayName: field.title, required: false, }); break; case CUSTOM_FIELD_TYPE.TEXTAREA: fields[field.id] = Property.LongText({ displayName: field.title, required: false, }); break; case CUSTOM_FIELD_TYPE.DATE: fields[field.id] = Property.DateTime({ displayName: field.title, description: 'Please use YYYY-MM-DD format.', required: false, }); break; case CUSTOM_FIELD_TYPE.DATETIME: fields[field.id] = Property.DateTime({ displayName: field.title, required: false, }); break; case CUSTOM_FIELD_TYPE.MONEY: case CUSTOM_FIELD_TYPE.NUMBER: fields[field.id] = Property.Number({ displayName: field.title, required: false, }); break; case CUSTOM_FIELD_TYPE.DROPDOWN: case CUSTOM_FIELD_TYPE.RADIO: fields[field.id] = Property.StaticDropdown({ displayName: field.title, required: false, options: { disabled: false, options: res.fieldOptions .filter((option) => option.field === field.id) .map((option) => { return { label: option.label, value: option.value, }; }), }, }); break; case CUSTOM_FIELD_TYPE.CHECKBOX: case CUSTOM_FIELD_TYPE.LIST_BOX: case CUSTOM_FIELD_TYPE.MULTISELECT: fields[field.id] = Property.StaticMultiSelectDropdown({ displayName: field.title, required: false, options: { disabled: false, options: res.fieldOptions .filter((option) => option.field === field.id) .map((option) => { return { label: option.label, value: option.value, }; }), }, }); break; } } return fields; }, }), };

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