Skip to main content
Glama

mcp-google-sheets

index.ts5.1 kB
import { Property, OAuth2PropertyValue } from '@activepieces/pieces-framework'; import { HttpMethod, HttpMessageBody, HttpResponse, httpClient, AuthenticationType, } from '@activepieces/pieces-common'; export const nitfyCommon = { portfolio: Property.Dropdown({ displayName: 'Portfolio', required: true, refreshers: [], options: async ({ auth }) => { const authentication = auth as OAuth2PropertyValue; if (!authentication) { return { disabled: true, placeholder: 'connect your account first', options: [], }; } const accessToken = authentication.access_token; const response = ( await callNitfyApi<{ subteams: { id: string; name: string; }[]; items: boolean; hasMore: boolean; }>(HttpMethod.GET, 'subteams', accessToken, undefined) ).body; return { disabled: false, options: response.subteams.map((team) => { return { label: team.name, value: team.id, }; }), }; }, }), project: Property.Dropdown({ displayName: 'Project', required: true, refreshers: ['portfolio'], options: async ({ auth, portfolio }) => { const authentication = auth as OAuth2PropertyValue; if (!authentication) { return { disabled: true, placeholder: 'connect your account first', options: [], }; } if (!portfolio) { return { disabled: true, placeholder: 'Select portfolio first', options: [], }; } const accessToken = authentication.access_token; const response = ( await callNitfyApi<{ projects: { id: string; name: string; subteam: string; }[]; hasMore: boolean; }>(HttpMethod.GET, `projects`, accessToken, undefined) ).body; response.projects = response.projects.filter((project) => { return project.subteam == portfolio; }); return { disabled: false, options: response.projects.map((project) => { return { label: project.name, value: project.id, }; }), }; }, }), status: Property.Dropdown({ displayName: 'Status', required: true, refreshers: ['project'], options: async ({ auth, project }) => { const authentication = auth as OAuth2PropertyValue; if (!authentication) { return { disabled: true, placeholder: 'connect your account first', options: [], }; } if (!project) { return { disabled: true, placeholder: 'Select portfolio first', options: [], }; } const accessToken = authentication.access_token; const response = ( await callNitfyApi<{ items: { id: string; name: string; }[]; hasMore: boolean; }>( HttpMethod.GET, `taskgroups?project_id=${project}&archived=false`, accessToken, undefined ) ).body; return { disabled: false, options: response.items.map((list) => { return { label: list.name, value: list.id, }; }), }; }, }), milestone: Property.Dropdown({ displayName: 'Milestone', required: true, refreshers: ['project'], options: async ({ auth, project }) => { const authentication = auth as OAuth2PropertyValue; if (!authentication) { return { disabled: true, placeholder: 'connect your account first', options: [], }; } if (!project) { return { disabled: true, placeholder: 'Select project first', options: [], }; } const accessToken = authentication.access_token; const response = ( await callNitfyApi<{ items: { id: string; name: string; task_group: string; }[]; hasMore: boolean; }>( HttpMethod.GET, `milestones?project_id=${project}&is_list=true`, accessToken, undefined ) ).body; return { disabled: false, options: response.items.map((list) => { return { label: list.name, value: list.id, }; }), }; }, }), }; export async function callNitfyApi<T extends HttpMessageBody>( method: HttpMethod, apiUrl: string, accessToken: string, body: any | undefined ): Promise<HttpResponse<T>> { return await httpClient.sendRequest<T>({ method: method, url: `https://openapi.niftypm.com/api/v1.0/${apiUrl}`, authentication: { type: AuthenticationType.BEARER_TOKEN, token: accessToken, }, body: body, }); }

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