Skip to main content
Glama

mcp-google-sheets

index.ts4.72 kB
import { Property, PiecePropValueSchema, DropdownOption, } from '@activepieces/pieces-framework'; import { HttpMethod, HttpMessageBody, httpClient, AuthenticationType, QueryParams, } from '@activepieces/pieces-common'; import { clicksendAuth } from '../..'; export const clicksendCommon = { phone_number: Property.ShortText({ description: 'The phone number (with country code, e.g., +1234567890)', displayName: 'Phone Number', required: true, }), email: Property.ShortText({ description: 'The email address', displayName: 'Email Address', required: true, }), contact_list_id: Property.Dropdown({ displayName: 'Contact List ID', required: true, refreshers: [], options: async ({ auth }) => { if (!auth) { return { disabled: true, options: [], placeholder: 'Please connect your account first.', }; } const authValue = auth as PiecePropValueSchema<typeof clicksendAuth>; const options: DropdownOption<number>[] = []; let currentPage = 1; let hasNext = true; do { const response = await callClickSendApi<{ data: { next_page_url?: string; data: { list_id: number; list_name: string }[]; }; }>({ method: HttpMethod.GET, username: authValue.username, password: authValue.password, path: '/lists', query: { page: currentPage.toString(), limit: '100' }, }); const items = response.body.data?.data ?? []; for (const list of items) { options.push({ label: list.list_name, value: list.list_id }); } currentPage++; hasNext = !!response.body.data?.next_page_url; } while (hasNext); return { disabled: false, options, }; }, }), contact_id: Property.Dropdown({ displayName: 'Contact ID', required: true, refreshers: ['contact_list_id'], options: async ({ auth, contact_list_id }) => { if (!auth || !contact_list_id) { return { disabled: true, options: [], placeholder: 'Please connect your account first.', }; } const authValue = auth as PiecePropValueSchema<typeof clicksendAuth>; const options: DropdownOption<number>[] = []; let currentPage = 1; let hasNext = true; do { const response = await callClickSendApi<{ data: { next_page_url?: string; data: { contact_id: number; email: string }[]; }; }>({ method: HttpMethod.GET, username: authValue.username, password: authValue.password, path: `/lists/${contact_list_id}/contacts`, query: { page: currentPage.toString(), limit: '100' }, }); const items = response.body.data?.data ?? []; for (const contact of items) { options.push({ label: contact.email, value: contact.contact_id }); } currentPage++; hasNext = !!response.body.data?.next_page_url; } while (hasNext); return { disabled: false, options, }; }, }), sender_id: Property.Dropdown({ displayName: 'From', refreshers: [], required: true, options: async ({ auth }) => { if (!auth) { return { disabled: true, options: [], placeholder: 'Please connect your account first.', }; } const authValue = auth as PiecePropValueSchema<typeof clicksendAuth>; const response = await callClickSendApi<{ data: { user_id: number; username: string }; }>({ method: HttpMethod.GET, path: '/account', username: authValue.username, password: authValue.password, }); return { disabled: false, options: [ { label: response.body.data.username, value: response.body.data.user_id, }, ], }; }, }), }; interface clickSendApiParams { method: HttpMethod; username: string; password: string; path: string; query?: QueryParams; body?: any; } export async function callClickSendApi<T extends HttpMessageBody>( params: clickSendApiParams ) { return await httpClient.sendRequest<T>({ method: params.method, url: `https://rest.clicksend.com/v3${params.path}`, authentication: { type: AuthenticationType.BASIC, username: params.username, password: params.password, }, headers: { 'Content-Type': 'application/json', }, body: params.body, queryParams: params.query, }); }

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