Skip to main content
Glama

Fonoster MCP Server

Official
by fonoster
MIT License
118
7,391
  • Apple
  • Linux
advanced-settings-section.tsx11.1 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 { Accordion, AccordionDetails, AccordionSummary, Box } from "@mui/material"; import { Typography } from "~/core/components/design-system/ui/typography/typography"; import { FormField, FormControl, FormItem } from "~/core/components/design-system/forms"; import { Input } from "~/core/components/design-system/ui/input/input"; import type { Control } from "react-hook-form"; import type { Schema } from "../schemas/application-schema"; import { Icon } from "~/core/components/design-system/icons/icons"; import { Select } from "~/core/components/design-system/ui/select/select"; import { EVENTS } from "../schemas/events-hook-schema"; import { getLanguageModelModels, LANGUAGE_MODEL_PROVIDERS } from "../create-application.const"; import type { LanguageModelProvider } from "../schemas/language-model-provider"; import { ToolsSection } from "./tools-section"; export const AdvancedSettingsSection = ({ control, languageModelProvider }: { control: Control<Schema>; languageModelProvider: LanguageModelProvider; }) => ( <> <Accordion disableGutters elevation={0} square sx={{ backgroundColor: "transparent", border: "solid 1px", borderColor: "base.05", boxShadow: "none", borderRadius: "4px", "&:before": { display: "none" } }} > <AccordionSummary expandIcon={<Icon name="ArrowDropDown" />} aria-controls="create-application-advanced-settings-accordion-content" id="create-application-advanced-settings-accordion" > <Typography>Advanced Settings</Typography> </AccordionSummary> <AccordionDetails sx={{ display: "flex", flexDirection: "column", gap: "24px" }} > {/* transferOptions (objeto opcional) */} <Box sx={{ mt: "8px" }}> <Typography variant="mono-medium" color="base.03"> Transfer Options </Typography> <Typography variant="body-micro" color="base.03"> For call transfer, please provide a phone number. Also, optionally, you can set a message to be used when the call is transferred and a timeout for the transfer operation (in milliseconds). </Typography> </Box> <FormField control={control} name="intelligence.config.conversationSettings.transferOptions.phoneNumber" render={({ field }) => ( <FormItem> <FormControl> <Input type="text" label="Phone Number" placeholder="e.g. +1234567890" {...field} /> </FormControl> </FormItem> )} /> <FormField control={control} name="intelligence.config.conversationSettings.transferOptions.message" render={({ field }) => ( <FormItem> <FormControl> <Input type="text" label="Message" {...field} /> </FormControl> </FormItem> )} /> <FormField control={control} name="intelligence.config.conversationSettings.transferOptions.timeout" render={({ field }) => ( <FormItem> <FormControl> <Input type="number" label="Timeout (ms)" placeholder="30000" {...field} onChange={(e) => { const value = e.target.value; field.onChange(value === "" ? undefined : Number(value)); }} /> </FormControl> </FormItem> )} /> {/* idleOptions (objeto requerido) */} <Box sx={{ mt: "8px" }}> <Typography variant="mono-medium" color="base.03"> Idle Options </Typography> <Typography variant="body-micro" color="base.03"> This is the message that will be played when there is no activity in the call. You can also set a timeout (in milliseconds) and maximum timeout count for idle handling. </Typography> </Box> <FormField control={control} name="intelligence.config.conversationSettings.idleOptions.message" render={({ field }) => ( <FormItem> <FormControl> <Input type="text" label="Idle Message" {...field} /> </FormControl> </FormItem> )} /> <FormField control={control} name="intelligence.config.conversationSettings.idleOptions.timeout" render={({ field }) => ( <FormItem> <FormControl> <Input type="number" label="Idle Timeout (ms)" placeholder="30000" {...field} onChange={(e) => { const value = e.target.value; field.onChange(value === "" ? undefined : Number(value)); }} /> </FormControl> </FormItem> )} /> <FormField control={control} name="intelligence.config.conversationSettings.idleOptions.maxTimeoutCount" render={({ field }) => ( <FormItem> <FormControl> <Input type="number" label="Max Timeout Count" placeholder="2" {...field} onChange={(e) => { const value = e.target.value; field.onChange(value === "" ? undefined : Number(value)); }} /> </FormControl> </FormItem> )} /> {/* Configuración de languageModel */} <Box sx={{ mt: "8px" }}> <Typography variant="mono-medium" color="base.03"> Language Model </Typography> <Typography variant="body-micro" color="base.03"> Select the language model provider and model that best fit your use case. If there is an additional model you would like us to support, please let us know. </Typography> </Box> <FormField control={control} name="intelligence.config.languageModel.provider" render={({ field }) => ( <FormItem> <FormControl> <Select label="Provider" options={LANGUAGE_MODEL_PROVIDERS} {...field} /> </FormControl> </FormItem> )} /> <FormField control={control} name="intelligence.config.languageModel.model" render={({ field }) => ( <FormItem> <FormControl> <Select label="Model" options={getLanguageModelModels(languageModelProvider)} {...field} /> </FormControl> </FormItem> )} /> <FormField control={control} name="intelligence.config.languageModel.temperature" render={({ field }) => ( <FormItem> <FormControl> <Input type="number" label="Temperature" {...field} onChange={(e) => { const value = e.target.value; field.onChange(value === "" ? undefined : Number(value)); }} /> </FormControl> </FormItem> )} /> <FormField control={control} name="intelligence.config.languageModel.maxTokens" render={({ field }) => ( <FormItem> <FormControl> <Input type="number" label="Max Tokens" {...field} onChange={(e) => { const value = e.target.value; field.onChange(value === "" ? undefined : Number(value)); }} /> </FormControl> </FormItem> )} /> {/* Tools editor */} <ToolsSection control={control} /> {/* Configuración de eventsHook */} <Box sx={{ mt: "8px" }}> <Typography variant="mono-medium" color="base.03"> Events Hook </Typography> <Typography variant="body-micro" color="base.03"> Use this to receive events from Fonoster. You can select the events you want to receive. You will need to provide a URL to receive the events. </Typography> </Box> <FormField control={control} name="intelligence.config.eventsHook.url" render={({ field }) => ( <FormItem> <FormControl> <Input type="text" label="Events Hook URL" {...field} /> </FormControl> </FormItem> )} /> {/* <FormField control={control} name="intelligence.config.eventsHook.headers" render={({ field }) => ( <FormItem> <FormControl> <Input type="text" label="Headers (JSON, optional)" {...field} /> </FormControl> </FormItem> )} /> */} <FormField control={control} name="intelligence.config.eventsHook.events" render={({ field }) => ( <FormItem> <FormControl> <Select {...field} multiple label="Events" options={EVENTS} value={Array.isArray(field.value) ? field.value : []} onChange={field.onChange} /> </FormControl> </FormItem> )} /> </AccordionDetails> </Accordion> </> );

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