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
A Model Context Protocol server implementation for ClickUp integration, enabling AI assistants to interact with ClickUp workspaces.
MCP server for Notion integration
A Model Context Protocol (MCP) server that enables AI assistants to query and analyze Azure Data Explorer databases...
支持SSE,STDIO;不仅止于mysql的增删改查功能; 还包含了数据库异常分析能力;且便于开发者们进行个性化的工具扩展 Support for SSE, STDIO in MySQL MCP server mcp_mysql_server_pro is not just about MySQL CRUD operations,...
MCP server for Unreal Engine 5
MCP server for interfacing with Godot game engine. Provides tools for launching the editor, running projects, and capturing...
Using ffmpeg command line to achieve an mcp server, can be very convenient, through the dialogue to achieve...
Allow LLMs to control a browser with Browserbase and Stagehand
QMT-MCP-Server
A Model Context Protocol server for IDA
Claude's OmniFocus integration: Let LLMs interface with your tasks through the Model Context Protocol. Add, organize, and query...





