Skip to main content
Glama

mcp-google-sheets

find-item.ts4.04 kB
import { createAction, Property } from '@activepieces/pieces-framework'; import { HttpMethod } from '@activepieces/pieces-common'; import { podioAuth } from '../../index'; import { podioApiCall, getAccessToken, dynamicAppProperty, dynamicItemProperty, limitProperty, offsetProperty, dynamicOrgProperty, dynamicSpaceProperty } from '../common'; export const findItemAction = createAction({ auth: podioAuth, name: 'find_item', displayName: 'Find Item', description: 'Retrieve a single item by ID or field value.', props: { searchType: Property.Dropdown({ displayName: 'Search Method', description: 'How to find the item', required: true, refreshers: [], options: async () => { return { options: [ { label: 'Get by Item ID', value: 'by_id' }, { label: 'Filter Items in App', value: 'filter' }, ], }; }, }), itemId: Property.Number({ displayName: 'Item ID', description: 'The specific item ID to retrieve', required: false, }), selectedItem: dynamicItemProperty, markAsViewed: Property.Checkbox({ displayName: 'Mark as Viewed', description: 'Mark any new notifications on this item as viewed', required: false, defaultValue: true, }), orgId: dynamicOrgProperty, spaceId: dynamicSpaceProperty, appId: dynamicAppProperty, filters: Property.Object({ displayName: 'Search Filters', description: 'Filter criteria as JSON object. Use field external_id as keys.', required: false, }), limit: limitProperty, offset: offsetProperty, sortBy: Property.ShortText({ displayName: 'Sort By', description: 'Field to sort results by (e.g., "created_on", "last_edit_on")', required: false, }), sortDesc: Property.Checkbox({ displayName: 'Sort Descending', description: 'Sort results in descending order', required: false, defaultValue: false, }), }, async run(context) { const accessToken = getAccessToken(context.auth); const { searchType, itemId, selectedItem, markAsViewed, orgId, spaceId, appId, filters, limit, offset, sortBy, sortDesc } = context.propsValue; if (searchType === 'by_id') { const finalItemId = selectedItem || itemId; if (!finalItemId) { throw new Error('Item ID is required. Please provide an item ID or select an item from the dropdown.'); } const queryParams: any = {}; if (typeof markAsViewed === 'boolean') { queryParams.mark_as_viewed = markAsViewed.toString(); } const response = await podioApiCall({ method: HttpMethod.GET, accessToken, resourceUri: `/item/${finalItemId}`, queryParams, }); return response; } else if (searchType === 'filter') { if (!appId) { throw new Error('App selection is required for filtering. Please select an app first.'); } if (limit && (limit < 1 || limit > 500)) { throw new Error('Limit must be between 1 and 500.'); } if (offset && offset < 0) { throw new Error('Offset must be 0 or greater.'); } const body: any = {}; if (filters && typeof filters === 'object' && Object.keys(filters).length > 0) { body.filters = filters; } if (limit) { body.limit = limit; } if (offset) { body.offset = offset; } if (sortBy && sortBy.trim()) { body.sort_by = sortBy.trim(); body.sort_desc = Boolean(sortDesc); } const response = await podioApiCall({ method: HttpMethod.POST, accessToken, resourceUri: `/item/app/${appId}/filter/`, body, }); return response; } else { throw new Error('Invalid search method. Please select either "Get by Item ID" or "Filter Items in App".'); } }, });

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