Skip to main content
Glama

mcp-google-sheets

call-method.ts3.75 kB
import * as soap from 'soap'; import { CustomAuthProps, Property, ShortTextProperty, StaticDropdownProperty, StaticMultiSelectDropdownProperty, StaticPropsValue, createAction, } from '@activepieces/pieces-framework'; import { soapAuth } from '../shared/auth'; type DynamicProp = | ShortTextProperty<boolean> | StaticDropdownProperty<any, boolean> | StaticMultiSelectDropdownProperty<any, boolean>; export const callMethod = createAction({ name: 'call_method', displayName: 'Call SOAP Method', description: 'Call a SOAP from a given wsdl specification', auth: soapAuth(), props: { wsdl: Property.ShortText({ displayName: 'WSDL URL', required: true, }), method: Property.Dropdown({ description: 'The SOAP Method', displayName: 'Method', required: true, refreshers: ['wsdl'], options: async ({ wsdl }) => { if (!wsdl) { return { disabled: true, placeholder: 'Setup WSDL URL first', options: [], }; } const client = await soap.createClientAsync(wsdl as string); const spec = client.describe(); const methods = Object.keys( Object.values(Object.values(spec)[0] as object)[0] ); return { disabled: false, options: methods.map((method) => { return { label: method, value: method, }; }), }; }, }), args: Property.DynamicProperties({ description: 'Arguments for the SOAP method', displayName: 'Parameters', required: true, refreshers: ['wsdl', 'method'], async props({ wsdl, method }) { if (!wsdl || !method) { return {}; } const client = await soap.createClientAsync(wsdl as unknown as string); const spec = client.describe(); const methods = Object.values(Object.values(spec)[0] as object)[0]; const properties: Record<string, DynamicProp> = {}; for (const key in methods[method as unknown as string]['input']) { properties[key as string] = Property.ShortText({ displayName: key, required: true, }); } return properties; }, }), parsed: Property.Checkbox({ displayName: 'Parsed', required: false, defaultValue: false, }), }, async run(ctx) { const { wsdl, method, args, parsed } = ctx.propsValue; const client = await soap.createClientAsync(wsdl, { forceSoap12Headers: true, }); const auth = ctx.auth as StaticPropsValue<CustomAuthProps>; switch (auth['type']) { case 'WS': client.setSecurity( new soap.WSSecurity( auth['username'] as string, auth['password'] as string ) ); break; case 'Basic': client.setSecurity( new soap.BasicAuthSecurity( auth['username'] as string, auth['password'] as string ) ); break; case 'Header': // eslint-disable-next-line no-case-declarations client.addSoapHeader(ctx.auth['customHeader'] as string); break; } const action = client[method + 'Async']; try { const [actionRes] = await action(args); if (parsed || false) { return actionRes; } else { return { request: client.lastRequest, response: client.lastResponse, }; } } catch (e: any) { return { error: true, status: e.response.status, raw: { request: client.lastRequest, response: e.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