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.

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 callHangup- Closes the callPlay: Takes a URL with a media file and streams the sound back to the calling partyPlayDtmf- Takes a DTMF sequence and plays it back to the calling partySay- Takes a text, synthesizes the text into audio, and streams back the resultGather- Waits for DTMF or speech events and returns back the resultSGather- Returns a stream for future DTMF and speech resultsStream- Creates a bidirectional stream to send and receive audio from a callerDial- Passes the call to an Agent or a Number at the PSTNRecord- It records the voice of the calling party and saves the audio on the Storage sub-systemMute- It tells the channel to stop sending media, effectively muting the channelUnmute- 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 res.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:
- Deploying Fonoster with Docker
- Guide for Early Access User
- Getting started with Fonoster
- How we created an open-source alternative to Twilio and why it matters
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:
- Contribution Documents
- Contributors
Sponsors
We’re glad to be supported by respected companies and individuals from several industries.
Find all our supporters here
Become a Github Sponsor
Authors
- Pedro Sanders
License
Copyright © 2025 by Fonoster Inc. MIT License (see LICENSE for details).
Fonoster MCP Server
Project Details
- fonoster/fonoster
- @fonoster/mcp
- MIT License
- Last Updated: 4/20/2025
Categories
Recomended MCP Servers
An MCP server built with Node.js/TypeScript that allows AI agents to securely read PDF files (local or URL)...
A MCP Server for Cosense
use Bitget’s API to get cryptocurrency info
MCP Server for Mixpanel API (talk to your Mixpanel data)
A TypeScript-based MCP server that enables testing of REST APIs through Cline. This tool allows you to test...
A MCP Server with various chess functionality
Automatic operation of on-screen GUI.
Whatsapp MCP Server implemented in Python
MCP server implementation for n8n workflow automation
MCP server for querying the Shodan API





