MCPcopy
hub / github.com/fonoster/fonoster

github.com/fonoster/fonoster @v0.22.1 sqlite

repository ↗ · DeepWiki ↗ · release v0.22.1 ↗
7,962 symbols 22,658 edges 1,190 files 321 documented · 4%
README

Fonoster: The open-source alternative to Twilio

Fonoster is researching an innovative Programmable Telecommunications Stack that will allow businesses to connect telephony services with the Internet entirely through a cloud-based utility.

Fonoster community banner

build release Discord Code Of Conduct GitHub Twitter Follow

Features

The most notable features of Fonoster are:

  • [x] Multitenancy
  • [x] Easy deployment of PBX functionalities
  • [x] Programmable Voice Applications
  • [x] NodeJS SDK
  • [x] Support for Amazon Simple Storage Service (S3)
  • [x] Secure API endpoints with Let's Encrypt
  • [x] Authentication with OAuth2
  • [X] Authentication with JWT
  • [x] Role-Based Access Control (RBAC)
  • [x] Plugins-based Command-line Tool
  • [x] Support for Google Speech APIs

Code Examples

A Voice Application is a server that controls a call's flow. A Voice Application can use any combination of the following verbs:

  • Answer - Accepts an incoming call
  • Hangup - Closes the call
  • Play: Takes a URL with a media file and streams the sound back to the calling party
  • PlayDtmf - Takes a DTMF sequence and plays it back to the calling party
  • Say - Takes a text, synthesizes the text into audio, and streams back the result
  • Gather - Waits for DTMF or speech events and returns back the result
  • SGather - Returns a stream for future DTMF and speech results
  • Stream - Creates a bidirectional stream to send and receive audio from a caller
  • Dial - Passes the call to an Agent or a Number at the PSTN
  • Record - It records the voice of the calling party and saves the audio on the Storage sub-system
  • Mute - It tells the channel to stop sending media, effectively muting the channel
  • Unmute - It tells the channel to allow media flow

Voice Application Example:

const VoiceServer = require("@fonoster/voice").default;
const { 
  GatherSource, 
  VoiceRequest, 
  VoiceResponse 
} = require("@fonoster/voice");

new VoiceServer().listen(async (req: VoiceRequest, voice: VoiceResponse) => {
  const { ingressNumber, sessionRef, appRef } = req;

  await voice.answer();

  await voice.say("Hi there! What's your name?");

  const { speech: name } = await voice.gather({
    source: GatherSource.SPEECH
  });

  await voice.say("Nice to meet you " + name + "!");

  await voice.say("Please enter your 4 digit pin.");

  const { digits } = await voice.gather({
    maxDigits: 4,
    finishOnKey: "#"
  });

  await voice.say("Your pin is " + digits);

  await voice.hangup();
});

// Your app will live at tcp://127.0.0.1:50061 
// and you can easily publish it to the Internet with:
// ngrok tcp 50061

Everything in Fonoster is an API first, and initiating a call is no exception. You can use the SDK to start a call with a few lines of code.

Example of originating a call with the SDK:

const SDK = require("@fonoster/sdk");

async function main(request) {
  const apiKey = "your-api-key";
  const apiSecret = "your-api-secret"
  const accessKeyId = "WO00000000000000000000000000000000";

  const client = new SDK.Client({ accessKeyId });
  await client.loginWithApiKey(apiKey, apiSecret);

  const calls = new SDK.Calls(client);
  const response = await calls.createCall(request);

  console.log(response); // successful response
}

const request = {
  from: "+18287854037",
  to: "+17853178070",
  appRef: "3e61ecb7-a1b6-4a93-84c3-4f1979165bca",
  // Optional metadata to be sent to the Voice Application
  metadata: {
    name: "John Doe",
    message: "Please call me back."
  }
};

main(request).catch(console.error);

Getting Started

To get started with Fonoster, use the following resources:

Give a Star! ⭐

Please give it a star if you like this project or plan to use it. Thanks 🙏

Bugs and Feedback

For bugs, questions, and discussions, please use the Github Issues

Contributing

For contributing, please see the following links:

