Skip to main content
Glama

mcp-google-sheets

find-document.ts8.63 kB
import { createAction, Property } from '@activepieces/pieces-framework'; import { HttpMethod } from '@activepieces/pieces-common'; import { pandadocClient, pandadocAuth } from '../common'; import { formDropdown, folderDropdown, contactDropdown, memberDropdown, tagDropdown, customTagInput } from '../common/dynamic-dropdowns'; export const findDocument = createAction({ name: 'findDocument', displayName: 'Find Document(s)', description: 'Finds documents based various filter.', auth: pandadocAuth, props: { q: Property.ShortText({ displayName: 'Search Query', description: 'Search documents by name or reference number', required: false, }), id: Property.ShortText({ displayName: 'Document ID', description: 'Search for document by its specific ID', required: false, }), status: Property.StaticDropdown({ displayName: 'Status', description: 'Filter documents by status', required: false, options: { options: [ { label: 'Draft', value: 0 }, { label: 'Sent', value: 1 }, { label: 'Completed', value: 2 }, { label: 'Uploaded', value: 3 }, { label: 'Error', value: 4 }, { label: 'Viewed', value: 5 }, { label: 'Waiting Approval', value: 6 }, { label: 'Approved', value: 7 }, { label: 'Rejected', value: 8 }, { label: 'Waiting Pay', value: 9 }, { label: 'Paid', value: 10 }, { label: 'Voided', value: 11 }, { label: 'Declined', value: 12 }, { label: 'External Review', value: 13 }, ], }, }), status__ne: Property.StaticDropdown({ displayName: 'Exclude Status', description: 'Exclude documents with this status', required: false, options: { options: [ { label: 'Draft', value: 0 }, { label: 'Sent', value: 1 }, { label: 'Completed', value: 2 }, { label: 'Uploaded', value: 3 }, { label: 'Error', value: 4 }, { label: 'Viewed', value: 5 }, { label: 'Waiting Approval', value: 6 }, { label: 'Approved', value: 7 }, { label: 'Rejected', value: 8 }, { label: 'Waiting Pay', value: 9 }, { label: 'Paid', value: 10 }, { label: 'Voided', value: 11 }, { label: 'Declined', value: 12 }, { label: 'External Review', value: 13 }, ], }, }), template_id: Property.Dropdown({ displayName: 'Template', description: 'Filter by parent template (cannot be used with Form)', required: false, refreshers: [], options: async ({ auth }) => { if (!auth) { return { disabled: true, placeholder: 'Please authenticate first', options: [], }; } try { const response = await pandadocClient.makeRequest<{ results: Array<{ id: string; name: string; date_created: string; }>; }>(auth as string, HttpMethod.GET, '/templates?count=100'); const options = response.results.map((template) => ({ label: `${template.name} - ${template.id.substring(0, 8)}...`, value: template.id, })); return { disabled: false, options, }; } catch (error) { return { disabled: true, placeholder: 'Failed to load templates', options: [], }; } }, }), form_id: formDropdown, folder_uuid: folderDropdown, contact_id: contactDropdown, membership_id: memberDropdown, tag: tagDropdown, custom_tag: customTagInput, created_from: Property.DateTime({ displayName: 'Created From', description: 'Include only documents created on or after this date', required: false, }), created_to: Property.DateTime({ displayName: 'Created To', description: 'Include only documents created before this date', required: false, }), completed_from: Property.DateTime({ displayName: 'Completed From', description: 'Include only documents completed on or after this date', required: false, }), completed_to: Property.DateTime({ displayName: 'Completed To', description: 'Include only documents completed before this date', required: false, }), modified_from: Property.DateTime({ displayName: 'Modified From', description: 'Include only documents modified on or after this date', required: false, }), modified_to: Property.DateTime({ displayName: 'Modified To', description: 'Include only documents modified before this date', required: false, }), deleted: Property.Checkbox({ displayName: 'Show Deleted Documents', description: 'Return only deleted documents', required: false, }), count: Property.Number({ displayName: 'Results Count', description: 'Number of documents to return (default: 50, max: 100)', required: false, }), page: Property.Number({ displayName: 'Page Number', description: 'Page number for pagination (starts with 1)', required: false, }), order_by: Property.StaticDropdown({ displayName: 'Order By', description: 'Sort results by field', required: false, options: { options: [ { label: 'Date Status Changed (default)', value: 'date_status_changed' }, { label: 'Date Created (ascending)', value: 'date_created' }, { label: 'Date Created (descending)', value: '-date_created' }, { label: 'Date Modified (ascending)', value: 'date_modified' }, { label: 'Date Modified (descending)', value: '-date_modified' }, { label: 'Name (ascending)', value: 'name' }, { label: 'Name (descending)', value: '-name' }, ], }, }), metadata: Property.Object({ displayName: 'Metadata Filters', description: 'Filter by metadata key-value pairs. Use format: {"key": "value"}', required: false, }), }, async run({ auth, propsValue }) { const queryParams: any = {}; // Build query parameters with only provided values if (propsValue.q) queryParams.q = propsValue.q; if (propsValue.id) queryParams.id = propsValue.id; if (propsValue.status !== undefined) queryParams.status = propsValue.status; if (propsValue.status__ne !== undefined) queryParams.status__ne = propsValue.status__ne; if (propsValue.template_id) queryParams.template_id = propsValue.template_id; if (propsValue.form_id) queryParams.form_id = propsValue.form_id; if (propsValue.folder_uuid) queryParams.folder_uuid = propsValue.folder_uuid; if (propsValue.contact_id) queryParams.contact_id = propsValue.contact_id; if (propsValue.membership_id) queryParams.membership_id = propsValue.membership_id; // Handle tag with custom support if (propsValue.tag) { let tagValue; if (propsValue.tag === 'custom' && propsValue.custom_tag) { tagValue = propsValue.custom_tag; } else if (propsValue.tag !== 'custom') { tagValue = propsValue.tag; } if (tagValue) { queryParams.tag = tagValue; } } if (propsValue.created_from) queryParams.created_from = propsValue.created_from; if (propsValue.created_to) queryParams.created_to = propsValue.created_to; if (propsValue.completed_from) queryParams.completed_from = propsValue.completed_from; if (propsValue.completed_to) queryParams.completed_to = propsValue.completed_to; if (propsValue.modified_from) queryParams.modified_from = propsValue.modified_from; if (propsValue.modified_to) queryParams.modified_to = propsValue.modified_to; if (propsValue.deleted) queryParams.deleted = propsValue.deleted; if (propsValue.count) queryParams.count = propsValue.count; if (propsValue.page) queryParams.page = propsValue.page; if (propsValue.order_by) queryParams.order_by = propsValue.order_by; if (propsValue.metadata) { for (const [key, value] of Object.entries(propsValue.metadata)) { queryParams[`metadata_${key}`] = value; } } const queryString = new URLSearchParams(queryParams).toString(); const endpoint = queryString ? `/documents?${queryString}` : '/documents'; return await pandadocClient.makeRequest( auth as string, HttpMethod.GET, endpoint ); }, });

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