Skip to main content
Glama

mcp-google-sheets

create-task.ts5.96 kB
import { createAction, Property, DynamicPropsValue, } from '@activepieces/pieces-framework'; import { capsuleCrmAuth, CapsuleCrmAuthType } from '../common/auth'; import { capsuleCrmClient } from '../common/client'; import { CreateTaskParams } from '../common/types'; export const createTaskAction = createAction({ auth: capsuleCrmAuth, name: 'create_task', displayName: 'Create Task', description: 'Create a new Task in Capsule CRM.', props: { description: Property.ShortText({ displayName: 'Description', description: 'A short description of the task.', required: true, }), dueOn: Property.DateTime({ displayName: 'Due Date', description: 'The date when this task is due.', required: true, }), detail: Property.LongText({ displayName: 'Details', description: 'More details about the task.', required: false, }), dueTime: Property.ShortText({ displayName: 'Due Time', description: "The time when this task is due (e.g., 18:00:00). Note: The time is in the user's timezone.", required: false, }), linkTo: Property.StaticDropdown({ displayName: 'Link To', description: 'The entity this task is linked to. Only one can be selected.', required: false, options: { options: [ { label: 'Party (Contact)', value: 'party' }, { label: 'Opportunity', value: 'opportunity' }, { label: 'Project', value: 'project' }, ], }, }), linkedEntityId: Property.DynamicProperties({ displayName: 'Linked Entity', required: false, refreshers: ['linkTo'], props: async ({ auth, linkTo }) => { const fields: DynamicPropsValue = {}; const linkToType = linkTo as unknown as string; if (!auth || !linkToType) return fields; if (linkToType === 'party') { const contacts = await capsuleCrmClient.searchContacts( auth as CapsuleCrmAuthType, '' ); const contactOptions = contacts.map((contact) => ({ label: contact.type === 'person' ? `${contact.firstName} ${contact.lastName}` : contact.name || `Unnamed ${contact.type}`, value: contact.id, })); fields['partyId'] = Property.StaticDropdown({ displayName: 'Party', required: true, options: { options: contactOptions, }, }); } else if (linkToType === 'opportunity') { const opportunities = await capsuleCrmClient.searchOpportunities( auth as CapsuleCrmAuthType ); const opportunityOptions = opportunities.map((opportunity) => ({ label: opportunity.name, value: opportunity.id, })); fields['opportunityId'] = Property.StaticDropdown({ displayName: 'Opportunity', required: true, options: { options: opportunityOptions, }, }); } else if (linkToType === 'project') { const projects = await capsuleCrmClient.searchProjects( auth as CapsuleCrmAuthType ); const projectOptions = projects.map((project) => ({ label: project.name, value: project.id, })); fields['projectId'] = Property.StaticDropdown({ displayName: 'Project', required: true, options: { options: projectOptions, }, }); } return fields; }, }), categoryId: Property.Dropdown({ displayName: 'Category', description: 'The category of this task.', required: false, refreshers: [], options: async ({ auth }) => { if (!auth) return { options: [], disabled: true, placeholder: 'Please connect your Capsule CRM account first', }; const categories = await capsuleCrmClient.listCategories( auth as CapsuleCrmAuthType ); return { options: categories.map((category) => ({ label: category.name, value: category.id, })), }; }, }), ownerId: Property.Dropdown({ displayName: 'Owner', description: 'The user this task is assigned to.', required: false, refreshers: [], options: async ({ auth }) => { if (!auth) return { options: [], disabled: true, placeholder: 'Please connect your Capsule CRM account first', }; const users = await capsuleCrmClient.listUsers( auth as CapsuleCrmAuthType ); return { options: users.map((user) => ({ label: user.name, value: user.id, })), }; }, }), }, async run(context) { const { auth, propsValue } = context; const taskData: CreateTaskParams = { description: propsValue.description, dueOn: propsValue.dueOn, detail: propsValue.detail, dueTime: propsValue.dueTime, }; if (propsValue.categoryId) { taskData.category = { id: propsValue.categoryId }; } if (propsValue.ownerId) { taskData.owner = { id: propsValue.ownerId }; } const linkedEntity = propsValue.linkedEntityId as DynamicPropsValue; if (linkedEntity) { if (linkedEntity['partyId']) { taskData.party = { id: linkedEntity['partyId'] as number }; } else if (linkedEntity['opportunityId']) { taskData.opportunity = { id: linkedEntity['opportunityId'] as number }; } else if (linkedEntity['projectId']) { taskData.kase = { id: linkedEntity['projectId'] as number }; } } return await capsuleCrmClient.createTask(auth, taskData); }, });

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