Skip to main content
Glama

Fonoster MCP Server

Official
by fonoster
MIT License
118
7,325
  • Apple
  • Linux
objectToJson.ts2.66 kB
/** * Copyright (C) 2025 by Fonoster Inc (https://fonoster.com) * http://github.com/fonoster/fonoster * * This file is part of Fonoster * * Licensed under the MIT License (the "License"); * you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * https://opensource.org/licenses/MIT * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ import { MappingTuple } from "./types"; import { getEnumKey, isMapping } from "./utils"; function objectToJson<J extends Record<string, unknown>>( obj: new () => unknown, enumMapping?: MappingTuple<unknown>, objectMapping?: MappingTuple<unknown>, repeatableObjectMapping?: MappingTuple<unknown> ): J { const json: Record<string, unknown> = {}; Object.getOwnPropertyNames(Object.getPrototypeOf(obj)).forEach((key) => { if ( key.startsWith("get") && typeof obj[key] === "function" && key !== "getPrototypeOf" ) { const propName = key.charAt(3).toLowerCase() + key.slice(4); try { const value = obj[key](); if (value === null || value === undefined || value === "") { return; } if (isMapping(propName, enumMapping)) { json[propName] = getEnumKey(propName, value as number, enumMapping); } else if (isMapping(propName, objectMapping)) { json[propName] = objectToJson( value as new () => unknown, enumMapping, objectMapping, repeatableObjectMapping ); } else if (isMapping(propName, repeatableObjectMapping)) { // Remove the "List" ending from the key const repeatableKey = propName.slice(0, -4); json[repeatableKey] = (value as unknown[]).map((item) => objectToJson( item as new () => unknown, enumMapping, objectMapping, repeatableObjectMapping ) ); } else if (value !== undefined) { if ( ["createdAt", "updatedAt", "startedAt", "endedAt"].includes( propName ) ) { json[propName] = new Date(value * 1000); return; } json[propName] = value; } } catch (error) { // Ignore } } }); return json as J; } export { objectToJson };

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/fonoster/fonoster'

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