Skip to main content
Glama

Backlog MCP Server

customFields.ts2.74 kB
export type CustomFieldInput = { id: number; value?: string | number | string[] | number[]; otherValue?: string; }; export type CustomFieldFilterInput = | { id: number; type: 'text'; value: string; } | { id: number; type: 'numeric'; min?: number; max?: number; } | { id: number; type: 'date'; min?: string; max?: string; } | { id: number; type: 'list'; value: number | number[]; }; /** * Converts Backlog-style customFields array into proper payload format */ export function customFieldsToPayload( customFields: CustomFieldInput[] | undefined ): Record<string, string | number | string[] | number[] | undefined> { if (customFields == null) { return {}; } const result: Record< string, string | number | string[] | number[] | undefined > = {}; for (const field of customFields) { if (field.value !== undefined) { result[`customField_${field.id}`] = field.value; } if (field.otherValue !== undefined) { result[`customField_${field.id}_otherValue`] = field.otherValue; } } return result; } export function customFieldFiltersToPayload( customFields: CustomFieldFilterInput[] | undefined ): Record<string, string | number | number[] | undefined> { if (!customFields || customFields.length === 0) { return {}; } const result: Record<string, string | number | number[] | undefined> = {}; for (const field of customFields) { const baseKey = `customField_${field.id}`; switch (field.type) { case 'text': { if (field.value.trim().length > 0) { result[baseKey] = field.value; } break; } case 'numeric': { if (field.min !== undefined) { result[`${baseKey}_min`] = field.min; } if (field.max !== undefined) { result[`${baseKey}_max`] = field.max; } break; } case 'date': { if (field.min) { result[`${baseKey}_min`] = field.min; } if (field.max) { result[`${baseKey}_max`] = field.max; } break; } case 'list': { if (Array.isArray(field.value)) { const values = field.value.filter((value) => Number.isFinite(value)); if (values.length > 0) { result[`${baseKey}[]`] = values; } } else if (Number.isFinite(field.value)) { result[baseKey] = field.value; } break; } default: { const exhaustiveCheck: never = field; throw new Error( `Unsupported custom field filter type: ${exhaustiveCheck}` ); } } } return result; }

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/nulab/backlog-mcp-server'

If you have feedback or need assistance with the MCP directory API, please join our Discord server