Skip to main content
Glama

mcp-google-sheets

props.ts13.1 kB
import { Property } from '@activepieces/pieces-framework'; import { HttpMethod } from '@activepieces/pieces-common'; import { hunterApiCall } from './index'; export const campaignIdProp = Property.Dropdown({ displayName: 'Campaign', required: true, refreshers: [], options: async ({ auth }) => { if (!auth) { return { disabled: true, placeholder: 'Connect your Hunter account first.', options: [], }; } const resp = await hunterApiCall({ apiKey: auth as string, endpoint: '/campaigns', method: HttpMethod.GET, }); const campaigns = (resp as any).data?.campaigns as Array<{ id: number; name: string; }>; return { disabled: false, options: campaigns.map((c) => ({ label: c.name, value: c.id, })), }; }, }); export const emailsProp = Property.Array({ displayName: 'Emails', required: false, description: 'Email addresses to add as recipients. At least one email or lead ID is required.', defaultValue: [], }); export const leadIdsProp = Property.Array({ displayName: 'Lead IDs', required: false, description: 'Existing lead IDs from your Hunter account to add as recipients.', defaultValue: [], }); export const leadIdsDropdownProp = Property.MultiSelectDropdown({ displayName: 'Leads', required: false, description: 'Select leads from your Hunter account to add as recipients.', refreshers: [], options: async ({ auth }) => { if (!auth) { return { disabled: true, placeholder: 'Connect your Hunter account first.', options: [], }; } const resp = await hunterApiCall({ apiKey: auth as string, endpoint: '/leads', method: HttpMethod.GET, qparams: { limit: '100' } }); const leads = (resp as any).data?.leads || []; return { disabled: false, options: leads.map((lead: any) => ({ label: `${lead.first_name || ''} ${lead.last_name || ''} (${lead.email})`.trim(), value: lead.id })) }; } }); export const domainProp = Property.ShortText({ displayName: 'Domain', required: false, description: 'Domain name to count addresses for (e.g., "stripe.com"). At least one of domain or company is required.', }); export const companyProp = Property.ShortText({ displayName: 'Company', required: false, description: 'Company name to count addresses for (e.g., "Stripe"). At least one of domain or company is required.', }); export const companyLeadProp = Property.ShortText({ displayName: 'Company', required: false, description: 'Name of the company the lead is working in.', }); export const emailTypeProp = Property.Dropdown({ displayName: 'Type', required: false, description: 'Count only "personal" or "generic" email addresses. Leave blank for both.', options: async () => ({ disabled: false, options: [ { label: 'Personal', value: 'personal' }, { label: 'Generic', value: 'generic' }, ], }), refreshers: [] }); export const emailProp = Property.ShortText({ displayName: 'Email', required: true, description: 'The email address of the lead.', }); export const firstNameProp = Property.ShortText({ displayName: 'First Name', required: false, }); export const lastNameProp = Property.ShortText({ displayName: 'Last Name', required: false, }); export const positionProp = Property.ShortText({ displayName: 'Position', required: false, }); export const companyIndustryProp = Property.ShortText({ displayName: 'Company Industry', required: false, description: 'Sector of the company (e.g. Finance, Technology, Education, etc.).', }); export const companySizeProp = Property.ShortText({ displayName: 'Company Size', required: false, description: 'Size of the company (e.g. 1-10, 201-500 employees).', }); export const confidenceScoreProp = Property.Number({ displayName: 'Confidence Score', required: false, description: 'Probability the email is correct (0–100).', }); export const websiteProp = Property.ShortText({ displayName: 'Website', required: false, description: 'Domain name of the company.', }); export const countryCodeProp = Property.ShortText({ displayName: 'Country Code', required: false, description: 'ISO 3166-1 alpha-2 country code.', }); export const linkedinUrlProp = Property.ShortText({ displayName: 'LinkedIn URL', required: false, }); export const phoneNumberProp = Property.ShortText({ displayName: 'Phone Number', required: false, }); export const twitterProp = Property.ShortText({ displayName: 'Twitter Handle', required: false, }); export const notesProp = Property.ShortText({ displayName: 'Notes', required: false, description: 'Personal notes about the lead.', }); export const sourceProp = Property.ShortText({ displayName: 'Source', required: false, description: 'Origin where the lead was found.', }); export const leadsListIdProp = Property.Number({ displayName: 'Leads List ID', required: false, description: 'ID of the list to add the lead to; defaults to your most recent list.', }); export const leadsListIdsProp = Property.Array({ displayName: 'Leads List IDs', required: false, description: 'Array of list IDs to add the lead to; defaults to your most recent list.', defaultValue: [], }); export const leadsListDropdownProp = Property.Dropdown({ displayName: 'Leads List', required: false, description: 'Select which list to add the lead to; defaults to your most recent list.', refreshers: [], options: async ({ auth }) => { if (!auth) { return { disabled: true, placeholder: 'Connect your Hunter account first.', options: [], }; } const resp = await hunterApiCall({ apiKey: auth as string, endpoint: '/leads', method: HttpMethod.GET, qparams: { limit: '100' } }); const leads = (resp as any).data?.leads || []; const uniqueLists = new Map(); leads.forEach((lead: any) => { if (lead.leads_list) { uniqueLists.set(lead.leads_list.id, lead.leads_list); } }); return { disabled: false, options: Array.from(uniqueLists.values()).map((list: any) => ({ label: `${list.name} (${list.leads_count} leads)`, value: list.id })) }; } }); export const customAttributesProp = Property.Json({ displayName: 'Custom Attributes', required: false, description: 'Key/value map of any custom attributes, e.g. { "customer_id": "cus-1234abcd" }.', }); export const leadIdProp = Property.Number({ displayName: 'Lead ID', required: true, description: 'Identifier of the lead to delete.', }); export const leadSelectDropdownProp = Property.Dropdown({ displayName: 'Lead', required: true, description: 'Select a lead from your Hunter account.', refreshers: [], options: async ({ auth }) => { if (!auth) { return { disabled: true, placeholder: 'Connect your Hunter account first.', options: [], }; } const resp = await hunterApiCall({ apiKey: auth as string, endpoint: '/leads', method: HttpMethod.GET, qparams: { limit: '100' } }); const leads = (resp as any).data?.leads || []; return { disabled: false, options: leads.map((lead: any) => ({ label: `${lead.first_name || ''} ${lead.last_name || ''} (${lead.email})`.trim(), value: lead.id })) }; } }); export const leadDeleteDropdownProp = Property.Dropdown({ displayName: 'Lead to Delete', required: true, description: 'Select the lead to delete from your Hunter account.', refreshers: [], options: async ({ auth }) => { if (!auth) { return { disabled: true, placeholder: 'Connect your Hunter account first.', options: [], }; } const resp = await hunterApiCall({ apiKey: auth as string, endpoint: '/leads', method: HttpMethod.GET, qparams: { limit: '100' } }); const leads = (resp as any).data?.leads || []; return { disabled: false, options: leads.map((lead: any) => ({ label: `${lead.first_name || ''} ${lead.last_name || ''} (${lead.email})`.trim(), value: lead.id })) }; } }); export const fullNameProp = Property.ShortText({ displayName: 'Full Name', required: false, description: "The person's full name (if you can't supply both first and last name).", }); export const maxDurationProp = Property.Number({ displayName: 'Max Duration (seconds)', required: false, description: 'How long Hunter should spend refining results (3-20, default 10).', }); export const filterProp = (name: string, description: string) => Property.ShortText({ displayName: name, required: false, description }); export const emailFilterProp = filterProp( 'Email', 'Filter by email (use "*" for any, "~" for empty, or substring).' ); export const firstNameFilterProp = filterProp( 'First Name', 'Filter by first name.' ); export const lastNameFilterProp = filterProp( 'Last Name', 'Filter by last name.' ); export const positionFilterProp = filterProp( 'Position', 'Filter by position.' ); export const companyFilterProp = filterProp( 'Company', 'Filter by company.' ); export const industryFilterProp = filterProp( 'Industry', 'Filter by industry.' ); export const websiteFilterProp = filterProp( 'Website', 'Filter by website.' ); export const countryCodeFilterProp = filterProp( 'Country Code', 'Filter by ISO 3166‑1 alpha‑2 country code.' ); export const companySizeFilterProp = filterProp( 'Company Size', 'Filter by company size.' ); export const sourceFilterProp = filterProp( 'Source', 'Filter by source.' ); export const twitterFilterProp = filterProp( 'Twitter Handle', 'Filter by Twitter handle.' ); export const linkedinUrlFilterProp = filterProp( 'LinkedIn URL', 'Filter by LinkedIn URL.' ); export const phoneNumberFilterProp = filterProp( 'Phone Number', 'Filter by phone number.' ); export const syncStatusProp = Property.Dropdown({ displayName: 'Sync Status', required: false, description: 'Filter by synchronization status.', options: async () => ({ disabled: false, options: [ { label: 'Pending', value: 'pending' }, { label: 'Error', value: 'error' }, { label: 'Success', value: 'success' }, ], }), refreshers: [] }); export const arrayStringProp = (name: string, description: string) => Property.Array({ displayName: name, required: false, description, defaultValue: [], }); export const sendingStatusProp = arrayStringProp( 'Sending Status(es)', 'Filter by sending status(es): clicked, opened, sent, pending, error, bounced, unsubscribed, replied, or "~" (unset).' ); export const verificationStatusProp = arrayStringProp( 'Verification Status(es)', 'Filter by verification status(es): accept_all, disposable, invalid, unknown, valid, webmail, or "pending".' ); export const dateFilterProp = filterProp( 'Activity/Contact Date', 'Use "*" for any value or "~" for unset.' ); export const customAttributesFilterProp = Property.Json({ displayName: 'Custom Attributes Filter', required: false, description: 'JSON object of slug→filterValue (use "*", "~", or substrings).', }); export const queryProp = Property.ShortText({ displayName: 'Query', required: false, description: 'Search first_name, last_name or email containing this substring.', }); export const limitProp = Property.Number({ displayName: 'Limit', required: false, description: 'Max leads to return (1-1000). Defaults to 20.', }); export const offsetProp = Property.Number({ displayName: 'Offset', required: false, description: 'Number of leads to skip (0-100000). Defaults to 0.', });

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