Pedro Pedro Sanders Efrain Efrain Peralta Angel Angel M. Bencosme Wandy Wandy Hernandez Obruche Obruche Wilfred Oghenechohwo Wardner Wardner Lara
Richard Richard HC Nageswari/ Nageswari Hoan Hoan Luu Huu Speedy Speedy Monster harry_dev/ harry_dev Kanishka Kanishka Chowdhury
Brayan Brayan Munoz V. Ivan Ivan Milisavljevic Dede Dede kurniawan gabriel gabriel duncan Prasurjya Prasurjya Pran Borah Jordan/ Jordan
Hector Hector

Extension points exported contracts — how you extend this code

AuthzServiceClient (Interface)
* Interface representing the AuthzService client methods. * This should match the service definition used by the server [2 …
mods/authz/src/client/AuthzServiceClient.ts
PromiseWithResetTimer (Interface)
* Copyright (C) 2025 by Fonoster Inc (https://fonoster.com) * http://github.com/fonoster/fonoster * * This file is pa
mods/apiserver/src/voice/handlers/gather/getTimeoutPromise.ts
JsonPreviewToggleProps (Interface)
* Props interface for the JsonPreviewToggle component.
mods/dashboard/src/secrets/pages/create-secret/json-preview-toggle.form.tsx
ULog (Interface)
(no doc)
mods/logger/src/types.ts
FonosterClient (Interface)
(no doc)
mods/sdk/src/client/types/FonosterClient.ts
SpeechProbabilities (Interface)
(no doc)
mods/autopilot/src/vad/types.ts
CreateUserRequest (Interface)
(no doc)
mods/identity-client/src/index.ts
CreateCredentialFormProps (Interface)
(no doc)
mods/dashboard/src/credentials/pages/create-credential/create-credential.form.tsx

Core symbols most depended-on inside this repo

c
called by 1056
site/site-assets/js/prism.js
getLogger
called by 136
mods/logger/src/getLogger.ts
error
called by 126
mods/dashboard/src/core/shared/logger.ts
toast
called by 112
mods/dashboard/src/core/components/design-system/ui/toaster/toaster.tsx
useWorkspaceId
called by 90
mods/dashboard/src/workspaces/hooks/use-workspace-id.ts
useFonoster
called by 73
mods/dashboard/src/core/sdk/hooks/use-fonoster.tsx
emit
called by 72
mods/voice/src/verbs/Stream.ts
getMetadata
called by 70
mods/sdk/src/client/types/FonosterClient.ts

Shape

Function 4,610
Method 2,295
Class 776
Interface 211
Enum 70

Languages

TypeScript100%

Modules by API surface

mods/identity/src/generated/@prisma/client/runtime/wasm-compiler-edge.js746 symbols
mods/identity/src/generated/@prisma/client/runtime/library.js681 symbols
mods/identity/src/generated/@prisma/client/runtime/react-native.js643 symbols
mods/identity/src/generated/@prisma/client/runtime/edge.js592 symbols
mods/identity/src/generated/@prisma/client/runtime/edge-esm.js591 symbols
mods/identity/src/generated/@prisma/client/runtime/wasm-engine-edge.js564 symbols
mods/identity/src/generated/@prisma/client/runtime/wasm.js530 symbols
site/site-assets/js/bootstrap.min.js350 symbols
mods/identity/src/generated/@prisma/client/runtime/library.d.ts133 symbols
mods/identity/src/generated/@prisma/client/index.d.ts133 symbols
mods/identity/src/generated/@prisma/client/query_engine_bg.js124 symbols
mods/sdk/src/generated/web/identity_pb.d.ts108 symbols

Dependencies from manifests, versioned

@aws-sdk/client-s33.958.0 · 1×
@commitlint/cli19.2.2 · 1×
@commitlint/config-conventional19.2.2 · 1×
@deepgram/sdk3.5.1 · 1×
@dmitryrechkin/json-schema-to-zod1.0.1 · 1×
@emotion/cache11.14.0 · 1×
@emotion/react11.14.0 · 1×
@emotion/server11.11.0 · 1×
@emotion/styled11.14.0 · 1×
@eslint/eslintrc3.3.3 · 1×
@esm-bundle/chai4.3.4-fix.0 · 1×

Datastores touched

identityDatabase · 1 repos

For agents

$ claude mcp add fonoster \
  -- python -m otcore.mcp_server <graph>

⬇ download graph artifact